#include "include/core/SkColor.h"
#include "include/core/SkMatrix.h"
#include "include/core/SkPath.h"
#include "include/core/SkRect.h"
#include "include/core/SkRegion.h"
#include "include/core/SkScalar.h"
#include "include/core/SkTypes.h"
#include "include/private/base/SkDebug.h"
#include "include/private/base/SkMalloc.h"
#include "include/private/base/SkMath.h"
#include "include/private/base/SkPoint_impl.h"
#include "include/private/base/SkTDArray.h"
#include "include/private/base/SkTFitsIn.h"
#include "include/private/base/SkTo.h"
#include "src/base/SkSafeMath.h"
#include "src/base/SkTSort.h"
#include "src/core/SkBlitter.h"
#include "src/core/SkRegionPriv.h"
#include "src/core/SkScan.h"
#include <algorithm>
#include <cstdint>
#include <cstring>
#include <iterator>
static bool sk_memeq32(const int32_t* SK_RESTRICT a, const int32_t* SK_RESTRICT b, int count) { … }
class SkRgnBuilder : public SkBlitter { … };
SkRgnBuilder::SkRgnBuilder()
: … { … }
SkRgnBuilder::~SkRgnBuilder() { … }
bool SkRgnBuilder::init(int maxHeight, int maxTransitions, bool pathIsInverse) { … }
void SkRgnBuilder::blitH(int x, int y, int width) { … }
int SkRgnBuilder::computeRunCount() const { … }
void SkRgnBuilder::copyToRect(SkIRect* r) const { … }
void SkRgnBuilder::copyToRgn(SkRegion::RunType runs[]) const { … }
static unsigned verb_to_initial_last_index(unsigned verb) { … }
static unsigned verb_to_max_edges(unsigned verb) { … }
static int count_path_runtype_values(const SkPath& path, int* itop, int* ibot) { … }
static bool check_inverse_on_empty_return(SkRegion* dst, const SkPath& path, const SkRegion& clip) { … }
bool SkRegion::setPath(const SkPath& path, const SkRegion& clip) { … }
struct Edge { … };
static void find_link(Edge* base, Edge* stop) { … }
static int extract_path(Edge* edge, Edge* stop, SkPath* path) { … }
struct EdgeLT { … };
bool SkRegion::getBoundaryPath(SkPath* path) const { … }