/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠNet flix , ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ package Ġcom . netflix . spin n aker . or ca . sql . pipeline . persistence Ċ Ċ /** Ċ Ġ* ĠAn Ġiterator Ġthat Ġcan Ġfetch Ġpag inated Ġdata Ġtransparent ly Ġto Ġclients . Ċ Ġ*/ Ċ class ĠP aged Iterator < T , ĠC >( ĊĠ Ġprivate Ġval ĠpageSize : ĠInt , ĊĠ Ġprivate Ġval Ġto Cursor : Ġ( T ) Ġ-> ĠC , ĊĠ Ġprivate Ġval Ġnext Page : Ġ( Int , ĠC ?) Ġ-> ĠIterable < T > Ċ ) Ġ: ĠIterator < T > Ġ{ ĊĠ Ġoverride Ġfun Ġhas Next (): ĠBoolean Ġ= ĊĠĠĠ Ġif Ġ( is Last Page Ġ&& Ġindex Ġ> ĠcurrentPage . last Index ) Ġ{ ĊĠĠĠĠĠ Ġfalse ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġload Next Chunk If Ne cessary () ĊĠĠĠĠĠ Ġindex Ġ<= ĠcurrentPage . last Index ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġnext (): ĠT Ġ= ĊĠĠĠ Ġif Ġ( is Last Page Ġ&& Ġindex Ġ> ĠcurrentPage . last Index ) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠNoSuch ElementException () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġload Next Chunk If Ne cessary () ĊĠĠĠĠĠ ĠcurrentPage [ index ++] ĊĠĠĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġload Next Chunk If Ne cessary () Ġ{ ĊĠĠĠ Ġif Ġ( index Ġ! in ĠcurrentPage . indices ) Ġ{ ĊĠĠĠĠĠ ĠcurrentPage . clear () ĊĠĠĠĠĠ Ġnext Page ( pageSize , Ġcursor ). let ( currentPage :: addAll ) ĊĠĠĠĠĠ Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠ Ġcursor Ġ= ĠcurrentPage . last OrNull ()?. let ( to Cursor ) ĊĠĠĠĠĠ Ġis Last Page Ġ= ĠcurrentPage . size Ġ< ĠpageSize ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġvar Ġcursor : ĠC ? Ġ= Ġnull ĊĠ Ġprivate Ġval ĠcurrentPage : ĠMutable List < T > Ġ= Ġmutable ListOf () ĊĠ Ġprivate Ġvar Ġindex : ĠInt Ġ= Ġ- 1 ĊĠ Ġprivate Ġvar Ġis Last Page : ĠBoolean Ġ= Ġfalse Ċ } Ċ