package Ġcom . github . h 0 tk 3 y . better Parse . utils Ċ Ċ import Ġcom . github . h 0 tk 3 y . better Parse . lexer . Token Match Ċ import Ġcom . github . h 0 tk 3 y . better Parse . lexer . Tokenizer Matches Sequence Ċ Ċ internal Ġopen Ġclass ĠCached Sequence < T > Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġval Ġsource : ĠIterator < T >, ĊĠĠĠĠĠĠĠ Ġval Ġcache : ĠArrayList < T >, ĊĠĠĠĠĠĠĠ Ġval Ġstart At : ĠInt Ċ ) Ġ: ĠSequence < T > Ġ{ ĊĊĠĠĠ Ġconstructor ( source : ĠSequence < T >) Ġ: Ġthis ( source . iterator (), ĠArrayList (), Ġ 0 ) ĊĊĠĠĠ Ġoverride Ġfun Ġiterator (): ĠIterator < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠIterator < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpos Ġ= Ġstart At ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhas Next () Ġ= Ġpos Ġ< Ġcache . size Ġ|| Ġsource . hasNext () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnext (): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( pos Ġ>= Ġcache . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . add ( source . next ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcache [ pos ++] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun ĠSequence < Token Match >. skip One (): ĠSequence < Token Match > Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠ Ġis ĠToken izer Matches Sequence Ġ-> ĠToken izer Matches Sequence ( source , Ġtokenizer , Ġcache , Ġstart At Ġ+ Ġ 1 ) ĊĠĠĠ Ġis ĠCached Sequence Ġ-> ĠCached Sequence ( source , Ġcache , Ġstart At Ġ+ Ġ 1 ) ĊĠĠĠ Ġelse Ġ-> Ġdrop ( 1 ) Ċ } Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġsequence Ġthat Ġcaches Ġthe Ġonce - evalu ated Ġitems Ġof Ġthe Ġoriginal Ġsequence , Ġso Ġthat Ċ Ġ* Ġrepeated Ġiteration Ġdoes Ġnot Ġlead Ġto Ġevaluating Ġthe Ġitems Ġagain . Ċ Ġ*/ Ċ fun Ġ< T > ĠSequence < T >. cached (): ĠSequence < T > Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠ Ġis ĠCached Sequence Ġ-> Ġthis ĊĠĠĠ Ġelse Ġ-> ĠCached Sequence ( this ) Ċ }