package Ġcom . github . pro log db . async Ċ Ċ class ĠFilter ed Lazy Sequence < T >( ĊĠĠĠ Ġprivate Ġval Ġbase : ĠLazy Sequence < out ĠT >, ĊĠĠĠ Ġprivate Ġval Ġpredicate : Ġ( T ) Ġ-> ĠBoolean Ċ ) Ġ: ĠLazy Sequence < T > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġprincipal Ġ= Ġbase . principal ĊĊĠĠĠ Ġ/** ĠTrue Ġwhen Ġclosed Ġor Ġerro red Ġ*/ ĊĠĠĠ Ġvar Ġclosed Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĠIf Ġset , Ġthe Ġbase Ġerro red Ġ*/ ĊĠĠĠ Ġvar Ġerror : ĠThrowable ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĠCached Ġresult Ġfrom Ġcalculating Ġin Ġstep () Ġ*/ ĊĠĠĠ Ġvar Ġcached : ĠT ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġval Ġstate : ĠLazy Sequence . State ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ!= Ġnull Ġ-> ĠLazy Sequence . State . FAILED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclosed Ġ-> ĠLazy Sequence . State . DEP LETED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcached Ġ!= Ġnull Ġ-> ĠLazy Sequence . State . RESULTS _ AVAILABLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠLazy Sequence . State . PENDING ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstep (): ĠLazy Sequence . State Ġ= Ġstep ( false ) ĊĊĠĠĠ Ġprivate Ġfun Ġstep ( join If Pending : ĠBoolean ): ĠLazy Sequence . State Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( error Ġ!= Ġnull ) Ġreturn ĠLazy Sequence . State . FAILED ĊĠĠĠĠĠĠĠ Ġif Ġ( closed ) Ġreturn ĠLazy Sequence . State . DEP LETED ĊĠĠĠĠĠĠĠ Ġif Ġ( cached Ġ!= Ġnull ) Ġreturn ĠLazy Sequence . State . RESULTS _ AVAILABLE ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( base . step ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Sequence . State . RESULTS _ AVAILABLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Base Results @ while Ġ( base . state Ġ== ĠLazy Sequence . State . RESULTS _ AVAILABLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Value Ġ= Ġbase . try Advance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Value !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( predicate ( base Value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcached Ġ= Ġbase Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak @ check Base Results ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Sequence . State . DEP LETED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Sequence . State . FAILED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthrowable Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase . try Advance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠIllegalStateException (" Base Ġsequence ĠFAILED Ġbut Ġtry Advance () Ġdoes Ġnot Ġthrow ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ= Ġthrowable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Sequence . State . PENDING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( join If Pending ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Value Ġ= Ġbase . try Advance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( base Value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( predicate ( base Value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcached Ġ= Ġbase Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġelse : Ġwas Ġnot Ġdistinct ; Ġcached Ġremains Ġnull , Ġstill ĠP ENDING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġelse : Ġnothing Ġto Ġdo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġstate ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġtail rec Ġfun Ġtry Advance (): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ!= Ġnull Ġ-> Ġthrow Ġerror !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclosed Ġ-> Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcached Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcached !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcached Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep ( join If Pending Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Advance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġclosed Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbase . close () ĊĠĠĠ Ġ} Ċ }