package Ġm ary k . datastore . memory . processors Ċ Ċ import Ġm ary k . core . exceptions . Type Exception Ċ import Ġm ary k . core . models . Is Root Values DataModel Ċ import Ġm ary k . core . processors . datastore . read Storage To Changes Ċ import Ġm ary k . core . properties . Property Definitions Ċ import Ġm ary k . core . properties . graph . Root Prop Ref Graph Ċ import Ġm ary k . core . properties . types . Bytes Ċ import Ġm ary k . core . query . changes . DataObject Version ed Change Ċ import Ġm ary k . datastore . memory . records . Data Record Ċ import Ġm ary k . datastore . memory . records . Data Record Historic Values Ċ import Ġm ary k . datastore . memory . records . Data Record Node Ċ import Ġm ary k . datastore . memory . records . Data Record Value Ċ import Ġm ary k . datastore . memory . records . Deleted Value Ċ Ċ /** ĠPro cesses Ġ[ record ] Ġvalues Ġto Ġa ĠData Object With Changes Ġobject Ġ*/ Ċ internal Ġfun Ġ< DM Ġ: ĠIs Root Values DataModel < P >, ĠP Ġ: ĠProperty Definitions > ĠDM . record ToObject Changes ( ĊĠĠĠ Ġselect : ĠRoot Prop Ref Graph < P > ?, ĊĠĠĠ Ġfrom Version : ĠU Long , ĊĠĠĠ Ġto Version : ĠU Long ?, ĊĠĠĠ Ġmax Versions : ĠUInt , ĊĠĠĠ Ġsorting Key : ĠByteArray ?, ĊĠĠĠ Ġrecord : ĠData Record < DM , ĠP > Ċ ): ĠData Object Version ed Change < DM >? Ġ{ ĊĠĠĠ Ġvar Ġvalue Index Ġ= Ġ- 1 ĊĊĠĠĠ Ġval Ġchanges Ġ= Ġthis . read Storage To Changes ( ĊĠĠĠĠĠĠĠ Ġget Qualifier Ġ= Ġ{ Ġresult Handler Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Index ++ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġskip Ġdeleted Ġvalues ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( value Index Ġ< Ġrecord . values . size Ġ&& Ġis Deleted Node ( record . values [ value Index ])) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Index ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Index Ġ< Ġrecord . values . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġqualifier Ġ= Ġrecord . values [ value Index ]. reference ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Handler ({ Ġqualifier [ it ] Ġ}, Ġqualifier . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġfalse ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġselect Ġ= Ġselect , ĊĠĠĠĠĠĠĠ Ġcreation Version Ġ= Ġif ( record . first Version . timestamp Ġ> Ġfrom Version ) Ġrecord . first Version . timestamp Ġelse Ġnull , ĊĠĠĠĠĠĠĠ Ġprocess Value Ġ= Ġ{ Ġ_, Ġ_, Ġvalue With Version Reader Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġnode Ġ= Ġrecord . values [ value Index ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠData Record Value < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġadd Ġif Ġbelow Ġexpected Ġversion ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . version Ġ>= Ġfrom Version Ġ&& Ġ( to Version Ġ== Ġnull Ġ|| Ġnode . version Ġ< Ġto Version )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue With Version Reader ( node . version . timestamp , Ġnode . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠData Record Historic Values < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . history . last (). version Ġ< Ġfrom Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġskip Ġvalue Ġbecause Ġlast Ġis Ġbelow Ġfrom Version ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Index Ġ= Ġif Ġ( to Version Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . history . last Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . history . indexOf Last Ġ{ Ġit . version Ġ< Ġto Version Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( last Index Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( count Ġin Ġ 0 Ġuntil Ġmax Versions . toInt ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Value Ġ= Ġnode . history . get OrNull ( last Index Ġ- Ġcount ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġbreak Ġ// ĠNo Ġvalues Ġleft Ġso Ġbreak Ġthe Ġloop ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Value . version Ġ< Ġfrom Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak Ġ// ĠBefore Ġfrom Ġversion Ġso Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( current Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠData Record Value < *> Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue With Version Reader ( current Value . version . timestamp , Ġcurrent Value . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDeleted Value < *> Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue With Version Reader ( current Value . version . timestamp , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠType Exception (" Unknown Ġvalue Ġtype ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDeleted Value < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . version Ġ>= Ġfrom Version Ġ&& Ġ( to Version Ġ== Ġnull Ġ|| Ġnode . version Ġ< Ġto Version )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue With Version Reader ( node . version . timestamp , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġif Ġ( changes . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠReturn Ġnull Ġif Ġno ĠValue Items Ġwere Ġfound ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠData Object Version ed Change ( ĊĠĠĠĠĠĠĠ Ġkey Ġ= Ġrecord . key , ĊĠĠĠĠĠĠĠ Ġsorting Key Ġ= Ġsorting Key ?. let (:: Bytes ), ĊĠĠĠĠĠĠĠ Ġchanges Ġ= Ġchanges ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** ĠCheck Ġif Ġ[ node ] Ġis Ġdeleted Ġ*/ Ċ private Ġfun Ġis Deleted Node ( node : ĠData Record Node ) Ġ= ĊĠĠĠ Ġnode Ġis ĠDeleted Value < *> Ġ|| Ġ( node Ġis ĠData Record Historic Values < *> Ġ&& Ġnode . history . last () Ġis ĠDeleted Value <* >) Ċ