package Ġcom . ep am . k jni . core . util Ċ Ċ import Ġcom . ep am . k jni . core . Synt hetic Ċ import Ġj v map i .* Ċ import Ġkotlinx . c interop . C Array Pointer Ċ import Ġkotlinx . c interop . alloc Array Ċ import Ġkotlinx . c interop . native Heap Ċ import Ġkotlinx . c interop . to K String ĊĊ Ċ data Ġclass ĠX ( val Ġvalue : ĠAny , Ġval Ġprimitive : ĠBoolean ) ĊĊ Ċ abstract Ġclass ĠJava Method ( ĊĠĠĠ Ġval Ġj O : Ġjobject ?, ĊĠĠĠ Ġval Ġjava Class : Ġjclass ?, ĊĠĠĠ Ġval ĠmethodName : ĠString , ĊĠĠĠ Ġval Ġmethod Signature : ĠString Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġget Method (): Ġj method ID ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠGet Method ID ( java Class , ĠmethodName , Ġmethod Signature ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġoperator Ġfun Ġinvoke ( var arg Ġraw : ĠX ): ĠAny Ċ Ċ } Ċ Ċ @ Experimental Unsigned Types Ċ fun Ġto J Object Array ( raw : ĠArray < out ĠX >): ĠC Array Pointer < j value > Ġ{ ĊĠĠĠ Ġreturn Ġnative Heap . alloc Array ( raw . size ) Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġit Ġ= Ġraw [ index ] ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġit . value ĊĠĠĠĠĠĠĠ Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSynt hetic Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl Ġ= Ġvalue . java Object ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl Ġ= Ġget J String ( value ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInt Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . primitive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl Ġ= Ġjava . lang . Integer ( value ). java Object ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDouble Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . primitive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl Ġ= Ġjava . lang . Double ( value ). java Object ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠByte Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . primitive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl Ġ= Ġjava . lang . Byte ( value ). java Object ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠShort Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . primitive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl Ġ= Ġjava . lang . Short ( value ). java Object ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLong Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . primitive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl Ġ= Ġjava . lang . Long ( value ). java Object ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFloat Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . primitive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl Ġ= Ġjava . lang . Float ( value ). java Object ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBoolean Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . primitive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġz Ġ= Ġif Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . to U Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . to U Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl Ġ= Ġjava . lang . Boolean ( value ). java Object ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠChar Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . primitive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġ= Ġvalue . toInt (). to U Short () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl Ġ= Ġjava . lang . Character ( value ). java Object ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Please ĠImplement Ġme Ġ${ it . value :: class }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Please ĠImplement Ġme Ġ${ it :: class }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠJava Constructor ( ĊĠĠĠ Ġval Ġjava Class : Ġjclass ?, ĊĠĠĠ Ġval ĠmethodName : ĠString , ĊĠĠĠ Ġval Ġmethod Signature : ĠString Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġget Method (): Ġj method ID ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠGet Method ID ( Ġjava Class , ĠmethodName , Ġmethod Signature ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġget J String ( value : ĠString ): Ġj string ? Ġ{ ĊĠĠĠ Ġ// fix me Ġde allocate ĊĠĠĠ Ġval Ġnew String UTF Ġ= ĠNew String UTF ( value ) ĊĠĠĠ Ġreturn Ġnew String UTF Ċ } Ċ Ċ fun Ġget K String ( value : Ġjobject ?): ĠString Ġ{ ĊĠĠĠ Ġ// fix me Ġde allocate ĊĠĠĠ Ġval ĠgetString UTF Chars Ġ= ĠGet String UTF Chars ( value , Ġnull ) ĊĠĠĠ Ġreturn ĠgetString UTF Chars ?. to K String () !! Ċ } Ċ