package Ġcom . h ile co . c ortex . collections Ċ Ċ import Ġjava . util .* Ċ Ċ private Ġclass ĠStack Layer < T >( parent : ĠStack Layer < T > ?) Ġ: ĠLayer < Stack Layer < T >>( parent ) Ġ{ ĊĠĠĠ Ġval Ġentries : ĠMutable Map < Int , ĠT > Ġ= ĠHashMap () ĊĠĠĠ Ġvar Ġlength : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġval Ġis Layer Empty : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġentries . isEmpty () Ġ&& Ġlayer Parent ?. length Ġ== Ġlength ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . length Ġ= Ġparent ?. length Ġ?: Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpush ( value : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġentries [ length ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġlength ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpop (): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġpeek () ĊĠĠĠĠĠĠĠ Ġentries . remove ( length Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġlength -- ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpeek ( offset : ĠInt Ġ= Ġ 0 ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis [ length Ġ- Ġoffset Ġ- Ġ 1 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġget ( index : ĠInt ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlayer : ĠStack Layer < T >? Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġwhile Ġ( layer Ġ!= Ġnull Ġ&& Ġlayer . length Ġ> Ġindex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġlayer . entries [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayer Ġ= Ġlayer . layer Parent ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠIndex OutOfBoundsException (" size Ġ$ length Ġ<= Ġindex Ġ$ index ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġset ( index : ĠInt , Ġvalue : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( length Ġ< Ġindex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIndex OutOfBoundsException (" size Ġ$ length Ġ<= Ġindex Ġ$ index ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . entries [ index ] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġas Sequence (): ĠSequence < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠInt Range ( 0 , Ġlength Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġthis [ it ] Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠImplements Ġ[ Collection ] Ġand Ġ[ Br an ched ] Ġusing Ġa Ġbacking Ġ[ Stack Layer ] Ġtree . Ċ Ġ* Ċ Ġ* ĠNote Ġthat Ġ[ Br an ched ] Ġimplementations Ġare Ġexplicitly Ġnot Ġthread Ġunsafe . Ċ Ġ* Ċ Ġ* ĠPlease Ġavoid Ġthe Ġfollowing Ġmethods Ġwhen Ġperformance Ġis Ġv ital Ġfor Ġyour Ġuse Ġcase ; Ċ Ġ* Ġ- Ġ[ contains ] Ċ Ġ* Ġ- Ġ[ contains All ] Ċ Ġ* Ġ- Ġ[ iterator ] Ċ Ġ* Ċ Ġ* Ġ[ Br an ched Stack ] Ġdiv erge s Ġfrom Ġregular Ġcollections : Ċ Ġ* Ġ- Ġ[ equals ] Ġand Ġ[ hashCode ] Ġuse Ġonly Ġ[ Layer . id ], Ġthey Ġdo Ġnot Ġrepresent Ġor Ġcompare Ġthe Ġcontent Ġof Ġthe Ġstructure Ġitself Ċ Ġ*/ Ċ class ĠBr an ched Stack < T > Ġ: ĠCollection < T >, ĠBr an ched < Br an ched Stack < T >> Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġedge : ĠStack Layer < T > ĊĊĠĠĠ Ġprivate Ġconstructor ( edge : ĠStack Layer < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . edge Ġ= Ġedge ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . edge Ġ= ĠStack Layer ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġsize : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġedge . length ĊĊĠĠĠ Ġoverride Ġfun Ġcontains ( element : ĠT ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġedge . as Sequence (). any Ġ{ Ġit Ġ== Ġelement Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcontains All ( elements : ĠCollection < T >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġedge . as Sequence (). all Ġ{ Ġelements . contains ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠisEmpty (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġedge . length Ġ== Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġiterator (): ĠIterator < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġedge . as Sequence (). iterator () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpush ( value : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . edge . push ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpop (): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . edge . pop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpeek ( offset : ĠInt Ġ= Ġ 0 ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . edge . peek ( offset ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġget ( index : ĠInt ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . edge [ index ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġset ( index : ĠInt , Ġvalue : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . edge [ index ] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġswap ( top Offset Left : ĠInt , Ġtop Offset Right : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġindex Left Ġ= Ġedge . length Ġ- Ġtop Offset Left Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġindex Right Ġ= Ġedge . length Ġ- Ġtop Offset Right Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġget ( index Left ) ĊĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġget ( index Right ) ĊĠĠĠĠĠĠĠ Ġset ( index Left , Ġright ) ĊĠĠĠĠĠĠĠ Ġset ( index Right , Ġleft ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġduplicate ( offset : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġpeek ( offset ) ĊĠĠĠĠĠĠĠ Ġpush ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . edge . close () ĊĠĠĠĠĠĠĠ Ġthis . edge Ġ= ĠStack Layer ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . edge . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcopy (): ĠBr an ched Stack < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( edge . is Layer Empty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . edge Ġ= Ġedge . layer Parent Ġ?: Ġreturn ĠBr an ched Stack () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġchild 1 Ġ= ĠStack Layer ( edge ) ĊĠĠĠĠĠĠĠ Ġval Ġchild 2 Ġ= ĠStack Layer ( edge ) ĊĠĠĠĠĠĠĠ Ġthis . edge Ġ= Ġchild 1 ĊĠĠĠĠĠĠĠ Ġreturn ĠBr an ched Stack ( child 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġparent (): ĠBr an ched Stack < T >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġedge Layer Parent Ġ= Ġedge . layer Parent ĊĠĠĠĠĠĠĠ Ġif Ġ( edge Layer Parent Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBr an ched Stack ( edge Layer Parent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġid (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġedge . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġedge . hashCode () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġother Ġis ĠBr an ched Stack < *> Ġ&& Ġother . edge Ġ== Ġedge ĊĠĠĠ Ġ} Ċ } Ċ