package Ġmqtt . buffer Ċ Ċ import Ġkotlin . native .* Ċ Ċ @ Experimental Unsigned Types Ċ class ĠNative Buffer ( val Ġdata : ĠByteArray ) Ġ: ĠPlatform Buffer Ġ{ ĊĠĠĠ Ġoverride Ġval Ġtype Ġ= ĠBuffer Type . InMemory ĊĠĠĠ Ġoverride Ġval Ġcapacity : ĠUInt Ġ= Ġdata . size . to UInt () ĊĠĠĠ Ġprivate Ġvar Ġlimit Ġ= Ġdata . size ĊĠĠĠ Ġprivate Ġvar Ġposition Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġput ( buffer : ĠPlatform Buffer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrite ( buffer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreset For Read () Ġ{ ĊĠĠĠĠĠĠĠ Ġlimit Ġ= Ġposition ĊĠĠĠĠĠĠĠ Ġposition Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreset For Write () Ġ{ ĊĠĠĠĠĠĠĠ Ġposition Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġlimit Ġ= Ġdata . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread Byte () Ġ= Ġdata [ position ++] ĊĊĠĠĠ Ġoverride Ġfun Ġread ByteArray ( size : ĠUInt ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdata . copyOf Range ( position , Ġposition Ġ+ Ġsize . toInt ()) ĊĠĠĠĠĠĠĠ Ġposition Ġ+= Ġsize . toInt () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread Unsigned Byte () Ġ= Ġdata [ position ++ ]. to U Byte () ĊĊĠĠĠ Ġoverride Ġfun Ġread Unsigned Short (): ĠU Short Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġ(( 0 xff Ġand Ġdata [ position Ġ+ Ġ 0 ]. toInt () Ġshl Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ( 0 xff Ġand Ġdata [ position Ġ+ Ġ 1 ]. toInt () Ġshl Ġ 0 )). to U Short () ĊĠĠĠĠĠĠĠ Ġposition Ġ+= ĠU Short . SIZE _ BYTES ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread Unsigned Int (): ĠUInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġ( 0 xff Ġand Ġdata [ position Ġ+ Ġ 0 ]. toInt () Ġshl Ġ 2 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ( 0 xff Ġand Ġdata [ position Ġ+ Ġ 1 ]. toInt () Ġshl Ġ 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ( 0 xff Ġand Ġdata [ position Ġ+ Ġ 2 ]. toInt () Ġshl Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ( 0 xff Ġand Ġdata [ position Ġ+ Ġ 3 ]. toInt () Ġshl Ġ 0 )). to UInt () ĊĠĠĠĠĠĠĠ Ġposition Ġ+= ĠUInt . SIZE _ BYTES ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread Long (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġ( data [ position Ġ+ Ġ 0 ]. to Long () Ġshl Ġ 5 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ( data [ position Ġ+ Ġ 1 ]. to Long () Ġand Ġ 0 xff Ġshl Ġ 4 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ( data [ position Ġ+ Ġ 2 ]. to Long () Ġand Ġ 0 xff Ġshl Ġ 4 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ( data [ position Ġ+ Ġ 3 ]. to Long () Ġand Ġ 0 xff Ġshl Ġ 3 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ( data [ position Ġ+ Ġ 4 ]. to Long () Ġand Ġ 0 xff Ġshl Ġ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ( data [ position Ġ+ Ġ 5 ]. to Long () Ġand Ġ 0 xff Ġshl Ġ 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ( data [ position Ġ+ Ġ 6 ]. to Long () Ġand Ġ 0 xff Ġshl Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ( data [ position Ġ+ Ġ 7 ]. to Long () Ġand Ġ 0 xff )) ĊĠĠĠĠĠĠĠ Ġposition Ġ+= ĠLong . SIZE _ BYTES ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread Utf 8 ( bytes : ĠUInt ): ĠCharSequence Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġdata . decode ToString ( position , Ġposition Ġ+ Ġbytes . toInt ()) ĊĠĠĠĠĠĠĠ Ġposition Ġ+= Ġbytes . toInt () ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( byte : ĠByte ): ĠWrite Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġdata [ position ++] Ġ= Ġbyte ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( bytes : ĠByteArray ): ĠWrite Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġbytes . copy Into ( data , Ġposition ) ĊĠĠĠĠĠĠĠ Ġposition Ġ+= Ġbytes . size ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( u Byte : ĠU Byte ) Ġ= Ġwrite ( u Byte . to Byte ()) ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( u Short : ĠU Short ): ĠWrite Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġu Short . to Short (). toInt () ĊĠĠĠĠĠĠĠ Ġdata [ position ++] Ġ= Ġ( value Ġshr Ġ 8 Ġand Ġ 0 xff ). to Byte () ĊĠĠĠĠĠĠĠ Ġdata [ position ++] Ġ= Ġ( value Ġshr Ġ 0 Ġand Ġ 0 xff ). to Byte () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( u Int : ĠUInt ): ĠWrite Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġu Int . toInt () ĊĠĠĠĠĠĠĠ Ġdata [ position ++] Ġ= Ġ( value Ġshr Ġ 2 4 Ġand Ġ 0 xff ). to Byte () ĊĠĠĠĠĠĠĠ Ġdata [ position ++] Ġ= Ġ( value Ġshr Ġ 1 6 Ġand Ġ 0 xff ). to Byte () ĊĠĠĠĠĠĠĠ Ġdata [ position ++] Ġ= Ġ( value Ġshr Ġ 8 Ġand Ġ 0 xff ). to Byte () ĊĠĠĠĠĠĠĠ Ġdata [ position ++] Ġ= Ġ( value Ġshr Ġ 0 Ġand Ġ 0 xff ). to Byte () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( long : ĠLong ): ĠWrite Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġlong ĊĠĠĠĠĠĠĠ Ġdata [ position ++] Ġ= Ġ( value Ġshr Ġ 5 6 Ġand Ġ 0 xff ). to Byte () ĊĠĠĠĠĠĠĠ Ġdata [ position ++] Ġ= Ġ( value Ġshr Ġ 4 8 Ġand Ġ 0 xff ). to Byte () ĊĠĠĠĠĠĠĠ Ġdata [ position ++] Ġ= Ġ( value Ġshr Ġ 4 0 Ġand Ġ 0 xff ). to Byte () ĊĠĠĠĠĠĠĠ Ġdata [ position ++] Ġ= Ġ( value Ġshr Ġ 3 2 Ġand Ġ 0 xff ). to Byte () ĊĠĠĠĠĠĠĠ Ġdata [ position ++] Ġ= Ġ( value Ġshr Ġ 2 4 Ġand Ġ 0 xff ). to Byte () ĊĠĠĠĠĠĠĠ Ġdata [ position ++] Ġ= Ġ( value Ġshr Ġ 1 6 Ġand Ġ 0 xff ). to Byte () ĊĠĠĠĠĠĠĠ Ġdata [ position ++] Ġ= Ġ( value Ġshr Ġ 8 Ġand Ġ 0 xff ). to Byte () ĊĠĠĠĠĠĠĠ Ġdata [ position ++] Ġ= Ġ( value Ġshr Ġ 0 Ġand Ġ 0 xff ). to Byte () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( buffer : ĠPlatform Buffer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrite (( buffer Ġas ĠNative Buffer ). data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite Utf 8 ( text : ĠCharSequence ): ĠWrite Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġwrite ( text . toString (). encode To ByteArray ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġclose () Ġ= ĠUnit ĊĊĠĠĠ Ġoverride Ġfun Ġlimit () Ġ= Ġlimit . to UInt () ĊĠĠĠ Ġoverride Ġfun Ġposition () Ġ= Ġposition . to UInt () ĊĠĠĠ Ġoverride Ġfun Ġposition ( new Position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġposition Ġ= Ġnew Position ĊĠĠĠ Ġ} Ċ } Ċ Ċ actual Ġfun Ġallocate New Buffer ( ĊĠĠĠ Ġsize : ĠUInt , ĊĠĠĠ Ġlimits : ĠBuffer Memory Limit Ċ ): ĠPlatform Buffer Ġ= ĠNative Buffer ( ByteArray ( size . toInt ())) Ċ Ċ actual Ġfun ĠString . to Buffer (): ĠPlatform Buffer Ġ= ĠNative Buffer ( this . encode To ByteArray ()) Ċ actual Ġfun ĠString . utf 8 Length (): ĠUInt Ġ= Ġencode To ByteArray (). size . to UInt () Ċ