8#ifndef SkRegionPriv_DEFINED
9#define SkRegionPriv_DEFINED
31 static void Validate(
const SkRegion& rgn);
41#define assert_sentinel(value, isSentinel) \
42 SkASSERT(SkRegionValueIsSentinel(value) == isSentinel)
55 return SkToInt((curr - runs) >> 1);
82 return fIntervalCount;
86 if (
count < SkRegion::kRectRegionRuns) {
91 if (
count < 0 || !SkTFitsIn<int32_t>(size)) {
SK_ABORT(
"Invalid Size"); }
95 head->fRunCount =
count;
97 head->fYSpanCount = 0;
98 head->fIntervalCount = 0;
103 if (yspancount <= 0 || intervalCount <= 1) {
111 head->fYSpanCount = yspancount;
112 head->fIntervalCount = intervalCount;
118 return (SkRegion::RunType*)(
this + 1);
122 return (
const SkRegion::RunType*)(
this + 1);
152 const int intervals = runs[1];
156 int n = compute_intervalcount(&runs[2]);
162 runs += 1 + 1 + intervals * 2 + 1;
163 return const_cast<SkRegion::RunType*
>(runs);
182 int bottom = runs[0];
191 return const_cast<SkRegion::RunType*
>(runs);
197 bounds->
fTop = *runs++;
201 int intervalCount = 0;
210 const int intervals = *runs++;
217 int n = compute_intervalcount(runs);
227 runs += intervals * 2;
228 RunType
R = runs[-1];
234 intervalCount += intervals;
248 fYSpanCount = ySpanCount;
249 fIntervalCount = intervalCount;
251 bounds->fLeft =
left;
252 bounds->fRight = rite;
253 bounds->fBottom = bot;
258 int32_t fIntervalCount;
#define SK_ABORT(message,...)
SK_API void sk_free(void *)
static void * sk_malloc_throw(size_t size)
static int64_t sk_64_mul(int64_t a, int64_t b)
static constexpr int32_t SK_MinS32
static constexpr int32_t SK_MaxS32
static bool left(const SkPoint &p0, const SkPoint &p1)
static constexpr int SkRegion_kRunTypeSentinel
bool SkRegionValueIsSentinel(int32_t value)
constexpr int SkToInt(S x)
static constexpr int kRunTypeSentinel
static void VisitSpans(const SkRegion &rgn, const std::function< void(const SkIRect &)> &)
SkRegion::RunType RunType
SkRegion::RunHead RunHead
int32_t fTop
smaller y-axis bounds
SkRegion::RunType * writable_runs()
static RunHead * Alloc(int count)
const SkRegion::RunType * readonly_runs() const
static RunHead * Alloc(int count, int yspancount, int intervalCount)
void computeRunBounds(SkIRect *bounds)
RunHead * ensureWritable()
int getYSpanCount() const
int getIntervalCount() const
static SkRegion::RunType * SkipEntireScanline(const SkRegion::RunType runs[])
SkRegion::RunType * findScanline(int y) const
std::atomic< int32_t > fRefCnt