7#ifndef SkOpSpan_DEFINED
8#define SkOpSpan_DEFINED
129 if (*sOut == *eOut) {
134 return *sOut && *eOut;
209 while ((
next =
next->fCoinEnd) !=
this) {
229 void debugAddOpp(SkPathOpsDebug::GlitchLog* ,
const SkOpSpanBase* opp)
const;
235 void debugCheckForCollapsedCoincidence(SkPathOpsDebug::GlitchLog* )
const;
241 bool debugDeleted()
const {
return fDebugDeleted; }
244 void debugInsertCoinEnd(SkPathOpsDebug::GlitchLog* ,
246 void debugMergeMatches(SkPathOpsDebug::GlitchLog*
log,
254 void debugSetDeleted() { fDebugDeleted =
true; }
362 if (
t() <
end->t()) {
372 return t() <
end->t() ? 1 : -1;
394 return final() ?
nullptr :
upCast();
398 return final() ?
nullptr :
upCast();
429 if (fCoincident ==
this) {
442 while ((
next =
next->fCoincident) !=
this) {
452 void debugInsertCoincidence(SkPathOpsDebug::GlitchLog* ,
const SkOpSpan* )
const;
453 void debugInsertCoincidence(SkPathOpsDebug::GlitchLog* ,
454 const SkOpSegment* ,
bool flipped,
bool ordered)
const;
475 SkOpSpan* coinNext = coin->fCoincident;
476 coin->fCoincident = this->fCoincident;
477 this->fCoincident = coinNext;
483 return fWindValue == 0 && fOppValue == 0;
488 return fCoincident !=
this;
492 fAlreadyAdded =
true;
static float next(float f)
#define check(reporter, ref, unref, make, kill)
static constexpr int32_t SK_MinS32
@ kYes
Do pre-clip the geometry before applying the (perspective) matrix.
@ kNo
Don't pre-clip the geometry before applying the (perspective) matrix.
#define SkDEBUGRELEASE(a, b)
#define SkOPOBJASSERT(obj, cond)
bool between(double a, double b, double c)
SkDEBUGCODE(SK_SPI) SkThreadID SkGetThreadID()
const SkOpSpanBase * span() const
void setCoincident() const
static bool Overlaps(const SkOpPtT *s1, const SkOpPtT *e1, const SkOpPtT *s2, const SkOpPtT *e2, const SkOpPtT **sOut, const SkOpPtT **eOut)
const SkOpPtT * next() const
SkOpGlobalState * globalState() const
int debugLoopLimit(bool report) const
void debugValidate() const
SkOpPtT * oppPrev(const SkOpPtT *opp) const
bool debugContains(const SkOpPtT *) const
const SkOpCoincidence * debugCoincidence() const
void addOpp(SkOpPtT *opp, SkOpPtT *oppPrev)
const SkOpSpanBase * debugSpan(int id) const
void setSpan(const SkOpSpanBase *span)
bool ptAlreadySeen(const SkOpPtT *head) const
const SkOpSegment * segment() const
const SkOpPtT * active() const
void debugSetCoinT(int) const
void debugResetCoinT() const
bool debugMatchID(int id) const
const SkOpPtT * debugPtT(int id) const
void insert(SkOpPtT *span)
SkOpContour * contour() const
SkOpContour * debugContour(int id) const
void debugAddOpp(const SkOpPtT *opp, const SkOpPtT *oppPrev) const
void init(SkOpSpanBase *, double t, const SkPoint &, bool dup)
const SkOpPtT * debugEnder(const SkOpPtT *end) const
const SkOpPtT * find(const SkOpSegment *) const
const SkOpPtT * debugOppPrev(const SkOpPtT *opp) const
bool contains(const SkOpPtT *) const
const SkOpPtT * starter(const SkOpPtT *end) const
const SkOpSegment * debugSegment(int id) const
const SkOpAngle * debugAngle(int id) const
int step(const SkOpSpanBase *end) const
const SkPoint & pt() const
Collapsed collapsed(double s, double e) const
const SkOpSpan * prev() const
SkOpSpan * starter(SkOpSpanBase *end)
void debugValidate() const
bool containsCoinEnd(const SkOpSpanBase *coin) const
void merge(SkOpSpan *span)
const SkOpAngle * debugAngle(int id) const
const SkOpSpanBase * coinEnd() const
bool mergeMatches(SkOpSpanBase *opp)
void insertCoinEnd(SkOpSpanBase *coin)
const SkOpCoincidence * debugCoincidence() const
void setFromAngle(SkOpAngle *angle)
SkOpContour * contour() const
int spanAddsCount() const
void setChased(bool chased)
SkOpGlobalState * globalState() const
void initBase(SkOpSegment *parent, SkOpSpan *prev, double t, const SkPoint &pt)
bool addOpp(SkOpSpanBase *opp)
const SkOpSegment * debugSegment(int id) const
SkOpAngle * fromAngle() const
bool debugAlignedEnd(double t, const SkPoint &pt) const
const SkOpSpanBase * debugSpan(int id) const
SkOpContour * debugContour(int id) const
const SkOpSpan * debugStarter(SkOpSpanBase const **endPtr) const
void debugResetCoinT() const
bool debugCoinEndLoopCheck() const
const SkOpSpan * upCastable() const
SkOpSpan * starter(SkOpSpanBase **endPtr)
bool contains(const SkOpSpanBase *) const
const SkOpPtT * debugPtT(int id) const
SkDEBUGCODE(int fCount;) SkDEBUGCODE(int fID
bool debugAlignedInner() const
void setPrev(SkOpSpan *prev)
const SkOpSpan * upCast() const
const SkOpSpan * starter(const SkOpSpanBase *end) const
void checkForCollapsedCoincidence()
void debugSetCoinT(int) const
SkOpSegment * segment() const
const SkOpPtT * ptT() const
void setToAngle(SkOpAngle *angle)
bool sortableTop(SkOpContour *)
void setWindValue(int windValue)
bool insertCoincidence(const SkOpSegment *, bool flipped, bool ordered)
SkOpSpanBase * next() const
bool containsCoincidence(const SkOpSpan *coin) const
void setNext(SkOpSpanBase *nextT)
void insertCoincidence(SkOpSpan *coin)
void setOppValue(int oppValue)
bool alreadyAdded() const
void setWindSum(int windSum)
SkOpPtT * setCoinStart(SkOpSpan *oldCoinStart, SkOpSegment *oppSegment)
bool isCoincident() const
SkOpAngle * toAngle() const
bool containsCoincidence(const SkOpSegment *) const
bool debugCoinLoopCheck() const
void setOppSum(int oppSum)
void release(const SkOpPtT *)
void init(SkOpSegment *parent, SkOpSpan *prev, double t, const SkPoint &pt)