package Ġorg . kode in . memory . io Ċ Ċ import Ġorg . kode in . memory . Closeable Ċ Ċ public Ġinterface ĠRead Allocation Ġ: ĠRead Memory , ĠClose able Ġ{ ĊĠĠĠ Ġpublic Ġval Ġmemory : ĠRead Memory ĊĠĠĠ Ġpublic Ġval Ġis Closed : ĠBoolean ĊĠĠĠ Ġpublic Ġcompanion Ġobject Ċ } Ċ Ċ public Ġinterface ĠAl location Ġ: ĠMemory , ĠRead Allocation Ġ{ ĊĠĠĠ Ġoverride Ġval Ġmemory : ĠMemory ĊĠĠĠ Ġpublic Ġcompanion Ġobject Ċ } Ċ Ċ public Ġopen Ġclass ĠRead Memory Allocation < M : ĠRead Memory >( protected Ġval Ġbacking Memory : ĠM , Ġinternal Ġval Ġclose Fun : Ġ() Ġ-> ĠUnit ) Ġ: ĠRead Allocation Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ is Closed Ġ= Ġfalse ĊĠĠĠ Ġoverride Ġval Ġis Closed : ĠBoolean Ġget () Ġ= Ġ_ is Closed ĊĊĠĠĠ Ġprotected Ġinline Ġfun Ġ< T > Ġdelegate ( block : ĠM . () Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck (! is Closed ) Ġ{ Ġ" Allocation Ġis Ġclosed " Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbacking Memory . block () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġval Ġmemory : ĠM Ġget () Ġ= Ġdelegate Ġ{ Ġbacking Memory Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġval Ġsize : ĠInt Ġget () Ġ= Ġdelegate Ġ{ Ġsize Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġslice ( index : ĠInt , Ġlength : ĠInt ): ĠRead Memory Ġ= Ġdelegate Ġ{ Ġslice ( index , Ġlength ) Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġget Byte ( index : ĠInt ): ĠByte Ġ= Ġdelegate Ġ{ Ġget Byte ( index ) Ġ} ĊĠĠĠ Ġfinal Ġoverride Ġfun Ġget Short ( index : ĠInt ): ĠShort Ġ= Ġdelegate Ġ{ Ġget Short ( index ) Ġ} ĊĠĠĠ Ġfinal Ġoverride Ġfun Ġget Int ( index : ĠInt ): ĠInt Ġ= Ġdelegate Ġ{ Ġget Int ( index ) Ġ} ĊĠĠĠ Ġfinal Ġoverride Ġfun Ġget Long ( index : ĠInt ): ĠLong Ġ= Ġdelegate Ġ{ Ġget Long ( index ) Ġ} ĊĠĠĠ Ġfinal Ġoverride Ġfun Ġget Bytes ( index : ĠInt , Ġdst : ĠByteArray , Ġdst Offset : ĠInt , Ġlength : ĠInt ): ĠUnit Ġ= Ġdelegate Ġ{ Ġget Bytes ( index , Ġdst , Ġdst Offset , Ġlength ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinternal Memory (): ĠRead Memory Ġ= Ġdelegate Ġ{ Ġinternal Memory () Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(!_ is Closed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is Closed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Fun () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= Ġdelegate Ġ{ Ġequals ( other ) Ġ} ĊĠĠĠ Ġfinal Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= Ġdelegate Ġ{ ĠhashCode () Ġ} Ċ } Ċ Ċ public Ġfun Ġ< M Ġ: ĠRead Memory > ĠM . as Managed Allocation (): ĠRead Memory Allocation < M > Ġ= ĠRead Memory Allocation ( this ) Ġ{} Ċ Ċ public Ġclass ĠMemory Allocation < M Ġ: ĠMemory >( memory : ĠM , Ġclose Fun : Ġ() Ġ-> ĠUnit ): ĠRead Memory Allocation < M >( memory , Ġclose Fun ), ĠAl location Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġslice ( index : ĠInt , Ġlength : ĠInt ): ĠMemory Ġ= Ġdelegate Ġ{ Ġslice ( index , Ġlength ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput Byte ( index : ĠInt , Ġvalue : ĠByte ): ĠUnit Ġ= Ġdelegate Ġ{ Ġput Byte ( index , Ġvalue ) Ġ} ĊĠĠĠ Ġoverride Ġfun Ġput Short ( index : ĠInt , Ġvalue : ĠShort ): ĠUnit Ġ= Ġdelegate Ġ{ Ġput Short ( index , Ġvalue ) Ġ} ĊĠĠĠ Ġoverride Ġfun Ġput Int ( index : ĠInt , Ġvalue : ĠInt ): ĠUnit Ġ= Ġdelegate Ġ{ Ġput Int ( index , Ġvalue ) Ġ} ĊĠĠĠ Ġoverride Ġfun Ġput Long ( index : ĠInt , Ġvalue : ĠLong ): ĠUnit Ġ= Ġdelegate Ġ{ Ġput Long ( index , Ġvalue ) Ġ} ĊĠĠĠ Ġoverride Ġfun Ġput Bytes ( index : ĠInt , Ġsrc : ĠByteArray , Ġsrc Offset : ĠInt , Ġlength : ĠInt ): ĠUnit Ġ= Ġdelegate Ġ{ Ġput Bytes ( index , Ġsrc , Ġsrc Offset , Ġlength ) Ġ} ĊĠĠĠ Ġoverride Ġfun Ġput Bytes ( index : ĠInt , Ġsrc : ĠRead Memory ): ĠUnit Ġ= Ġdelegate Ġ{ Ġput Bytes ( index , Ġsrc ) Ġ} ĊĠĠĠ Ġoverride Ġfun Ġput Bytes ( index : ĠInt , Ġsrc : ĠRead able , Ġlength : ĠInt ): ĠUnit Ġ= Ġdelegate Ġ{ Ġput Bytes ( index , Ġsrc , Ġlength ) Ġ} ĊĠĠĠ Ġoverride Ġfun Ġfill ( byte : ĠByte ): ĠUnit Ġ= Ġdelegate Ġ{ Ġfill ( byte ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinternal Memory (): ĠMemory Ġ= Ġdelegate Ġ{ Ġinternal Memory () Ġ} Ċ } Ċ Ċ public Ġfun ĠMemory . as Managed Allocation (): ĠAl location Ġ= ĠMemory Allocation ( this ) Ġ{} Ċ Ċ public Ġexpect Ġclass ĠPlatform Native Memory Ġ: ĠAbstract Memory < Platform Native Memory > Ċ public Ġtype alias ĠPlatform Native Allocation Ġ= ĠMemory Allocation < Platform Native Memory > Ċ Ċ public Ġexpect Ġfun ĠAl location . Companion . native ( size : ĠInt ): ĠPlatform Native Allocation Ċ Ċ @ Published Api Ċ internal Ġfun ĠPlatform Native Allocation . reduced ( reduced Size : ĠInt ): ĠPlatform Native Allocation Ġ= ĊĠĠĠ ĠPlatform Native Allocation ( memory . slice ( 0 , Ġreduced Size ), Ġclose Fun ) Ċ Ċ public Ġinline Ġfun ĠAl location . Companion . native ( size : ĠInt , Ġwrite : ĠWrite able . () Ġ-> ĠUnit ): ĠPlatform Native Allocation Ġ{ ĊĠĠĠ Ġval Ġalloc Ġ= ĠAl location . native ( size ) ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġalloc . write Ġ{ Ġwrite () Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( size Ġ== Ġlength ) Ġalloc Ġelse Ġalloc . reduced ( length ) ĊĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġalloc . close () ĊĠĠĠĠĠĠĠ Ġthrow Ġt ĊĠĠĠ Ġ} Ċ } Ċ Ċ public Ġfun ĠAl location . Companion . native Copy ( src : ĠRead Memory ): ĠPlatform Native Allocation Ġ= ĊĠĠĠ Ġnative ( src . size ) Ġ{ Ġwrite Bytes ( src ) Ġ} Ċ Ċ public Ġfun ĠAl location . Companion . native Copy ( src : ĠRead able , Ġlength : ĠInt ): ĠPlatform Native Allocation Ġ= ĊĠĠĠ Ġnative ( length ) Ġ{ Ġwrite Bytes ( src , Ġlength ) Ġ} Ċ Ċ public Ġfun ĠAl location . Companion . native Copy ( src : ĠCursor Readable ): ĠPlatform Native Allocation Ġ= ĊĠĠĠ Ġnative ( src . remaining ) Ġ{ Ġwrite Bytes ( src ) Ġ} Ċ