package Ġopen vr . lib Ċ Ċ import Ġglm _. b Ċ import Ġglm _. i Ċ import Ġk ool .* Ċ import Ġorg . lwjgl . system . Math Util Ċ import Ġorg . lwjgl . system . Memory Stack Ċ import Ġorg . lwjgl . system . Memory Util .* Ċ import Ġjava . nio . ByteBuffer Ċ Ċ type alias Ġst ak Ġ= ĠStack Ċ Ċ // fun Ġbuffer Of Ascii ( string : ĠString , Ġnull Terminated : ĠBoolean Ġ= Ġtrue ): ĠByteBuffer Ġ{ Ċ // ĠĠĠ Ġval Ġbytes Ġ= Ġstack Get (). malloc ( string . length Ġ+ Ġif Ġ( null Terminated ) Ġ 1 Ġelse Ġ 0 ) Ċ // ĠĠĠ Ġfor Ġ( i Ġin Ġstring . indices ) Ċ // ĠĠĠĠĠĠĠ Ġbytes [ i ] Ġ= Ġstring [ i ]. b Ċ // ĠĠĠ Ġif Ġ( null Terminated ) Ċ // ĠĠĠĠĠĠĠ Ġbytes [ string . length ] Ġ= Ġ 0 Ċ // ĠĠĠ Ġreturn Ġbytes Ċ //} Ċ Ċ // ĠTODO Ġremove Ġand Ġuse Ġk ool 's Ġone Ċ fun Ġ< R > ĠMemory Stack . ascii Ad r ( size : ĠInt , Ġnull Terminated : ĠBoolean Ġ= Ġtrue , Ġblock : Ġ( Ad r ) Ġ-> ĠR ): ĠString Ġ{ ĊĠĠĠ Ġval Ġad r Ġ= Ġn malloc ( 1 , Ġsize Ġ+ Ġnull Terminated . i ) ĊĠĠĠ Ġblock ( adr ) ĊĠĠĠ Ġreturn Ġmem ASCII ( adr , Ġsize ) Ċ } Ċ Ċ // ĠTODO Ġ-> Ġuno Ċ const Ġval ĠN UL Ġ= Ġ'\ u 0 0 0 0 ' Ċ Ċ /** ĠIt Ġmalloc s , Ġpasses Ġthe Ġaddress Ġand Ġreads Ġthe Ġnull Ġterminated Ġstring Ċ Ġ* Ġ ĠGetter Ġ*/ Ċ inline Ġfun Ġ< R > ĠStack . ascii Ad r ( maxSize : ĠInt , Ġblock : Ġ( Ad r ) Ġ-> ĠR ): ĠString Ġ= Ġwith Ġ{ ĊĠĠĠ Ġval Ġad r Ġ= Ġit . n malloc ( 1 , ĠmaxSize ) ĊĠĠĠ Ġblock ( adr ) ĊĠĠĠ Ġmem ASCII ( adr , Ġstrlen 6 4 NT 1 ( adr , ĠmaxSize )) Ċ } Ċ Ċ /** ĠIt Ġmalloc Ġthe Ġbuffer , Ġpasses Ġit Ġand Ġreads Ġthe Ġnull Ġterminated Ġstring Ċ Ġ* Ġ ĠGetter Ġ*/ Ċ inline Ġfun Ġ< R > ĠStack . ascii Buffer ( maxSize : ĠInt , Ġblock : Ġ( ByteBuffer ) Ġ-> ĠR ): ĠString Ġ= Ġwith Ġ{ ĊĠĠĠ Ġval Ġbuf Ġ= Ġit . malloc ( 1 , ĠmaxSize ) ĊĠĠĠ Ġblock ( buf ) ĊĠĠĠ Ġmem ASCII ( buf . adr , ĠmaxSize ) Ċ } Ċ Ċ fun Ġstrlen 6 4 NT 1 ( address : ĠLong , ĠmaxLength : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠ Ġif Ġ( 8 Ġ<= ĠmaxLength ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmis alignment Ġ= Ġaddress . toInt () Ġand Ġ 7 ĊĠĠĠĠĠĠĠ Ġif Ġ( mis alignment Ġ!= Ġ 0 ) Ġ{ Ġ// ĠAlign Ġto Ġ 8 Ġbytes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlen Ġ= Ġ 8 Ġ- Ġmis alignment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġlen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( UN SAFE . getByte ( null , Ġaddress Ġ+ Ġi ). toInt () Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠAlign ed Ġlong s Ġfor Ġperformance ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ<= ĠmaxLength Ġ- Ġ 8 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Math Util . math Has Zero Byte ( UN SAFE . getLong ( null , Ġaddress Ġ+ Ġi ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ+= Ġ 8 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠTail ĊĠĠĠ Ġwhile Ġ( i Ġ< ĠmaxLength ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( UN SAFE . getByte ( null , Ġaddress Ġ+ Ġi ). toInt () Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġi Ċ }