package Ġorg . kin . sdk . base . models . sol ana Ċ Ċ import Ġjava . io . ByteArray InputStream Ċ import Ġjava . io . ByteArray OutputStream Ċ Ċ @ Opt In ( Experimental Unsigned Types :: class ) Ċ object ĠShort Vec Ġ{ ĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT > Ġencode Short Vec Of ( ĊĠĠĠĠĠĠĠ Ġoutput : ĠByteArrayOutputStream , ĊĠĠĠĠĠĠĠ Ġelements : ĠList < T >, ĊĠĠĠĠĠĠĠ Ġbyte Transform : Ġ( T ) Ġ-> ĠByteArray , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġencode Len ( output , Ġelements . size ) ĊĠĠĠĠĠĠĠ Ġelements . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . write ( byte Transform ( it )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT > Ġdecode Short Vec Of ( ĊĠĠĠĠĠĠĠ Ġinput : ĠByteArrayInputStream , ĊĠĠĠĠĠĠĠ Ġsize Of Element : ĠInt , ĊĠĠĠĠĠĠĠ Ġnew Instance : Ġ( ByteArray ) Ġ-> ĠT ? Ġ= Ġ{ Ġnull Ġ}, ĊĠĠĠ Ġ): ĠList < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvec Length Ġ= Ġdecode Len ( input ) ĊĠĠĠĠĠĠĠ Ġval Ġelements Ġ= Ġmutable ListOf < T >() ĊĊĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġvec Length ). forEach Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelem Bytes Ġ= ĠByteArray ( size Of Element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . read ( elem Bytes , Ġ 0 , Ġsize Of Element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" failed Ġto Ġread Ġ${ T :: class . java . simple Name } Ġat Ġ$ i ", Ġt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelements . add ( elem Bytes . to Model ( newInstance )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġelements ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠMAX _ VALUE Ġ= ĠU Short . MAX _ VALUE . toInt () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġencode Len Ġen codes Ġthe Ġspecified Ġ[ length ] Ġinto Ġthe Ġ[ output ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġoutput Ġ- Ġthe ĠoutputStream Ġthe Ġlength , Ġof Ġthe ĠShort Vec . Ġis Ġto Ġbe Ġencoded Ġin ĊĠĠĠĠ Ġ* Ġ@ return Ġ- Ġthe Ġnumber Ġof Ġbytes Ġwritten . ĠIf Ġlength Ġ> ĠU Short . MAX _ VALUE . toInt () Ġ, Ġa Ġ[ RuntimeException ] Ġis Ġthrown ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġencode Len ( output : ĠByteArrayOutputStream , Ġlength : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( length Ġ> ĠMAX _ VALUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" length Ġexceeds Ġ$ MAX _ VALUE ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġlength Local Ġ= Ġlength ĊĠĠĠĠĠĠĠ Ġval Ġval Buf Ġ= ĠByteArray ( 1 ) ĊĠĠĠĠĠĠĠ Ġvar Ġwritten Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Buf [ 0 ] Ġ= Ġ( length Local Ġand Ġ 0 x 7 f ). to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlength Local Ġ= Ġlength Local Ġshr Ġ 7 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( length Local Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . write ( val Buf ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwritten Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwritten ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Buf [ 0 ] Ġ= Ġ( val Buf [ 0 ]. toInt () Ġor Ġ 0 x 8 0 ). to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . write ( val Buf ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwritten Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġdecode Len Ġde codes Ġa ĠShort Vec Ġencoded Ġ[ length ] Ġfrom Ġthe Ġ[ input ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġinput Ġ- Ġthe Ġinput Ġstream Ġthat Ġthe Ġlength Ġis Ġencoded Ġin ĊĠĠĠĠ Ġ* Ġ@ return Ġ- Ġreturns Ġthe Ġdecoded Ġlength Ġof Ġthe ĠShort Vec ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdecode Len ( input : ĠByteArrayInputStream ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġoffset Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġval Buf Ġ= ĠByteArray ( 1 ) ĊĠĠĠĠĠĠĠ Ġvar Ġvalue Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . read ( val Buf ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġvalue Ġor Ġ( val Buf [ 0 ]. toInt () Ġand Ġ 0 x 7 f Ġshl Ġ( offset Ġ* Ġ 7 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset ++ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( val Buf [ 0 ]. toInt () Ġand Ġ 0 x 8 0 ) Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( offset Ġ> Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" invalid Ġsize : Ġ$ offset Ġ( max Ġ 3 )") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠ Ġ} Ċ } Ċ