package Ġorg . pen ella . shards Ċ Ċ import Ġio . vertx . core .* Ċ import Ġio . vertx . core . event bus . Message Ċ import Ġorg . pen ella . Mail Boxes Ċ import Ġorg . pen ella . code cs . Shard Add Codec Ċ import Ġorg . pen ella . code cs . Shard Get Codec Ċ import Ġorg . pen ella . code cs . Shard Size Codec Ċ import Ġorg . pen ella . code cs . Shard Size Response Codec Ċ import Ġorg . pen ella . index . I Index Factory Ċ import Ġorg . pen ella . index . Index Type Ċ import Ġorg . pen ella . index . Index Vertical Ċ import Ġorg . pen ella . index . bst ree . Invalid Index Request Ċ import Ġorg . pen ella . messages .* Ċ import Ġorg . pen ella . structures . triples . Hash Triple Ċ import Ġorg . pen ella . structures . triples . Triple Type Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . util . concurrent . atomic . Atomic Long Ċ Ċ /** Ċ Ġ* ĠLicensed Ġ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 . Ċ Ġ* Ċ Ġ* ĠCreated Ġby Ġal is le Ġon Ġ 1 1 / 1 / 1 6 . Ċ Ġ*/ Ċ class ĠSh ard Ġconstructor ( private Ġval Ġname Ġ: ĠString , Ġprivate Ġval Ġindex Factory : ĠI Index Factory ) Ġ: ĠI Shard , ĠAbstract Vert icle () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlog : ĠLogger Ġ= ĠLoggerFactory . getLogger ( Shard :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġregister Code cs ( vertx : ĠVert x ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . event Bus (). register Default Codec ( Shard Get :: class . java , ĠSh ard Get Codec ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . event Bus (). register Default Codec ( Shard Size :: class . java , ĠSh ard Size Codec ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . event Bus (). register Default Codec ( Shard Size Response :: class . java , ĠSh ard Size Response Codec ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . event Bus (). register Default Codec ( Shard Add :: class . java , ĠSh ard Add Codec ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception Ġ: Ġjava . lang . IllegalStateException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Unable Ġto Ġregister Ġcodecs , Ġmost Ġlikely Ġalready Ġregistered ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġindexes Ġ= ĠArray ( Index Type . values (). size , Ġ{ Ġi Ġ-> Ġindex Factory . create Index ( Index Type . values ()[ i ]) Ġ}) ĊĊĊĠĠĠ Ġprivate Ġval Ġsize Handler Ġ= ĠHandler < Message < Shard Size >> Ġ{ Ġmsg Ġ-> ĊĠĠĠĠĠĠĠ Ġmsg . reply ( Shard Size Response ( size ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġget Handler Ġ= ĠHandler < Message < Shard Get >> Ġ{ Ġmsg Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġget Ġ= Ġmsg . body () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġget . index Type ĊĠĠĠĠĠĠĠ Ġval Ġtriple Ġ= Ġget . triple ĊĊĠĠĠĠĠĠĠ Ġif ( log . isDebugEnabled ) Ġlog . debug (" VER TX ĠGrab bing Ġtriple : Ġ$ triple ") ĊĊĠĠĠĠĠĠĠ Ġwhen ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIndex Type . S PO Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( triple . hash Property Ġ!= Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . event Bus (). send ( Mail Boxes . INDEX _ GET _ SECOND . mailbox Ġ+ Ġ"$ name -${ type . ID }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIndex Get Second Layer ( Triple Type . SUBJECT , Ġtriple . hash Subject , ĠTrip le Type . PROPERTY , Ġtriple . hash Property ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHandler < AsyncResult < Message < Index ResultSet >>> Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . reply ( response . result (). body ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . event Bus (). send ( Mail Boxes . INDEX _ GET _ FIRST . mailbox Ġ+ Ġ"$ name -${ type . ID }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIndex Get First Layer ( Triple Type . SUBJECT , Ġtriple . hash Subject ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHandler < AsyncResult < Message < Index ResultSet >>> Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . reply ( response . result (). body ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIndex Type . O Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( triple . hash Property Ġ== Ġ 0 L Ġ&& Ġtriple . hash Subject Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . event Bus (). send ( Mail Boxes . INDEX _ GET _ FIRST . mailbox Ġ+ Ġ"$ name -${ type . ID }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIndex Get First Layer ( Triple Type . OBJECT , Ġtriple . hash Obj ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHandler < AsyncResult < Message < Index ResultSet >>> Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . reply ( response . result (). body ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInvalid Index Request (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIndex Type . PO Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( triple . hash Obj Ġ!= Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . event Bus (). send ( Mail Boxes . INDEX _ GET _ SECOND . mailbox Ġ+ Ġ"$ name -${ type . ID }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIndex Get Second Layer ( Triple Type . PROPERTY , Ġtriple . hash Property , ĠTrip le Type . OBJECT , Ġtriple . hash Obj ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHandler < AsyncResult < Message < Index ResultSet >>> Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . reply ( response . result (). body ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . event Bus (). send ( Mail Boxes . INDEX _ GET _ FIRST . mailbox Ġ+ Ġ"$ name -${ type . ID }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIndex Get First Layer ( Triple Type . PROPERTY , Ġtriple . hash Property ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHandler < AsyncResult < Message < Index ResultSet >>> Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . reply ( response . result (). body ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIndex Type . SO Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( triple . hash Obj Ġ!= Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . event Bus (). send ( Mail Boxes . INDEX _ GET _ SECOND . mailbox Ġ+ Ġ"$ name -${ type . ID }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIndex Get Second Layer ( Triple Type . SUBJECT , Ġtriple . hash Subject , ĠTrip le Type . OBJECT , Ġtriple . hash Obj ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHandler < AsyncResult < Message < Index ResultSet >>> Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . reply ( response . result (). body ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . event Bus (). send ( Mail Boxes . INDEX _ GET _ FIRST . mailbox Ġ+ Ġ"$ name -${ type . ID }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIndex Get First Layer ( Triple Type . SUBJECT , Ġtriple . hash Subject ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHandler < AsyncResult < Message < Index ResultSet >>> Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . reply ( response . result (). body ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġadd Handler Ġ= ĠHandler < Message < Shard Add >> Ġ{ Ġmsg Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġtriple Ġ= Ġmsg . body (). triple ĊĊĠĠĠĠĠĠĠ Ġif ( log . isDebugEnabled ) Ġ Ġlog . debug (" Inser ting Ġtriple : Ġ$ triple ") ĊĊĠĠĠĠĠĠĠ Ġval Ġfutures Ġ= ĠArray < Future < Message < StatusMessage >> >( Index Type . values (). size , Ġ{ Ġx Ġ-> ĠFuture . future < Message < StatusMessage >>() Ġ}) ĊĠĠĠĠĠĠĠ ĠIndex Type . values (). forEach Ġ{ Ġtype Ġ-> Ġvert x . event Bus (). send ( Mail Boxes . INDEX _ ADD _ TR IP LE . mailbox Ġ+ Ġ"$ name -${ type . ID }", ĠIndex Add ( triple ), Ġfutures [ type . ID ]. comp leter ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcomposite Ġ= ĠComposite Future . all ( futures . toList ()) ĊĠĠĠĠĠĠĠ Ġcomposite . set Handler Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . reply ( StatusMessage ( Status . SU C ESS FUL , Ġ" OK ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounter . increment AndGet () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart ( start Future : ĠFuture < Void > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġvert x . event Bus (). consumer < Shard Get >( Mail Boxes . SH ARD _ GET . mailbox Ġ+ Ġname ). handler ( get Handler ) ĊĠĠĠĠĠĠĠ Ġvert x . event Bus (). consumer < Shard Size >( Mail Boxes . SH ARD _ SIZE . mailbox Ġ+ Ġname ). handler ( size Handler ) ĊĠĠĠĠĠĠĠ Ġvert x . event Bus (). consumer < Shard Add >( Mail Boxes . SH ARD _ ADD . mailbox Ġ+ Ġname ). handler ( add Handler ) ĊĊĠĠĠĠĠĠĠ ĠIndex Type . values (). forEach Ġ{ Ġtype Ġ-> Ġvert x . deploy Vert icle ( Index Vertical ("$ name -${ type . ID }", Ġindexes [ type . ID ])) Ġ} ĊĠĠĠĠĠĠĠ Ġstart Future ?. complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcounter Ġ= ĠAtomic Long ( 0 L ) ĊĊĠĠĠ Ġoverride Ġfun Ġsize () Ġ= Ġcounter . get () ĊĊĠĠĠ Ġoverride Ġfun Ġget ( index Type : ĠIndex Type , Ġtriple : ĠHash Triple ): ĠIndex ResultSet Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( log . isDebugEnabled ) Ġlog . debug (" Grab bing Ġtriple : Ġ$ triple ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( index Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIndex Type . S PO Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( triple . hash Property Ġ!= Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindexes [ index Type . ID ]. get ( Triple Type . SUBJECT , ĠTrip le Type . PROPERTY , Ġtriple . hash Subject , Ġtriple . hash Property ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindexes [ index Type . ID ]. get ( Triple Type . SUBJECT , Ġtriple . hash Subject ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIndex Type . O Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( triple . hash Property Ġ== Ġ 0 L Ġ&& Ġtriple . hash Subject Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindexes [ index Type . ID ]. get ( Triple Type . OBJECT , Ġtriple . hash Obj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInvalid Index Request (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIndex Type . PO Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( triple . hash Obj Ġ!= Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindexes [ index Type . ID ]. get ( Triple Type . PROPERTY , ĠTrip le Type . OBJECT , Ġtriple . hash Property , Ġtriple . hash Obj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindexes [ index Type . ID ]. get ( Triple Type . PROPERTY , Ġtriple . hash Property ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIndex Type . SO Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( triple . hash Obj Ġ!= Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindexes [ index Type . ID ]. get ( Triple Type . SUBJECT , ĠTrip le Type . OBJECT , Ġtriple . hash Subject , Ġtriple . hash Obj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindexes [ index Type . ID ]. get ( Triple Type . SUBJECT , Ġtriple . hash Subject ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd ( triple : ĠHash Triple ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( log . isDebugEnabled ) Ġ Ġlog . debug (" Inser ting Ġtriple : Ġ$ triple ") ĊĠĠĠĠĠĠĠ Ġcounter . increment AndGet () ĊĠĠĠĠĠĠĠ Ġindexes . forEach Ġ{ Ġx Ġ-> Ġx . add ( triple ) Ġ} ĊĊĠĠĠ Ġ} Ċ }