package Ġm ary k . datastore . ro cksdb . processors Ċ Ċ import Ġm ary k . core . models . Is Root Values DataModel Ċ import Ġm ary k . core . processors . datastore . scan Range . Key Scan Ranges Ċ import Ġm ary k . core . properties . Property Definitions Ċ import Ġm ary k . core . properties . types . Key Ċ import Ġm ary k . core . query . orders . Direction Ċ import Ġm ary k . core . query . orders . Direction . ASC Ċ import Ġm ary k . core . query . orders . Direction . DESC Ċ import Ġm ary k . core . query . requests . Is Scan Request Ċ import Ġm ary k . datastore . ro cksdb . DB Accessor Ċ import Ġm ary k . datastore . ro cksdb . R ocks DB DataStore Ċ import Ġm ary k . datastore . ro cksdb . TableColumn F amilies Ċ import Ġm ary k . datastore . ro cksdb . processors . helpers . read Version Bytes Ċ Ċ internal Ġfun Ġ< DM Ġ: ĠIs Root Values DataModel < P >, ĠP Ġ: ĠProperty Definitions > Ġscan Store ( ĊĠĠĠ Ġdata Store : ĠR ocks DB DataStore , ĊĠĠĠ Ġdb Accessor : ĠDB Accessor , ĊĠĠĠ Ġcolumn F amilies : ĠTable Column F amilies , ĊĠĠĠ Ġscan Request : ĠIs Scan Request < DM , ĠP , Ġ* >, ĊĠĠĠ Ġdirection : ĠDirection , ĊĠĠĠ Ġscan Range : ĠKey Scan Ranges , ĊĠĠĠ Ġprocess Store Value : Ġ( Key < DM >, ĠU Long , ĠByteArray ?) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġiterator Ġ= Ġdb Accessor . get Iterator ( data Store . default Read Options , Ġcolumn F amilies . keys ) ĊĊĠĠĠ Ġwhen Ġ( direction ) Ġ{ ĊĠĠĠĠĠĠĠ ĠASC Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( range Ġin Ġscan Range . ranges ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Key Ġ= Ġrange . get Ascending Start Key ( scan Range . start Key , Ġscan Range . include Start ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . seek ( start Key ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSkip Ġif Ġvalue Ġshould Ġnot Ġbe Ġincluded ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( iterator . isValid () Ġ&& Ġ! range . start Inclusive Ġ&& Ġrange . start . content Equals ( iterator . key ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurrent Size : ĠUInt Ġ= Ġ 0 u ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( iterator . isValid ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġscan Request . data Model . key ( iterator . key ()) Ġas ĠKey < DM > ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( range . key OutOfRange ( key . bytes )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! scan Range . matches Partial s ( key . bytes )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreation Version Ġ= Ġiterator . value (). read Version Bytes () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scan Request . shouldBe Filtered ( db Accessor , Ġcolumn F amilies , Ġdata Store . default Read Options , Ġkey . bytes , Ġ 0 , Ġkey . size , Ġcreation Version , Ġscan Request . to Version )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Store Value ( key , Ġcreation Version , Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBreak Ġwhen Ġlimit Ġis Ġfound ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(++ current Size Ġ== Ġscan Request . limit ) Ġbreak ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠDESC Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( range Ġin Ġscan Range . ranges . reversed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Key Ġ= Ġrange . get Descending Start Key ( scan Range . start Key , Ġscan Range . include Start ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Key ?. let Ġ{ Ġlast Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . seek For Prev ( last ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġiterator . seek To Last () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSkip Ġif Ġvalue Ġshould Ġnot Ġbe Ġincluded ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( iterator . isValid () Ġ&& Ġ! range . end Inclusive Ġ&& Ġrange . end ?. content Equals ( iterator . key ()) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . prev () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurrent Size : ĠUInt Ġ= Ġ 0 u ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( iterator . isValid ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġscan Request . data Model . key ( iterator . key ()) Ġas ĠKey < DM > ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( range . key Before Start ( key . bytes )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! scan Range . matches Partial s ( key . bytes )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . prev () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreation Version Ġ= Ġiterator . value (). read Version Bytes () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scan Request . shouldBe Filtered ( db Accessor , Ġcolumn F amilies , Ġdata Store . default Read Options , Ġkey . bytes , Ġ 0 , Ġkey . size , Ġcreation Version , Ġscan Request . to Version )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . prev () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Store Value ( key , Ġcreation Version , Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBreak Ġwhen Ġlimit Ġis Ġfound ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(++ current Size Ġ== Ġscan Request . limit ) Ġbreak ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . prev () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġiterator . close () Ċ } Ċ