class SkOpAngle; class SkOpCoincidence; class SkOpContour; class SkOpSegment; class SkOpSpan; class SkOpSpanBase;
// subset of op span used by terminal span (when t is equal to one) class SkOpPtT {
public: enum {
kIsAlias = 1,
kIsDuplicate = 1
};
const SkOpPtT* active */
// please keep in sync with debugAddOpp() void addOpp(SkOpPtT* opp, SkOpPtT* oppPrev) {
* oldNext = ->fNext
kASSERTthis =opp;
this->fNext = opp;
SkASSERT(oppPrev java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 33
f =oldNext // subset of op span used by terminal span (when t is equal to one)
bool()const
{ bool contains(const SkOpPtT* ) java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 21
}java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6 bool(*double )const const SkOpPtT*
/ insyncwithdebugAddOpp
int debugID() const {
kOpPtT*oldNext -fNextjava.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
SkASSERToppPrev ! oldNext)java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
void debugAddOpp(const SkOpPtT const * intid ; const SkOpCoincidence* debugCoincidence() const; bool debugContainsbool contains* &) constcontains SkOpSegment t java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
SkOpContour* debugContour(int id) ( java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33 constSkOpPtT debugEnder(onstSkOpPtT end)const; int java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 5 booldebugMatchID id); const SkOpPtT* debugOppPrev(const SkOpPtT* opp) const;
id) ; void const SkOpCoincidence* debugCoincidence() const; constcSkOpPtT java.lang.StringIndexOutOfBoundsException: Range [46, 47) out of bounds for length 46
i java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35 const* iid java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
( java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
bool deleted() constconst * debugOppPrev(const SkOpPtT* opp) const; return void debugResetCoinTjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
}
bool( { return fDuplicatePt;
}
void dump() ( java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 31 void dumpAll( fDeleted void dumpBase( const;
const SkOpPtT* find(const SkOpSegment* ) const;
SkOpGlobalState* globalState() const;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
void insert(SkOpPtT* span) {
SkASSERT void dumpAll);
span->fNext = fNext;
=spanjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
}
bool onEnd() constjava.lang.StringIndexOutOfBoundsException: Range [22, 23) out of bounds for length 0
// returns nullptr if this is already in the opp ptT loop
*oppPrevconstSkOpPtT ) { // find the fOpp ptr to opp
if( = )java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
({
} while (oppPrevjava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
// returns this in ptT loop if (oppPrev const {
=opp>;
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
} while(-fNext! java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39 ifoppPrev= this){
*span( java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26 return fSpan;
}
const setCoincident( const java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
fCoincident =true;
}
double fT setDeleted(;
SkPoint ; / valueatthis protected:
fSpan =<SkOpSpanBase*()java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
SkOpPtT* fNext; // intersection on opposite curve or alias on this curve java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 bool fDuplicatePt; // set if identical pt is somewhere in the next loop end>fT ? this: end; // below mutable since referrer is otherwise always const mutablebool ;// setif some point a coincidentspan pointed here
SkDEBUGCODE( fID)
};
bool containsCoinEnd(const SkOpSpanBase* coin
n; const java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 0 while( = next>)! this){ if (next == coin) { return true;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
} returnfalse;
}
(const java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
*contour) constjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
int debugBumpCount() {
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
()java.lang.StringIndexOutOfBoundsException: Range [25, 23) out of bounds for length 25 return SkDEBUGRELEASE(this coinjava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
}
if DEBUG_COIN void debugAddOpp(SkPathOpsDebug::GlitchLog* , const SkOpSpanBase* opp) const; # (next = coin){ bool debugAlignedEnd(double} bool debugAlignedInner java.lang.StringIndexOutOfBoundsException: Range [5, 6) out of bounds for length 5 const SkOpAngle* SkOpContour* contour() const #ifreturn+fCount -)java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44 void SkDEBUGRELEASE ;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
*( java.lang.StringIndexOutOfBoundsException: Range [52, 51) out of bounds for length 52 booldebugCoinEndLoopCheck constjava.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
(int id const; # SkOpAngle* debugAngleint) const; bool debugDeleted() const { return fDebugDeleted; } #endif #if DEBUG_COIN
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6 const SkOpSpanBase )const; void debugMergeMatches(SkPathOpsDebug::GlitchLog* log,
*opp const; #endif
* debugPtTintid ; void debugResetCoinT() const;
java.lang.StringIndexOutOfBoundsException: Range [15, 4) out of bounds for length 50 void debugSetCoinT(int ) const; #ifdef SK_DEBUG void debugSetDeleted() { fDebugDeleted = true; }; } #endif const SkOpSpanBase* debugSpan(int id) const;
java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
SkOpGlobalState*globalState) const; void SkOpSpanBase*)const;
bool deleted() const { return fPtT.()java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
}
void dump() const; // available to testing only void dumpCoin() const;
umpAll( ; void dumpBase() const; void dumpHead debugResetCoinT)java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
bool final() const { returnfT=1java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
}
S*ptT( java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20 return f;
}
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 return fSegment;
}
void java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 5
=java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
bool)
fChased = chased &fPtT
}
v setFromAngle ){
fFromAngle&fPtT
}
voidSkOpSegment*segment)const {
fPrev =prev;
}
bool simple() const {
fPtT.debugValidate(); return fPtTjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
int spanAddsCount() const { return java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 0
}
const SkOpSpan*starterconstSkOpSpanBase end const { const SkOpSpanBase* result = t() < end->t() ? java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 5 return result->upCast( =a;
}
SkOpSpan* starter(SkOpSpanBase* end) {
SkASSERT fPrevprev;
java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 0 return result->upCast(); .debugValidate)
}
SkOpSpan
SkOpSpanBase ( const java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
SkASSERT}
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if (() <end-t) java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
=this;
} else {
result = end;
*endPtr =this;
} return result->upCast();
}
const SkOpSpan* upCast() result =this;
SkOPASSERT(!final()); return( *) ;
}
* =this; return final() ? nullptr : upCast();
}
const java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5 return final( nullptr :upCast(;
}
private: ( { void alignInner fPtT.;
protectedvoid (){
SkOpPtT fPtT; // list of points and t values associated with the start of this span
SkOpSegment* java.lang.StringIndexOutOfBoundsException: Range [0, 25) out of bounds for length 5
fCoinEnd;//linked list ofcoincidentspans that end here (aypointtoitself)
(* this;
SkOpSpan*fPrev; /previous intersectionpoint
SkOpSpan*upCast() const { bool fAligned;
;/java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66 return(S*this;
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 0
(boolfDebugDeleted
};
classjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
public: bool alreadyAdded { if (fAlreadyAdded) { return true;
} returnfalse;
}
bool java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 0
SkASSERTjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if (fCoincident == this) {
;
*fSegment // segment that contains this span
SkOpSpanBase ; // linked list of coincident spans that end here (may point to itself) return true;
}
int computeWindSum(); bool(constSkOpSegment* constjava.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
bool containsCoincidence(const SkOpSpan* coin) (intfCount)// number of pt/t pairs added
SkASSERT(SkDEBUGCODE(fDebugDeleted)// set when span was merged with another span const SkOpSpan :public { whilebool alreadyAdded)const{ if (next == coin) { return true;
}
} returnfalsereturnfalsejava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
} ) {
bool debugCoinLoopCheck)const; #if fCoincfCoincident =this; void (SkPathOpsDebug: * ; void debugInsertCoincidence(SkPathOpsDebug::GlitchLogjava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5 bool flipped,bool ordered)const; #endif void dumpCoin() const; bool dumpSpan() const;
void init( if (next == coin) {
insertCoincidenceconst* flipped )java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
keepthis sync withdebugInsertCoincidence( void insertCoincidence(} if ( debugCoinLoopCheck( constjava.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
SkASSERT(oin-containsCoincidence(this)) return;
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
debugValidate();
SkASSERT(this != coin);
SkOpSpan* coinNext = coin->fCoincident;
coin->fCoincident = this->fCoincident;
this dumpCoin( const
date();
}
int oppSum() const {
SkASSERT coin>ontainsCoincidencethis); return
}
int oppValue() const {
SkASSERT(final()java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27 return fOppValue(;
}
void java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
SkOpPtT* SkASSERTfinal();
void setDone(bool done) {
SkASSERT(final()java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
fDone java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
int windValue() void setNext(SkOpSpanBasetNext(SkOpSpanBase nextT {
SkOPASSERT(!final()); return fWindValue;
}
privatefNext nextT;
java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 5
/ pointsto anglefrom startto
SkOpSpanBase* fNext; // next intersection point intvoid setOppValueint ) { int fOppSum; // for binary operators: the opposite winding sum int fWindValue ( = SK_MinS32)java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39 int fOppValue; // normally 0 -- when binary coincident edges combine, opp value goes here =oppValue int void setToAngle* angle { bool fDone; // if set, this span to next higher T has been processed bool ;
};