/* Ċ Ġ* ĠLicensed Ġto Ġthe ĠApache ĠSoftware ĠFoundation Ġ( ASF ) Ġunder Ġone Ċ Ġ* Ġor Ġmore Ġcontributor Ġlicense Ġagreements . Ġ ĠSee Ġthe ĠNOTICE Ġfile Ċ Ġ* Ġdistributed Ġwith Ġthis Ġwork Ġfor Ġadditional Ġinformation Ċ Ġ* Ġregarding Ġcopyright Ġownership . Ġ ĠThe ĠASF Ġlicenses Ġthis Ġfile Ċ Ġ* Ġto Ġyou Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ċ Ġ* Ġ" License "); Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ċ Ġ* Ġwith Ġthe ĠLicense . Ġ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ċ Ġ* Ġsoftware Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ċ Ġ* Ġ" AS ĠIS " ĠBASIS , ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY Ċ Ġ* ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe Ċ Ġ* Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ġlimitations Ċ Ġ* Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġorg . apache . t inker pop 4 . gre mlin . process . traversal . strategy . final ization Ċ Ċ import Ġorg . apache . t inker pop 4 . gre mlin . process . computer . traversal . step . map . Vertex Program Step Ċ Ċ /** Ċ Ġ* Ġ@ author ĠBob ĠB ri ody Ġ( http :// bo bb ri ody . com ) Ċ Ġ*/ Ċ class ĠProfile Strategy Ġprivate Ġconstructor () Ġ: ĠAbstract Traversal Strategy < Final ization Strategy ?> (), ĠFinal ization Strategy Ġ{ ĊĠĠĠ Ġ@ Override ĊĠĠĠ Ġfun Ġapply ( traversal : ĠTra versal . Admin < *, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! traversal . getEnd Step (). get Labels (). contains ( MARKER ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( traversal . is Root () Ġ|| Ġtraversal . getParent () Ġis ĠVertex Program Step ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTra versal Helper . has Step Of Assignable Class Re cursively ( Profile Side Effect Step :: class . java , Ġtraversal ) ĊĠĠĠĠĠĠĠ Ġ) ĠTra versal Helper . apply Traversal Re cursively ({ Ġt Ġ-> Ġt . getEnd Step (). add Label ( MARKER ) Ġ}, Ġtraversal ) ĊĠĠĠĠĠĠĠ Ġif Ġ( traversal . getEnd Step (). get Labels (). contains ( MARKER )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtraversal . getEnd Step (). remove Label ( MARKER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġ. profile () Ġstep Ġafter Ġevery Ġpre - existing Ġstep . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsteps : ĠList < Step > Ġ= Ġtraversal . get Steps () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnum Steps : ĠInt Ġ= Ġsteps . size () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġnum Steps ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo Ġnot Ġinject Ġprofiling Ġafter ĠProfile Side Effect Step Ġas Ġthis Ġwill Ġbe Ġthe Ġlast Ġstep Ġon Ġthe Ġroot Ġtraversal . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( steps [ i Ġ* Ġ 2 ] Ġis ĠProfile Side Effect Step ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġand Ġinject ĠProfile Step ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprofile Step ToAdd Ġ= ĠProfile Step ( traversal ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtraversal . add Step ( i Ġ* Ġ 2 Ġ+ Ġ 1 , Ġprofile Step ToAdd ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstep ToBe Profile d : ĠStep Ġ= Ġtraversal . get Steps (). get ( i Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( step ToBe Profile d Ġis ĠPro filing Aware ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( step ToBe Profile d Ġas ĠPro filing Aware ). prepare For Profiling () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINSTANCE Ġ= ĠProfile Strategy () ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠMARK ER : ĠString Ġ= ĠGraph . Hidden . hide (" gre mlin . profile ") ĊĠĠĠĠĠĠĠ Ġfun Ġinstance (): ĠProfile Strategy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠINSTANCE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }