object ĠK ml Gen Buffer Ġ{ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġprint ToFile (" k med ial ayer / common / src / main / kotlin / com / so y wiz / k med ial ayer / K ml Buffer . kt ") Ġ{ Ġgenerate Common () Ġ} ĊĠĠĠĠĠĠĠ Ġprint ToFile (" k med ial ayer / android / src / main / kotlin / com / so y wiz / k med ial ayer / K ml Buffer Android . kt ") Ġ{ Ġgenerate Jvm () Ġ} ĊĠĠĠĠĠĠĠ Ġprint ToFile (" k med ial ayer / jvm / src / main / kotlin / com / so y wiz / k med ial ayer / K ml Buffer Jvm . kt ") Ġ{ Ġgenerate Jvm () Ġ} ĊĠĠĠĠĠĠĠ Ġprint ToFile (" k med ial ayer / js / src / main / kotlin / com / so y wiz / k med ial ayer / K ml Buffer Js . kt ") Ġ{ Ġgenerate Js () Ġ} ĊĠĠĠĠĠĠĠ Ġprint ToFile (" k med ial ayer / native / src / main / kotlin / com / so y wiz / k med ial ayer / K ml Buffer Native . kt ") Ġ{ Ġgenerate Native () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġclass ĠK ml Type ( val Ġname : ĠString , Ġval Ġsize : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġopen Ġval Ġbb MethodName : ĠString Ġ= Ġname ĊĠĠĠ Ġ} ĊĠĠĠ Ġobject ĠK ml Byte Ġ: ĠK ml Type (" Byte ", Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġbb MethodName : ĠString Ġ= Ġ"" ĊĠĠĠ Ġ} ĊĠĠĠ Ġobject ĠK ml Short Ġ: ĠK ml Type (" Short ", Ġ 2 ) ĊĠĠĠ Ġobject ĠK ml Int Ġ: ĠK ml Type (" Int ", Ġ 4 ) ĊĠĠĠ Ġobject ĠK ml Float Ġ: ĠK ml Type (" Float ", Ġ 4 ) ĊĠĠĠ Ġval Ġtypes Ġ= ĠlistOf ( K ml Byte , ĠK ml Short , ĠK ml Int , ĠK ml Float ) ĊĊĠĠĠ Ġfun ĠPrinter . generate Common () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ("@ file : Suppress (\" unused \", Ġ\" Red undant Unit ReturnType \") ") ĊĠĠĠĠĠĠĠ Ġprintln ("") ĊĠĠĠĠĠĠĠ Ġprintln (" package Ġcom . so y wiz . k med ial ayer ") ĊĠĠĠĠĠĠĠ Ġprintln ("") ĊĠĠĠĠĠĠĠ Ġprintln (" fun Ġk ml Internal Round Up ( n : ĠInt , Ġm : ĠInt ) Ġ= Ġif Ġ( n Ġ>= Ġ 0 ) Ġ(( n Ġ+ Ġm Ġ- Ġ 1 ) Ġ/ Ġm ) Ġ* Ġm Ġelse Ġ( n Ġ/ Ġm ) Ġ* Ġm ") ĊĠĠĠĠĠĠĠ Ġprintln ("") ĊĠĠĠĠĠĠĠ Ġprintln (" expect Ġclass ĠK ml Native Buffer Ġ{ ") ĊĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġval Ġsize : ĠInt ") ĊĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġconstructor ( size : ĠInt )") ĊĠĠĠĠĠĠĠ Ġprintln ("") ĊĠĠĠĠĠĠĠ Ġfor Ġ( type Ġin Ġtypes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġfun Ġget ${ type . name }( index : ĠInt ): Ġ${ type . name }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġfun Ġset ${ type . name }( index : ĠInt , Ġvalue : Ġ${ type . name }): ĠUnit ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġfun Ġdispose () ") ĊĠĠĠĠĠĠĠ Ġprintln (" }") ĊĠĠĠĠĠĠĠ Ġprintln ("") ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġfor Ġ( type Ġin Ġtypes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġtype . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Name Ġ= Ġ" K ml ${ name } Buffer " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarray Name Ġ= Ġ"${ name } Array " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" class Ġ$ buffer Name ( override Ġval Ġbase Buffer : ĠK ml Buffer Base ) Ġ: ĠK ml Buffer , ĠIterable <$ name > Ġ{ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġcompanion Ġobject Ġ{ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠĠĠĠĠ Ġconst Ġval ĠELEMENT _ SIZE Ġ= Ġ${ type . size }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠĠĠĠĠ Ġoperator Ġfun Ġinvoke ( array : Ġ$ array Name ): Ġ$ buffer Name Ġ= Ġarray . to ${ name } Buffer () ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġ} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġval Ġsize : ĠInt Ġ= Ġbase Buffer . size Ġ/ ĠELEMENT _ SIZE ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġconstructor ( size : ĠInt ) Ġ: Ġthis ( K ml Buffer Base ( size Ġ* ĠELEMENT _ SIZE )) ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġinline Ġoperator Ġfun Ġget ( index : ĠInt ): Ġ$ name Ġ= Ġbase Buffer . get $ name ( index )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġinline Ġoperator Ġfun Ġset ( index : ĠInt , Ġvalue : Ġ$ name ): ĠUnit Ġ= Ġrun Ġ{ Ġbase Buffer . set $ name ( index , Ġvalue ) Ġ} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġoverride Ġfun Ġiterator (): ĠIterator <$ name > Ġ= Ġobject Ġ: ĠIterator <$ name > Ġ{ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠĠĠĠĠ Ġvar Ġpos Ġ= Ġ 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhas Next (): ĠBoolean Ġ= Ġpos Ġ< Ġsize ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnext (): Ġ$ name Ġ= Ġget ( pos ++) ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġ} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ\"$ buffer Name (\ ${ this . toList () }) \" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" fun ĠK ml Buffer . as ${ name } Buffer (): Ġ$ buffer Name Ġ= Ġ$ buffer Name ( this . base Buffer )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" fun Ġ$ array Name . to ${ name } Buffer (): Ġ$ buffer Name Ġ= Ġ$ buffer Name ( this . size ). also Ġ{ Ġfor Ġ( n Ġin Ġ 0 Ġuntil Ġthis . size ) Ġit [ n ] Ġ= Ġthis [ n ] Ġ} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" fun Ġ$ buffer Name . to ${ name } Array (): Ġ$ array Name Ġ= Ġ$ array Name ( this . size ). also Ġ{ Ġfor Ġ( n Ġin Ġ 0 Ġuntil Ġthis . size ) Ġit [ n ] Ġ= Ġthis [ n ] Ġ} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠPrinter . generate Jvm () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" package Ġcom . so y wiz . k med ial ayer ") ĊĠĠĠĠĠĠĠ Ġprintln ("") ĊĠĠĠĠĠĠĠ Ġprintln (" import Ġjava . nio .* ") ĊĠĠĠĠĠĠĠ Ġprintln ("") ĊĠĠĠĠĠĠĠ Ġprintln (" actual Ġclass ĠK ml Native Buffer Ġconstructor ( val Ġbase ByteBuffer : ĠByteBuffer ) Ġ{ ") ĊĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġval Ġbyte Buffer Ġ= Ġbase ByteBuffer ") ĊĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġval Ġshort Buffer Ġ= Ġbase ByteBuffer . as Short Buffer () ") ĊĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġval Ġint Buffer Ġ= Ġbase ByteBuffer . as Int Buffer () ") ĊĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġval Ġfloat Buffer Ġ= Ġbase ByteBuffer . as Float Buffer () ") ĊĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġactual Ġval Ġsize : ĠInt Ġ= Ġbase ByteBuffer . limit () ") ĊĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġactual Ġconstructor ( size : ĠInt ) Ġ: Ġthis ( ByteBuffer . allocate Direct ( k ml Internal Round Up ( size , Ġ 8 )). order ( Byte Order . native Order ())) ") ĊĠĠĠĠĠĠĠ Ġprintln ("") ĊĠĠĠĠĠĠĠ Ġfor Ġ( type Ġin Ġtypes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġactual Ġfun Ġget ${ type . name }( index : ĠInt ): Ġ${ type . name } Ġ= Ġbase ByteBuffer . get ${ type . bb MethodName }( index Ġ* Ġ${ type . size }) ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġactual Ġfun Ġset ${ type . name }( index : ĠInt , Ġvalue : Ġ${ type . name }): ĠUnit Ġ= Ġrun Ġ{ Ġbase ByteBuffer . put ${ type . bb MethodName }( index Ġ* Ġ${ type . size }, Ġvalue ) Ġ} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġactual Ġfun Ġdispose () Ġ= ĠUnit ") ĊĠĠĠĠĠĠĠ Ġprintln (" }") ĊĠĠĠĠĠĠĠ Ġprintln ("@ Suppress (\" USE LESS _ CAST \") Ġval ĠK ml Native Buffer . nio Buffer : ĠByteBuffer Ġget () Ġ= Ġ( this Ġas ĠK ml Native Buffer ). byte Buffer ") ĊĠĠĠĠĠĠĠ Ġprintln ("@ Suppress (\" USE LESS _ CAST \") Ġval ĠK ml Native Buffer . nio ByteBuffer : ĠByteBuffer Ġget () Ġ= Ġ( this Ġas ĠK ml Native Buffer ). byte Buffer ") ĊĠĠĠĠĠĠĠ Ġprintln ("@ Suppress (\" USE LESS _ CAST \") Ġval ĠK ml Native Buffer . nio Short Buffer : ĠShort Buffer Ġget () Ġ= Ġ( this Ġas ĠK ml Native Buffer ). short Buffer ") ĊĠĠĠĠĠĠĠ Ġprintln ("@ Suppress (\" USE LESS _ CAST \") Ġval ĠK ml Native Buffer . nio Int Buffer : ĠInt Buffer Ġget () Ġ= Ġ( this Ġas ĠK ml Native Buffer ). int Buffer ") ĊĠĠĠĠĠĠĠ Ġprintln ("@ Suppress (\" USE LESS _ CAST \") Ġval ĠK ml Native Buffer . nio Float Buffer : ĠFloat Buffer Ġget () Ġ= Ġ( this Ġas ĠK ml Native Buffer ). float Buffer ") ĊĠĠĠĠĠĠĠ Ġprintln ("") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠPrinter . generate Js () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" package Ġcom . so y wiz . k med ial ayer ") ĊĠĠĠĠĠĠĠ Ġprintln ("") ĊĠĠĠĠĠĠĠ Ġprintln (" import Ġorg . kh ronos . webgl .* ") ĊĠĠĠĠĠĠĠ Ġprintln ("") ĊĠĠĠĠĠĠĠ Ġprintln (" actual Ġclass ĠK ml Native Buffer Ġconstructor ( val Ġarray Buffer : ĠArray Buffer ) Ġ{ ") ĊĠĠĠĠĠĠĠ Ġprintln (" ĠĠ Ġval Ġarray Byte Ġ= ĠInt 8 Array ( array Buffer )") ĊĠĠĠĠĠĠĠ Ġprintln (" ĠĠ Ġval Ġarray U Byte Ġ= ĠUint 8 Array ( array Buffer )") ĊĠĠĠĠĠĠĠ Ġprintln (" ĠĠ Ġval Ġarray Short Ġ= ĠInt 1 6 Array ( array Buffer )") ĊĠĠĠĠĠĠĠ Ġprintln (" ĠĠ Ġval Ġarray Int Ġ= ĠInt 3 2 Array ( array Buffer )") ĊĠĠĠĠĠĠĠ Ġprintln (" ĠĠ Ġval Ġarray Float Ġ= ĠFloat 3 2 Array ( array Buffer )") ĊĠĠĠĠĠĠĠ Ġprintln (" ĠĠ Ġactual Ġval Ġsize : ĠInt Ġ= Ġarray Buffer . byte Length ") ĊĠĠĠĠĠĠĠ Ġprintln (" ĠĠ Ġactual Ġconstructor ( size : ĠInt ) Ġ: Ġthis ( ArrayBuffer ( k ml Internal Round Up ( size , Ġ 8 ))) ") ĊĠĠĠĠĠĠĠ Ġprintln ("") ĊĠĠĠĠĠĠĠ Ġfor Ġ( type Ġin Ġtypes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġactual Ġfun Ġget ${ type . name }( index : ĠInt ): Ġ${ type . name } Ġ= Ġarray ${ type . name }[ index ]") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġactual Ġfun Ġset ${ type . name }( index : ĠInt , Ġvalue : Ġ${ type . name }): ĠUnit Ġ= Ġrun Ġ{ Ġarray ${ type . name }[ index ] Ġ= Ġvalue Ġ} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġactual Ġfun Ġdispose () Ġ= ĠUnit ") ĊĠĠĠĠĠĠĠ Ġprintln (" }") ĊĠĠĠĠĠĠĠ Ġprintln ("@ Suppress (\" USE LESS _ CAST \") Ġval ĠK ml Native Buffer . array Buffer : ĠArray Buffer Ġget () Ġ= Ġ( this Ġas ĠK ml Native Buffer ). array Buffer ") ĊĠĠĠĠĠĠĠ Ġprintln ("@ Suppress (\" USE LESS _ CAST \") Ġval ĠK ml Native Buffer . array Byte : ĠInt 8 Array Ġget () Ġ= Ġ( this Ġas ĠK ml Native Buffer ). array Byte ") ĊĠĠĠĠĠĠĠ Ġprintln ("@ Suppress (\" USE LESS _ CAST \") Ġval ĠK ml Native Buffer . array U Byte : ĠUint 8 Array Ġget () Ġ= Ġ( this Ġas ĠK ml Native Buffer ). array U Byte ") ĊĠĠĠĠĠĠĠ Ġprintln ("@ Suppress (\" USE LESS _ CAST \") Ġval ĠK ml Native Buffer . array Short : ĠInt 1 6 Array Ġget () Ġ= Ġ( this Ġas ĠK ml Native Buffer ). array Short ") ĊĠĠĠĠĠĠĠ Ġprintln ("@ Suppress (\" USE LESS _ CAST \") Ġval ĠK ml Native Buffer . array Int : ĠInt 3 2 Array Ġget () Ġ= Ġ( this Ġas ĠK ml Native Buffer ). array Int ") ĊĠĠĠĠĠĠĠ Ġprintln ("@ Suppress (\" USE LESS _ CAST \") Ġval ĠK ml Native Buffer . array Float : ĠFloat 3 2 Array Ġget () Ġ= Ġ( this Ġas ĠK ml Native Buffer ). array Float ") ĊĠĠĠĠĠĠĠ Ġprintln ("") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠPrinter . generate Native () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" package Ġcom . so y wiz . k med ial ayer ") ĊĠĠĠĠĠĠĠ Ġprintln ("") ĊĠĠĠĠĠĠĠ Ġprintln (" import Ġkon an .* ") ĊĠĠĠĠĠĠĠ Ġprintln (" import Ġkotlinx . c interop .* ") ĊĠĠĠĠĠĠĠ Ġprintln ("") ĊĠĠĠĠĠĠĠ Ġprintln (" actual Ġclass ĠK ml Native Buffer Ġconstructor ( val Ġplacement : ĠNative Free able Placement , Ġval Ġptr : ĠNative Ptr , Ġactual Ġval Ġsize : ĠInt ) Ġ{ ") ĊĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġactual Ġconstructor ( size : ĠInt ) Ġ: Ġthis ( native Heap , Ġnative Heap . alloc Array < Byte Var >( k ml Internal Round Up ( size , Ġ 8 )). unchecked Cast (), Ġsize )") ĊĠĠĠĠĠĠĠ Ġprintln ("") ĊĠĠĠĠĠĠĠ Ġfor Ġ( type Ġin Ġtypes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt name Ġ= Ġtype . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt size Ġ= Ġtype . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġactual Ġinline Ġfun Ġget $ t name ( index : ĠInt ): Ġ$ t name Ġ= Ġ( ptr Ġ+ Ġindex . to Long () Ġ* Ġ$ t size ). unchecked Cast < ${ t name } Var Of <$ t name >> (). value ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġactual Ġinline Ġfun Ġset $ t name ( index : ĠInt , Ġvalue : Ġ$ t name ): ĠUnit Ġ{ Ġ( ptr Ġ+ Ġindex . to Long () Ġ* Ġ$ t size ). unchecked Cast < ${ t name } Var Of <$ t name >> (). value Ġ= Ġvalue Ġ} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġactual Ġfun Ġdispose () Ġ= Ġrun Ġ{ Ġplacement . free ( ptr ) Ġ} ") ĊĠĠĠĠĠĠĠ Ġprintln (" }") ĊĠĠĠĠĠĠĠ Ġprintln (" fun ĠK ml Native Buffer . unsafe Address (): ĠC Pointer < Byte Var > Ġ= Ġthis . ptr . unchecked Cast () ") ĊĠĠĠĠĠĠĠ Ġprintln ("") ĊĠĠĠ Ġ} Ċ }