package Ġm ary k . core . processors . datastore Ċ Ċ import Ġm ary k . core . exceptions . Type Exception Ċ import Ġm ary k . core . extensions . bytes . calculate Var Int With Extra Info Byte Size Ċ import Ġm ary k . core . extensions . bytes . write Var Int With Extra Info Ċ import Ġm ary k . core . models . Is DataModel Ċ import Ġm ary k . core . processors . datastore . Storage TypeEnum . Embed Ċ import Ġm ary k . core . processors . datastore . Storage TypeEnum . Value Ċ import Ġm ary k . core . properties . Abstract Property Definitions Ċ import Ġm ary k . core . properties . Is Property Context Ċ import Ġm ary k . core . properties . definitions . Embedded Values Definition Ċ import Ġm ary k . core . properties . definitions . Is Embedded Values Definition Ċ import Ġm ary k . core . properties . definitions . Is List Definition Ċ import Ġm ary k . core . properties . definitions . Is Map Definition Ċ import Ġm ary k . core . properties . definitions . Is Multi Type Definition Ċ import Ġm ary k . core . properties . definitions . Is Property Definition Ċ import Ġm ary k . core . properties . definitions . IsSet Definition Ċ import Ġm ary k . core . properties . definitions . Is Simple Value Definition Ċ import Ġm ary k . core . properties . enum . TypeEnum Ċ import Ġm ary k . core . properties . references . Reference Type Ċ import Ġm ary k . core . properties . references . Reference Type . DELETE Ċ import Ġm ary k . core . properties . references . Reference Type . EMB ED Ċ import Ġm ary k . core . properties . references . Reference Type . LIST Ċ import Ġm ary k . core . properties . references . Reference Type . MAP Ċ import Ġm ary k . core . properties . references . Reference Type . SET Ċ import Ġm ary k . core . properties . references . Reference Type . TYPE Ċ import Ġm ary k . core . properties . references . Reference Type . VALUE Ċ import Ġm ary k . core . properties . types . Typed Value Ċ import Ġm ary k . core . values . Abstract Values Ċ import Ġm ary k . core . values . Any Abstract Values Ċ Ċ sealed Ġclass ĠStorage TypeEnum < out ĠT Ġ: ĠIs Property Definition < *> >( val Ġreference Type : ĠReference Type ) Ġ{ ĊĠĠĠ Ġobject ĠObject Delete Ġ: ĠStorage TypeEnum < Is Property Definition < Boolean >>( DELETE ) ĊĠĠĠ Ġobject ĠValue Ġ: ĠStorage TypeEnum < Is Simple Value Definition < Any , ĠIs Property Context >>( VALUE ) ĊĠĠĠ Ġobject ĠList Size Ġ: ĠStorage TypeEnum < Is List Definition < Any , ĠIs Property Context >>( LIST ) ĊĠĠĠ Ġobject ĠSet Size Ġ: ĠStorage TypeEnum < IsSet Definition < Any , ĠIs Property Context >>( SET ) ĊĠĠĠ Ġobject ĠMap Size Ġ: ĠStorage TypeEnum < Is Map Definition < Any , ĠAny , ĠIs Property Context >>( MAP ) ĊĠĠĠ Ġobject ĠType Value Ġ: ĠStorage TypeEnum < Is Multi Type Definition < TypeEnum < Any >, ĠAny , ĠIs Property Context >>( TYPE ) ĊĠĠĠ Ġobject ĠEmbed Ġ: ĠStorage TypeEnum < Is Embedded Values Definition < *, Ġ*, Ġ* >>( EMB ED ) ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġcast Definition ( definition : ĠIs Property Definition < *> ?) Ġ= Ġdefinition Ġas ĠT Ċ } Ċ Ċ type alias ĠValue Writer < T > Ġ= Ġ( Storage TypeEnum < T >, ĠByteArray , ĠT , ĠAny ) Ġ-> ĠUnit Ċ internal Ġtype alias ĠQual ifier Writer Ġ= Ġ(( Byte ) Ġ-> ĠUnit ) Ġ-> ĠUnit Ċ Ċ /** Ċ Ġ* ĠWalk ĠValues Ġand Ġprocess Ġst orable Ġvalues . Ċ Ġ* ĠPass Ġ[ value Writer ] Ġto Ġprocess Ġvalues Ċ Ġ*/ Ċ fun Ġ< DM Ġ: ĠIs DataModel < P >, ĠP Ġ: ĠAbstract Property Definitions <* >> ĠAbstract Values < *, ĠDM , ĠP >. writeTo Storage ( ĊĠĠĠ Ġvalue Writer : ĠValue Writer < Is Property Definition <* >> Ċ ) Ġ= Ġthis . writeTo Storage ( 0 , Ġnull , Ġvalue Writer ) Ċ Ċ /** Ċ Ġ* ĠWalk ĠValues Ġand Ġprocess Ġst orable Ġvalues . Ċ Ġ* Ġ[ qual ifier Count ], Ġ[ qual ifier Writer ] Ġdefine Ġthe Ġcount Ġand Ġwriter Ġfor Ġany Ġparent Ġproperty Ċ Ġ* ĠPass Ġ[ value Writer ] Ġto Ġprocess Ġvalues Ċ Ġ*/ Ċ fun Ġ< DM Ġ: ĠIs DataModel < P >, ĠP Ġ: ĠAbstract Property Definitions <* >> ĠAbstract Values < *, ĠDM , ĠP >. writeTo Storage ( ĊĠĠĠ Ġqualifier Count : ĠInt Ġ= Ġ 0 , ĊĠĠĠ Ġqualifier Writer : ĠQual ifier Writer ? Ġ= Ġnull , ĊĠĠĠ Ġvalue Writer : ĠValue Writer < Is Property Definition <* >> Ċ ) Ġ{ ĊĠĠĠ Ġfor Ġ(( index , Ġvalue ) Ġin Ġthis . values ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdefinition Ġ= Ġthis . data Model . properties [ index ] !! ĊĠĠĠĠĠĠĠ Ġwrite Value ( definition . index , Ġqualifier Count , Ġqualifier Writer , Ġdefinition . definition , Ġvalue , Ġvalue Writer ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠProcess Ġa Ġsingle Ġvalue Ġwith Ġ[ value Writer ] Ġat Ġ[ index ] Ġwith Ġ[ definition ] Ġand Ġ[ value ] Ċ Ġ* Ġ[ qual ifier Length ], Ġ[ qual ifier Writer ] Ġdefine Ġthe Ġcount Ġand Ġwriter Ġfor Ġany Ġparent Ġproperty Ċ Ġ* ĠIf Ġindex Ġis Ġ- 1 , Ġthis Ġvalue Ġhas Ġno Ġindex . Ċ Ġ*/ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ internal Ġfun Ġ< T Ġ: ĠIs Property Definition <* >> Ġwrite Value ( ĊĠĠĠ Ġindex : ĠUInt ?, ĊĠĠĠ Ġqualifier Length : ĠInt , ĊĠĠĠ Ġqualifier Writer : ĠQual ifier Writer ? Ġ= Ġnull , ĊĠĠĠ Ġdefinition : ĠT , ĊĠĠĠ Ġvalue : ĠAny , ĊĠĠĠ Ġvalue Writer : ĠValue Writer < T > Ċ ) Ġ{ ĊĠĠĠ Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠList < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( definition Ġ! is ĠIs List Definition < *, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠType Exception (" Definition Ġshould Ġbe Ġa ĠList Definition Ġfor Ġa ĠList ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Index Ġ= Ġindex Ġ?: Ġ 0 u ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Qualifier Writer Ġ= Ġcreate Qualifier Writer ( qual ifier Writer , Ġnew Index , ĠLIST ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Qualifier Count Ġ= Ġqualifier Length Ġ+ Ġnew Index . calculate Var Int With Extra Info Byte Size () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite List To Storage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Qualifier Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Qualifier Writer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Writer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinition , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠSet < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Index Ġ= Ġindex Ġ?: Ġ 0 u ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġset Qualifier Writer Ġ= Ġcreate Qualifier Writer ( qual ifier Writer , Ġnew Index , ĠSET ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġset Qualifier Count Ġ= Ġqualifier Length Ġ+ Ġnew Index . calculate Var Int With Extra Info Byte Size () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Set To Storage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Qualifier Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Qualifier Writer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Writer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinition , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠMap < *, Ġ*> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( definition Ġ! is ĠIs Map Definition < *, Ġ*, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠType Exception (" Definition Ġshould Ġbe Ġa ĠMap Definition Ġfor Ġa ĠMap ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Index Ġ= Ġindex Ġ?: Ġ 0 u ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Qualifier Writer Ġ= Ġcreate Qualifier Writer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqualifier Writer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMAP ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Qualifier Count Ġ= Ġqualifier Length Ġ+ Ġnew Index . calculate Var Int With Extra Info Byte Size () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Map To Storage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Qualifier Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Qualifier Writer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Writer Ġas ĠValue Writer < Is Map Definition < *, Ġ*, Ġ* >>, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinition Ġas ĠIs Map Definition < *, Ġ*, Ġ* >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġas ĠMap < Any , ĠAny > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠAbstract Values < *, Ġ*, Ġ*> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( definition Ġ! is ĠEmbedded Values Definition < *, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠType Exception (" Expected ĠEmbedded ĠValues ĠDefinition Ġfor ĠValues Ġobject ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Writer Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġnull ) Ġqualifier Writer Ġelse Ġcreate Qualifier Writer ( qual ifier Writer , Ġindex , ĠE MB ED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġabstract Values Qualifier Count Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġnull ) Ġqualifier Length Ġelse Ġqualifier Length Ġ+ Ġindex . calculate Var Int With Extra Info Byte Size () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWrite Ġcomplex Ġvalues Ġexistence Ġindicator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWrite Ġparent Ġvalue Ġwith ĠUnit Ġso Ġit Ġknows Ġthis Ġone Ġis Ġnot Ġdeleted . ĠSo Ġpossible Ġl ing ering Ġold Ġtypes Ġare Ġnot Ġread . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġqualifier Ġ= Ġwrite Qualifier ( abstract Values Qualifier Count , Ġindex Writer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Writer ( Embed Ġas ĠStorage TypeEnum < T >, Ġqualifier , Ġdefinition , ĠUnit ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( value Ġas ĠAny Abstract Values ). writeTo Storage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabstract Values Qualifier Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Writer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Writer Ġas ĠValue Writer < Is Property Definition <* >> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠTyped Value < *, Ġ*> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( definition Ġ! is ĠIs Multi Type Definition < *, Ġ*, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠType Exception (" Definition Ġshould Ġbe Ġa ĠMulti Type Definition Ġfor Ġa ĠTyped Value ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Qualifier Writer Ġ= Ġif Ġ( index Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Qualifier Writer ( qual ifier Writer , Ġindex , ĠVALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġqualifier Writer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Qualifier Size Ġ= Ġif Ġ( index Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqualifier Length Ġ+ Ġindex . calculate Var Int With Extra Info Byte Size () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġqualifier Length ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Typed Value To Storage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Qualifier Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Qualifier Writer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Writer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinition , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġqualifier Ġ= Ġif Ġ( index Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Qualifier ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqualifier Length Ġ+ Ġindex . calculate Var Int With Extra Info Byte Size (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Qualifier Writer ( qual ifier Writer , Ġindex , ĠVALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġwrite Qualifier ( qual ifier Length , Ġqualifier Writer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Writer ( Value Ġas ĠStorage TypeEnum < T >, Ġqualifier , Ġdefinition , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠCreate Ġa Ġqualifier Ġwriter Ġwhich Ġwrites Ġan Ġ[ index ] Ġand Ġ[ reference Type ] Ċ Ġ* ĠAlso Ġfirst Ġwrites Ġwith Ġa Ġ[ parent Qualifier Writer ] Ġif Ġnot Ġnull Ċ Ġ*/ Ċ internal Ġfun Ġcreate Qualifier Writer ( ĊĠĠĠ Ġparent Qualifier Writer : ĠQual ifier Writer ?, ĊĠĠĠ Ġindex : ĠUInt , ĊĠĠĠ Ġreference Type : ĠReference Type Ċ ): ĠQual ifier Writer Ġ= Ġ{ Ġwriter Ġ-> ĊĠĠĠ Ġparent Qualifier Writer ?. invoke ( writer ) ĊĠĠĠ Ġindex . write Var Int With Extra Info ( reference Type . value , Ġwriter ) Ċ } Ċ Ċ /** Ċ Ġ* ĠWrite Ġa Ġspecific Ġqualifier Ġwith Ġpassed Ġ[ qual ifier Length ] Ġand Ġ[ qual ifier Writer ] Ċ Ġ*/ Ċ internal Ġfun Ġwrite Qualifier ( ĊĠĠĠ Ġqualifier Length : ĠInt , ĊĠĠĠ Ġqualifier Writer : ĠQual ifier Writer ? Ċ ): ĠByteArray Ġ{ ĊĠĠĠ Ġreturn ĠByteArray ( qual ifier Length ). also Ġ{ Ġbytes Ġ-> ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġqualifier Writer ?. invoke Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbytes [ i ++] Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ