/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 - 2 0 2 1 ĠK Math Ġcontributors . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġspace . k science . k math . memory Ċ Ċ import Ġorg . kh ronos . webgl . ArrayBuffer Ċ import Ġorg . kh ronos . webgl . Data View Ċ import Ġorg . kh ronos . webgl . Int 8 Array Ċ Ċ private Ġclass ĠData View Memory ( val Ġview : ĠData View ) Ġ: ĠMemory Ġ{ ĊĠĠĠ Ġoverride Ġval Ġsize : ĠInt Ġget () Ġ= Ġview . byte Length ĊĊĠĠĠ Ġoverride Ġfun Ġview ( offset : ĠInt , Ġlength : ĠInt ): ĠMemory Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( offset Ġ>= Ġ 0 ) Ġ{ Ġ" offset Ġshouldn 't Ġbe Ġnegative : Ġ$ offset " Ġ} ĊĠĠĠĠĠĠĠ Ġrequire ( length Ġ>= Ġ 0 ) Ġ{ Ġ" length Ġshouldn 't Ġbe Ġnegative : Ġ$ length " Ġ} ĊĠĠĠĠĠĠĠ Ġrequire ( offset Ġ+ Ġlength Ġ<= Ġsize ) Ġ{ Ġ" Can 't Ġview Ġmemory Ġoutside Ġthe Ġparent Ġregion ." Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( offset Ġ+ Ġlength Ġ> Ġsize ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIndex OutOfBoundsException (" offset Ġ+ Ġlength Ġ> Ġsize : Ġ$ offset Ġ+ Ġ$ length Ġ> Ġ$ size ") ĊĊĠĠĠĠĠĠĠ Ġreturn ĠData View Memory ( Data View ( view . buffer , Ġview . byte Offset Ġ+ Ġoffset , Ġlength )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcopy (): ĠMemory Ġ= ĠData View Memory ( Data View ( view . buffer . slice ( 0 ))) ĊĊĠĠĠ Ġprivate Ġval Ġreader : ĠMemory Reader Ġ= Ġobject Ġ: ĠMemory Reader Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġmemory : ĠMemory Ġget () Ġ= Ġthis @ Data View Memory ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġread Double ( offset : ĠInt ): ĠDouble Ġ= Ġview . get Float 6 4 ( offset , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġread Float ( offset : ĠInt ): ĠFloat Ġ= Ġview . get Float 3 2 ( offset , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġread Byte ( offset : ĠInt ): ĠByte Ġ= Ġview . getInt 8 ( offset ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġread Short ( offset : ĠInt ): ĠShort Ġ= Ġview . getInt 1 6 ( offset , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġread Int ( offset : ĠInt ): ĠInt Ġ= Ġview . getInt 3 2 ( offset , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġread Long ( offset : ĠInt ): ĠLong Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . getInt 3 2 ( offset , Ġfalse ). to Long () Ġshl Ġ 3 2 Ġor Ġview . getInt 3 2 ( offset Ġ+ Ġ 4 , Ġfalse ). to Long () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrelease () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdoes Ġnothing Ġon ĠJS ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreader (): ĠMemory Reader Ġ= Ġreader ĊĊĠĠĠ Ġprivate Ġval Ġwriter : ĠMemory Writer Ġ= Ġobject Ġ: ĠMemory Writer Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġmemory : ĠMemory Ġget () Ġ= Ġthis @ Data View Memory ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwrite Double ( offset : ĠInt , Ġvalue : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . set Float 6 4 ( offset , Ġvalue , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwrite Float ( offset : ĠInt , Ġvalue : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . set Float 3 2 ( offset , Ġvalue , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwrite Byte ( offset : ĠInt , Ġvalue : ĠByte ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . setInt 8 ( offset , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwrite Short ( offset : ĠInt , Ġvalue : ĠShort ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . set Uint 1 6 ( offset , Ġvalue , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwrite Int ( offset : ĠInt , Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . setInt 3 2 ( offset , Ġvalue , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwrite Long ( offset : ĠInt , Ġvalue : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . setInt 3 2 ( offset , Ġ( value Ġshr Ġ 3 2 ). toInt (), Ġlittle Endian Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . setInt 3 2 ( offset Ġ+ Ġ 4 , Ġ( value Ġand Ġ 0 xffffffff L ). toInt (), Ġlittle Endian Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrelease () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdoes Ġnothing Ġon ĠJS ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwriter (): ĠMemory Writer Ġ= Ġwriter Ċ Ċ } Ċ Ċ /** Ċ Ġ* ĠAlloc ates Ġmemory Ġbased Ġon Ġa Ġ[ Data View ]. Ċ Ġ*/ Ċ public Ġactual Ġfun ĠMemory . Companion . allocate ( length : ĠInt ): ĠMemory Ġ{ ĊĠĠĠ Ġval Ġbuffer Ġ= ĠArray Buffer ( length ) ĊĠĠĠ Ġreturn ĠData View Memory ( Data View ( buffer , Ġ 0 , Ġlength )) Ċ } Ċ Ċ /** Ċ Ġ* ĠWrap s Ġa Ġ[ Memory ] Ġaround Ġexisting Ġ[ ByteArray ]. ĠThis Ġoperation Ġis Ġunsafe Ġsince Ġthe Ġarray Ġis Ġnot Ġcopied Ċ Ġ* Ġand Ġcould Ġbe Ġmut ated Ġindependently Ġfrom Ġthe Ġresulting Ġ[ Memory ]. Ċ Ġ*/ Ċ public Ġactual Ġfun ĠMemory . Companion . wrap ( array : ĠByteArray ): ĠMemory Ġ{ ĊĠĠĠ Ġ@ Suppress (" CAST _ NE VER _ SU CCE ED S ") Ġval Ġint 8 Array Ġ= Ġarray Ġas ĠInt 8 Array ĊĠĠĠ Ġreturn ĠData View Memory ( Data View ( int 8 Array . buffer , Ġint 8 Array . byte Offset , Ġint 8 Array . length )) Ċ } Ċ