package ĠS ok . Buffer Ċ Ċ import ĠS ok . Buffer . Multi platform Buffer Ċ import Ġkotlinx . c interop .* Ċ import Ġplatform . posix . memcpy Ċ import Ġplatform . posix . size _ t Ċ import Ġkotlin . experimental . and Ċ import ĠS ok . Exceptions . Buffer Destroyed Exception Ċ Ċ /** Ċ Ġ* ĠNative Ġimplementation Ġof Ġthe Ġ` Multi platform Buffer ` Ġclass Ċ Ġ* Ċ Ġ* Ġ@ property Ġis BigEndian ĠEn di ann ess Ġof Ġthe Ġplatform , Ġused Ġto Ġknows Ġif Ġwe Ġshould Ġswap Ġthe Ġend i ann ess Ġof Ġthe Ġdata Ġor Ġnot Ċ Ġ* Ġ@ property Ġfirst Pointer ĠPointer Ġto Ġthe Ġfirst Ġelement Ġof Ġthe Ġbuffer Ċ Ġ* Ġ@ property Ġpinned Ġif Ġthe Ġbuffer Ġis Ġcreated Ġwith Ġa ĠByteArray , Ġwe Ġstore Ġthe Ġpin Ġof Ġthis Ġarray Ġto Ġun pin Ġit Ġwhen Ġdestroy () Ċ Ġ* Ġis Ġcalled Ġin Ġorder Ġto Ġavoid Ġmemory Ġle aks Ċ Ġ*/ Ċ class ĠNative Multi platform Buffer Ġ: ĠMulti platform Buffer { ĊĊĠĠĠ Ġprivate Ġval Ġis BigEndian Ġ= ĠByte Order . BIG _ ENDIAN Ġ=== ĠByte Order . native Order () ĊĊĠĠĠ Ġprivate Ġval Ġfirst Pointer Ġ: ĠC Pointer < Byte Var > ĊĊĠĠĠ Ġprivate Ġval Ġpinned Ġ: ĠPin ned < ByteArray >? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAllocate Ġa Ġnew ĠMulti platform Buffer ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsize Ġsize Ġof Ġthe Ġbuffer ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( size Ġ: ĠInt ) Ġ: Ġsuper ( size ){ ĊĠĠĠĠĠĠĠ Ġthis . first Pointer Ġ= Ġnative Heap . alloc Array < Byte Var >( size ) ĊĠĠĠĠĠĠĠ Ġthis . pinned Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġa Ġnew ĠMulti platform Buffer Ġwrapping Ġa ĠbyteArray Ġ, Ġthus Ġavoid ing Ġcopy ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġarray Ġarray Ġwrapped ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( array Ġ: ĠByteArray ) Ġ: Ġsuper ( array . size ){ ĊĠĠĠĠĠĠĠ Ġ// pin Ġthe Ġarray Ġin Ġmemory Ġ( to Ġhave Ġa Ġstable Ġpointer ) ĊĠĠĠĠĠĠĠ Ġthis . pinned Ġ= Ġarray . pin () ĊĠĠĠĠĠĠĠ Ġthis . first Pointer Ġ= Ġpinned . address Of ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġbyte Ġat Ġthe Ġcurrent Ġcursor Ġposition . ĠIf Ġthe Ġindex Ġparameter Ġis Ġprovided , Ġthe Ġcursor Ġwill Ġbe Ġignored Ġand Ġnot Ġmodified ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Ġindex Ġof Ġthe Ġbyte , Ġbuffer . cursor Ġis Ġused Ġif Ġthe Ġindex Ġis Ġnull ĊĠĠĠĠ Ġ* Ġ@ return Ġbyte ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget Byte Impl ( index : ĠInt ?): ĠByte Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . first Pointer [ index ?: Ġthis . cursor ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġan Ġarray Ġof Ġbytes Ġof Ġa Ġgiven Ġlength Ġstarting Ġat Ġthe Ġcurrent Ġbuffer Ġcursor Ġposition . ĠIf Ġthe Ġindex Ġparameter Ġis Ġprovided , Ġthe ĊĠĠĠĠ Ġ* Ġcursor Ġwill Ġbe Ġignored Ġand Ġnot Ġmodified ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlength Ġamount Ġof Ġdata Ġto Ġget ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Ġindex Ġof Ġthe Ġfirst Ġbyte , Ġbuffer . cursor Ġis Ġused Ġif Ġthe Ġindex Ġis Ġnull ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġdata Ġcopied Ġfrom Ġthe Ġbuffer ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget Bytes Impl ( length : ĠInt , Ġindex : ĠInt ?): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġ// when Ġpinned , Ġthe Ġaddress () Ġmethod Ġthrows Ġwhen Ġsize Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġif ( length Ġ== Ġ 0 ) Ġreturn ĠByteArray ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġreal Index Ġ= Ġindex Ġ?: Ġthis . cursor ĊĠĠĠĠĠĠĠ Ġval Ġarr Ġ= ĠByteArray ( length ) ĊĠĠĠĠĠĠĠ Ġarr . use Pin ned { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmemcpy ( it . address Of ( 0 ), this . first Pointer + real Index , length . to UL ong ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġarr ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCopy Ġbytes Ġinto Ġthe Ġarray Ġstarting Ġfrom Ġthe Ġcurrent Ġcursor Ġposition Ġor Ġgiven Ġindex . ĠYou Ġcan Ġstart Ġthe Ġcopy Ġwith Ġan Ġoffset Ġin Ġthe ĊĠĠĠĠ Ġ* Ġdestination Ġarray Ġand Ġspecify Ġthe Ġnumber Ġof Ġbyte Ġyou Ġwant Ġto Ġbe Ġcopied . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġarray Ġdestination Ġarray ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Ġindex Ġof Ġthe Ġfirst Ġbyte , Ġbuffer . cursor Ġis Ġused Ġif Ġthe Ġindex Ġis Ġnull ĊĠĠĠĠ Ġ* Ġ@ param Ġdestination Offset ĠThe Ġoffset Ġwithin Ġthe Ġarray Ġof Ġthe Ġfirst Ġbyte Ġto Ġbe Ġwritten ĊĠĠĠĠ Ġ* Ġ@ param Ġlength Ġamount Ġof Ġdata Ġto Ġcopy ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget Bytes Impl ( array Ġ: ĠByteArray , Ġindex : ĠInt ?, Ġdestination Offset Ġ: ĠInt , Ġlength : ĠInt ){ ĊĠĠĠĠĠĠĠ Ġ// when Ġpinned , Ġthe Ġaddress () Ġmethod Ġthrows Ġwhen Ġsize Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġif ( length Ġ== Ġ 0 Ġ|| Ġarray . size Ġ== Ġ 0 ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġreal Index Ġ= Ġindex Ġ?: Ġthis . cursor ĊĠĠĠĠĠĠĠ Ġarray . use Pin ned { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmemcpy ( it . address Of ( 0 )+ destination Offset , this . first Pointer + real Index , length . to UL ong ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġunsigned Ġbyte Ġat Ġthe Ġcurrent Ġcursor Ġposition . ĠIf Ġthe Ġindex Ġparameter Ġis Ġprovided , Ġthe Ġcursor Ġwill Ġbe Ġignored Ġand ĊĠĠĠĠ Ġ* Ġnot Ġmodified ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Ġindex Ġof Ġthe Ġbyte , Ġbuffer . cursor Ġis Ġused Ġif Ġthe Ġindex Ġis Ġnull ĊĠĠĠĠ Ġ* Ġ@ return Ġbyte ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget U Byte Impl ( index : ĠInt ?): ĠU Byte Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . getByte Impl ( index ). to U Byte () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġshort Ġat Ġthe Ġcurrent Ġcursor Ġposition . ĠIf Ġthe Ġindex Ġparameter Ġis Ġprovided , Ġthe Ġcursor Ġwill Ġbe Ġignored Ġand Ġnot Ġmodified ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Ġindex Ġof Ġthe Ġshort , Ġbuffer . cursor Ġis Ġused Ġif Ġthe Ġindex Ġis Ġnull ĊĠĠĠĠ Ġ* Ġ@ return Ġshort ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget Short Impl ( index : ĠInt ?): ĠShort Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġv Ġ= Ġ( this . first Pointer Ġ+ Ġ( index Ġ?: Ġthis . cursor )) !!. reinterpret < Short Var >() [ 0 ] ĊĠĠĠĠĠĠĠ Ġif (! this . is BigEndian ) Ġv Ġ= Ġthis . swap ( v ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġv ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġunsigned Ġshort Ġat Ġthe Ġcurrent Ġcursor Ġposition . ĠIf Ġthe Ġindex Ġparameter Ġis Ġprovided , Ġthe Ġcursor Ġwill Ġbe Ġignored Ġand ĊĠĠĠĠ Ġ* Ġnot Ġmodified ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Ġindex Ġof Ġthe Ġshort , Ġbuffer . cursor Ġis Ġused Ġif Ġthe Ġindex Ġis Ġnull ĊĠĠĠĠ Ġ* Ġ@ return Ġshort ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget U Short Impl ( index : ĠInt ?): ĠU Short Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . get Short Impl ( index ). to U Short () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġinteger Ġat Ġthe Ġcurrent Ġcursor Ġposition . ĠIf Ġthe Ġindex Ġparameter Ġis Ġprovided , Ġthe Ġcursor Ġwill Ġbe Ġignored Ġand Ġnot Ġmodified ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Ġindex Ġof Ġthe Ġint , Ġbuffer . cursor Ġis Ġused Ġif Ġthe Ġindex Ġis Ġnull ĊĠĠĠĠ Ġ* Ġ@ return Ġint ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget Int Impl ( index : ĠInt ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġv Ġ= Ġ( this . first Pointer Ġ+ Ġ( index Ġ?: Ġthis . cursor )) !!. reinterpret < Int Var >() [ 0 ] ĊĠĠĠĠĠĠĠ Ġif (! this . is BigEndian ) Ġv Ġ= Ġthis . swap ( v ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġv ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġunsigned Ġinteger Ġat Ġthe Ġcurrent Ġcursor Ġposition . ĠIf Ġthe Ġindex Ġparameter Ġis Ġprovided , Ġthe Ġcursor Ġwill Ġbe Ġignored Ġand ĊĠĠĠĠ Ġ* Ġnot Ġmodified ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Ġindex Ġof Ġthe Ġint , Ġbuffer . cursor Ġis Ġused Ġif Ġthe Ġindex Ġis Ġnull ĊĠĠĠĠ Ġ* Ġ@ return Ġint ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget UInt Impl ( index : ĠInt ?): ĠUInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . getInt Impl ( index ). to UInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġlong Ġat Ġthe Ġcurrent Ġcursor Ġposition . ĠIf Ġthe Ġindex Ġparameter Ġis Ġprovided , Ġthe Ġcursor Ġwill Ġbe Ġignored Ġand Ġnot Ġmodified ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Ġindex Ġof Ġthe Ġlong , Ġbuffer . cursor Ġis Ġused Ġif Ġthe Ġindex Ġis Ġnull ĊĠĠĠĠ Ġ* Ġ@ return Ġint ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget Long Impl ( index : ĠInt ?): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġv Ġ= Ġ( this . first Pointer Ġ+ Ġ( index Ġ?: Ġthis . cursor )) !!. reinterpret < Long Var >() [ 0 ] ĊĠĠĠĠĠĠĠ Ġif (! this . is BigEndian ) Ġv Ġ= Ġthis . swap ( v ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġv ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġunsigned Ġlong Ġat Ġthe Ġcurrent Ġcursor Ġposition . ĠIf Ġthe Ġindex Ġparameter Ġis Ġprovided , Ġthe Ġcursor Ġwill Ġbe Ġignored Ġand Ġnot Ġmodified ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Ġindex Ġof Ġthe Ġlong , Ġbuffer . cursor Ġis Ġused Ġif Ġthe Ġindex Ġis Ġnull ĊĠĠĠĠ Ġ* Ġ@ return Ġlong ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget UL ong Impl ( index : ĠInt ?): ĠU Long Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . getLong Impl ( index ). to UL ong () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPut Ġthe Ġgiven Ġbyte Ġarray Ġinside Ġthe Ġbuffer Ġstarting Ġat Ġthe Ġbuffer Ġcursor Ġposition . ĠIf Ġthe Ġindex Ġparameter Ġis Ġprovided , Ġthe ĊĠĠĠĠ Ġ* Ġcursor Ġwill Ġbe Ġignored Ġand Ġnot Ġmodified ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġarray Ġdata Ġto Ġput Ġin Ġthe Ġbuffer ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Ġindex Ġof Ġthe Ġfirst Ġbyte , Ġbuffer . cursor Ġis Ġused Ġif Ġthe Ġindex Ġis Ġnull ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġput Bytes Impl ( array : ĠByteArray , Ġindex : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// when Ġpinned , Ġthe Ġaddress () Ġmethod Ġthrows Ġwhen Ġsize Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġif ( array . size Ġ== Ġ 0 ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġreal Index Ġ= Ġindex Ġ?: Ġthis . cursor ĊĠĠĠĠĠĠĠ Ġarray . use Pin ned Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġit . address Of ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmemcpy ( this . first Pointer Ġ+ Ġreal Index , Ġaddress , Ġit . get (). size . to UL ong ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPut Ġthe Ġgiven Ġbyte Ġinside Ġthe Ġbuffer Ġat Ġthe Ġbuffer Ġcursor Ġposition . ĠIf Ġthe Ġindex Ġparameter Ġis Ġprovided , Ġthe ĊĠĠĠĠ Ġ* Ġcursor Ġwill Ġbe Ġignored Ġand Ġnot Ġmodified ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġvalue Ġbyte Ġto Ġput Ġin Ġthe Ġbuffer ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Ġindex Ġof Ġthe Ġbyte , Ġbuffer . cursor Ġis Ġused Ġif Ġthe Ġindex Ġis Ġnull ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġput Byte Impl ( value : ĠByte , Ġindex : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . first Pointer [ index Ġ?: Ġthis . cursor ] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPut Ġthe Ġgiven Ġshort Ġinside Ġthe Ġbuffer Ġstarting Ġat Ġthe Ġbuffer Ġcursor Ġposition . ĠIf Ġthe Ġindex Ġparameter Ġis Ġprovided , Ġthe ĊĠĠĠĠ Ġ* Ġcursor Ġwill Ġbe Ġignored Ġand Ġnot Ġmodified ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġvalue Ġshort Ġto Ġput Ġin Ġthe Ġbuffer ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Ġindex Ġof Ġthe Ġshort , Ġbuffer . cursor Ġis Ġused Ġif Ġthe Ġindex Ġis Ġnull ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġput Short Impl ( value : ĠShort , Ġindex : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// swap Ġif Ġthe Ġend i ann ess Ġis Ġwrong ĊĠĠĠĠĠĠĠ Ġvar Ġv Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġif Ġ(! is BigEndian ) Ġv Ġ= Ġswap ( value ) ĊĊĠĠĠĠĠĠĠ Ġ// interpret Ġthe Ġindex Ġas Ġa Ġshort Ġand Ġwrite ĊĠĠĠĠĠĠĠ Ġ( this . first Pointer Ġ+ Ġ( index Ġ?: Ġthis . cursor )) !!. reinterpret < Short Var >() [ 0 ] Ġ= Ġv ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPut Ġthe Ġgiven Ġinteger Ġinside Ġthe Ġbuffer Ġstarting Ġat Ġthe Ġbuffer Ġcursor Ġposition . ĠIf Ġthe Ġindex Ġparameter Ġis Ġprovided , Ġthe ĊĠĠĠĠ Ġ* Ġcursor Ġwill Ġbe Ġignored Ġand Ġnot Ġmodified ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġvalue Ġint Ġto Ġput Ġin Ġthe Ġbuffer ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Ġindex Ġof Ġthe Ġint , Ġbuffer . cursor Ġis Ġused Ġif Ġthe Ġindex Ġis Ġnull ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġput Int Impl ( value : ĠInt , Ġindex : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// swap Ġif Ġthe Ġend i ann ess Ġis Ġwrong ĊĠĠĠĠĠĠĠ Ġvar Ġv Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġif Ġ(! is BigEndian ) Ġv Ġ= Ġswap ( value ) ĊĊĠĠĠĠĠĠĠ Ġ// interpret Ġthe Ġindex Ġas Ġa Ġshort Ġand Ġwrite ĊĠĠĠĠĠĠĠ Ġ( this . first Pointer Ġ+ Ġ( index Ġ?: Ġthis . cursor )) !!. reinterpret < Int Var >() [ 0 ] Ġ= Ġv ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPut Ġthe Ġgiven Ġlong Ġinside Ġthe Ġbuffer Ġstarting Ġat Ġthe Ġbuffer Ġcursor Ġposition . ĠIf Ġthe Ġindex Ġparameter Ġis Ġprovided , Ġthe ĊĠĠĠĠ Ġ* Ġcursor Ġwill Ġbe Ġignored Ġand Ġnot Ġmodified ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġvalue Ġlong Ġto Ġput Ġin Ġthe Ġbuffer ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Ġindex Ġof Ġthe Ġlong , Ġbuffer . cursor Ġis Ġused Ġif Ġthe Ġindex Ġis Ġnull ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġput Long Impl ( value : ĠLong , Ġindex : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// swap Ġif Ġthe Ġend i ann ess Ġis Ġwrong ĊĠĠĠĠĠĠĠ Ġvar Ġv Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġif Ġ(! is BigEndian ) Ġv Ġ= Ġswap ( value ) ĊĊĠĠĠĠĠĠĠ Ġ// interpret Ġthe Ġindex Ġas Ġa Ġshort Ġand Ġwrite ĊĠĠĠĠĠĠĠ Ġ( this . first Pointer Ġ+ Ġ( index Ġ?: Ġthis . cursor )) !!. reinterpret < Long Var >() [ 0 ] Ġ= Ġv ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġall Ġthe Ġdata Ġbetween Ġthe Ġstart Ġof Ġthe Ġbuffer Ġand Ġits Ġlimit , Ġthe Ġdata Ġis Ġcopied Ġand Ġis Ġnot Ġlinked Ġto Ġthe Ġcontent ĊĠĠĠĠ Ġ* Ġof Ġthe Ġbuffer . ĠWARNING Ġthis Ġbehaviour Ġis Ġdifferent Ġfrom Ġthe ĠByteBuffer Ġarray () Ġmethod , Ġplease Ġread Ġthe Ġdocumentation ĊĠĠĠĠ Ġ* Ġcarefully ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġdata Ġcopied Ġfrom Ġthe Ġstart Ġfo Ġthe Ġbuffer Ġto Ġthe Ġlimit ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġto Array (): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( this . destroy ed ) Ġthrow ĠBuffer Destroyed Exception () ĊĠĠĠĠĠĠĠ Ġval Ġtmp Arr Ġ= ĠByteArray ( this . limit ) ĊĠĠĠĠĠĠĠ Ġtmp Arr . use Pin ned { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmemcpy ( it . address Of ( 0 ), this . first Pointer , this . limit . to UL ong ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtmp Arr ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDeep Ġcopy Ġthe Ġbuffer . ĠAll Ġthe Ġdata Ġfrom Ġthe Ġstart Ġto Ġthe Ġcapacity Ġwill Ġbe Ġcopied , Ġthe Ġcursor Ġand Ġlimit Ġwill Ġbe Ġreset ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġcloned Ġbuffer ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġclone (): ĠMulti platform Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( this . destroy ed ) Ġthrow ĠBuffer Destroyed Exception () ĊĠĠĠĠĠĠĠ Ġval Ġtmp Ġ= ĠNative Multi platform Buffer ( this . capacity ) ĊĠĠĠĠĠĠĠ Ġmemcpy ( tmp . first Pointer , this . first Pointer , this . capacity . to UL ong ()) ĊĠĠĠĠĠĠĠ Ġtmp . limit Ġ= Ġthis . limit ĊĠĠĠĠĠĠĠ Ġreturn Ġtmp ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUsed Ġonly Ġby Ġthe ĠJVM Ġto Ġsynchronize Ġthe ĠMulti platform Buffer Ġstate Ġwith Ġthe ĠByteBuffer Ġstate ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Ġcursor ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġset Cursor Impl ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// does Ġnothing Ġon ĠKotlin / Native ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUsed Ġonly Ġby Ġthe ĠJVM Ġto Ġsynchronize Ġthe ĠMulti platform Buffer Ġstate Ġwith Ġthe ĠByteBuffer Ġstate ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Ġlimit ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġset Limit Impl ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// does Ġnothing Ġon ĠKotlin / Native ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDestroy Ġthe ĠByteBuffer , Ġyou Ġcannot Ġcall Ġany Ġmethod Ġon Ġthe Ġbuffer Ġafter Ġcalling Ġdestroy . ĠThis Ġmethod ĠMUST Ġbe Ġcalled Ġon Ġnative Ġplatforms ĊĠĠĠĠ Ġ* Ġin Ġorder Ġto Ġfree / un pin Ġmemory Ġbut Ġyou Ġcan Ġskip Ġit Ġon Ġany Ġother Ġplatform ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġdestroy (){ ĊĠĠĠĠĠĠĠ Ġif ( this . pinned Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnative Heap . free ( this . first Pointer ) ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . pinned . un pin () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . destroy ed Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUsed Ġinternally Ġto Ġperform ĠI / O Ġon Ġplatform - specific Ġsockets ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġplatform - specific ĠBuffer ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġnative Pointer () Ġ: ĠC Pointer < Byte Var >{ ĊĠĠĠĠĠĠĠ Ġif ( this . destroy ed ) Ġthrow ĠBuffer Destroyed Exception () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . first Pointer ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEn dian ess Ġrelated Ġprivate Ġfunctions ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" NOTH ING _ TO _ INLINE ") ĊĠĠĠ Ġprivate Ġinline Ġfun Ġswap ( s : ĠShort ): ĠShort Ġ= Ġ((( s . toInt () Ġand Ġ 0 xff ) Ġshl Ġ 8 ) Ġor Ġ(( s . toInt () Ġand Ġ 0 xffff ) Ġ ush r Ġ 8 )). to Short () ĊĠĠĠ Ġ@ Suppress (" NOTH ING _ TO _ INLINE ") ĊĠĠĠ Ġprivate Ġinline Ġfun Ġswap ( s : ĠInt ): ĠInt Ġ= Ġ( swap (( s Ġand Ġ 0 xffff ). to Short ()). toInt () Ġshl Ġ 1 6 ) Ġor Ġ( swap (( s Ġ ush r Ġ 1 6 ). to Short ()). toInt () Ġand Ġ 0 xffff ) ĊĠĠĠ Ġ@ Suppress (" NOTH ING _ TO _ INLINE ") ĊĠĠĠ Ġprivate Ġinline Ġfun Ġswap ( s : ĠLong ): ĠLong Ġ= Ġ( swap (( s Ġand Ġ 0 xffffffff ). toInt ()). to Long () Ġshl Ġ 3 2 ) Ġor Ġ( swap (( s Ġ ush r Ġ 3 2 ). toInt ()). to Long () Ġand Ġ 0 xffffffff ) ĊĠĠĠ Ġ@ Suppress (" NOTH ING _ TO _ INLINE ") ĊĠĠĠ Ġprivate Ġinline Ġfun Ġswap ( s : ĠFloat ): ĠFloat Ġ= ĠFloat . from Bits ( swap ( s . to Raw Bits ())) ĊĠĠĠ Ġ@ Suppress (" NOTH ING _ TO _ INLINE ") ĊĠĠĠ Ġprivate Ġinline Ġfun Ġswap ( s : ĠDouble ): ĠDouble Ġ= ĠDouble . from Bits ( swap ( s . to Raw Bits ())) Ċ Ċ } Ċ Ċ /** Ċ Ġ* ĠAllocate Ġa Ġnew ĠMulti platform Buffer . ĠAllocate Ġa Ġnew ĠMulti platform Buffer . ĠThe Ġbuffer Ġis Ġnot Ġzero ed , Ġbe Ġcareful . Ċ Ġ* Ċ Ġ* Ġ@ param Ġsize Ġsize Ġof Ġthe Ġbuffer Ċ Ġ* Ġ@ return Ġallocated Ġbuffer Ċ Ġ*/ Ċ actual Ġfun Ġalloc Multi platform Buffer ( size Ġ: Int ) Ġ: ĠMulti platform Buffer Ġ{ ĊĠĠĠ Ġreturn ĠNative Multi platform Buffer ( size ) Ċ } Ċ Ċ /** Ċ Ġ* ĠWrap Ġthe Ġarray Ġwith Ġa ĠMulti platform Buffer . ĠThe Ġdata Ġwill Ġnot Ġbe Ġcopied Ġand Ġthe Ġarray Ġwill Ġbe Ġlinked Ġto Ġthe Ċ Ġ* ĠMulti platform Buffer Ġclass Ċ Ġ* Ċ Ġ* Ġ@ param Ġarray Ġarray Ġto Ġwrap Ċ Ġ* Ġ@ return Ġbuffer Ċ Ġ*/ Ċ actual Ġfun Ġwrap Multi platform Buffer ( array Ġ: ĠByteArray ) Ġ: ĠMulti platform Buffer Ġ{ ĊĠĠĠ Ġreturn ĠNative Multi platform Buffer ( array ) Ċ } Ċ