package Ġworld . ph ant asm al . ps ol ib . cursor Ċ Ċ import Ġorg . kh ronos . webgl . ArrayBuffer Ċ import Ġorg . kh ronos . webgl . Data View Ċ import Ġworld . ph ant asm al . ps ol ib . En di ann ess Ċ import Ġworld . ph ant asm al . ps ol ib . buffer . Buffer Ċ Ċ /** Ċ Ġ* ĠA Ġcursor Ġfor Ġreading Ġfrom Ġan Ġarray Ġbuffer Ġor Ġpart Ġof Ġan Ġarray Ġbuffer . Ċ Ġ* Ċ Ġ* Ġ@ param Ġbuffer ĠThe Ġbuffer Ġto Ġread Ġfrom . Ċ Ġ* Ġ@ param Ġend i ann ess ĠDec ides Ġin Ġwhich Ġbyte Ġorder Ġmulti - byte Ġintegers Ġand Ġfloats Ġwill Ġbe Ġinterpreted . Ċ Ġ* Ġ@ param Ġoffset ĠThe Ġstart Ġoffset Ġof Ġthe Ġpart Ġthat Ġwill Ġbe Ġread Ġfrom . Ċ Ġ* Ġ@ param Ġsize ĠThe Ġsize Ġof Ġthe Ġpart Ġthat Ġwill Ġbe Ġread Ġfrom . Ċ Ġ*/ Ċ class ĠArray Buffer Cursor ( ĊĠĠĠ Ġbuffer : ĠArray Buffer , ĊĠĠĠ Ġend i ann ess : ĠEn di ann ess , ĊĠĠĠ Ġoffset : ĠInt Ġ= Ġ 0 , ĊĠĠĠ Ġsize : ĠInt Ġ= Ġbuffer . byte Length Ġ- Ġoffset , Ċ ) Ġ: ĠAbstract Writable Cursor ( offset ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġlittle Endian : ĠBoolean Ġ= Ġend i ann ess Ġ== ĠEn di ann ess . Little ĊĠĠĠ Ġprivate Ġval Ġbacking Buffer Ġ= Ġbuffer ĊĠĠĠ Ġprivate Ġval Ġdv Ġ= ĠData View ( buffer ) ĊĊĠĠĠ Ġoverride Ġvar Ġsize : ĠInt Ġ= Ġsize ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( size Ġ<= Ġbacking Buffer . byte Length Ġ- Ġoffset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ> Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġend i ann ess : ĠEn di ann ess ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( little Endian ) ĠEn di ann ess . Little Ġelse ĠEn di ann ess . Big ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlittle Endian Ġ= Ġvalue Ġ== ĠEn di ann ess . Little ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġu Byte (): ĠU Byte Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Size ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġdv . get Uint 8 ( absolute Position ) ĊĠĠĠĠĠĠĠ Ġposition ++ ĊĠĠĠĠĠĠĠ Ġreturn Ġr . to U Byte () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġu Short (): ĠU Short Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Size ( 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġdv . get Uint 1 6 ( absolute Position , Ġlittle Endian ) ĊĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 2 ĊĠĠĠĠĠĠĠ Ġreturn Ġr . to U Short () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġu Int (): ĠUInt Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Size ( 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġdv . get Uint 3 2 ( absolute Position , Ġlittle Endian ) ĊĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 4 ĊĠĠĠĠĠĠĠ Ġreturn Ġr . to UInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbyte (): ĠByte Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Size ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġdv . getInt 8 ( absolute Position ) ĊĠĠĠĠĠĠĠ Ġposition ++ ĊĠĠĠĠĠĠĠ Ġreturn Ġr ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshort (): ĠShort Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Size ( 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġdv . getInt 1 6 ( absolute Position , Ġlittle Endian ) ĊĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 2 ĊĠĠĠĠĠĠĠ Ġreturn Ġr ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġint (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Size ( 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġdv . getInt 3 2 ( absolute Position , Ġlittle Endian ) ĊĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 4 ĊĠĠĠĠĠĠĠ Ġreturn Ġr ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfloat (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Size ( 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġdv . get Float 3 2 ( absolute Position , Ġlittle Endian ) ĊĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 4 ĊĠĠĠĠĠĠĠ Ġreturn Ġr ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġu ByteArray ( n : ĠInt ): ĠU ByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Size ( n ) ĊĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= ĠU ByteArray ( n ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ i ] Ġ= Ġdv . get Uint 8 ( absolute Position ). to U Byte () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġarray ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġu Short Array ( n : ĠInt ): ĠU Short Array Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Size ( 2 Ġ* Ġn ) ĊĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= ĠU Short Array ( n ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ i ] Ġ= Ġdv . get Uint 1 6 ( absolute Position , Ġlittle Endian ). to U Short () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġarray ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġu IntArray ( n : ĠInt ): ĠUInt Array Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Size ( 4 Ġ* Ġn ) ĊĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= ĠUInt Array ( n ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ i ] Ġ= Ġdv . get Uint 3 2 ( absolute Position , Ġlittle Endian ). to UInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 4 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġarray ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠbyteArray ( n : ĠInt ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Size ( n ) ĊĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= ĠByteArray ( n ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ i ] Ġ= Ġdv . getInt 8 ( absolute Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġarray ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠintArray ( n : ĠInt ): ĠInt Array Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Size ( 4 Ġ* Ġn ) ĊĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= ĠInt Array ( n ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ i ] Ġ= Ġdv . getInt 3 2 ( absolute Position , Ġlittle Endian ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 4 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġarray ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtake ( size : ĠInt ): ĠCursor Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġoffset Ġ+ Ġposition ĊĠĠĠĠĠĠĠ Ġval Ġwrapper Ġ= ĠArray Buffer Cursor ( back ing Buffer , Ġend i ann ess , Ġoffset , Ġsize ) ĊĠĠĠĠĠĠĠ Ġthis . position Ġ+= Ġsize ĊĠĠĠĠĠĠĠ Ġreturn Ġwrapper ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuffer ( size : ĠInt ): ĠBuffer Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Size ( size ) ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= ĠBuffer . from ArrayBuffer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbacking Buffer . slice ( absolute Position , Ġ( absolute Position Ġ+ Ġsize )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend i ann ess ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġposition Ġ+= Ġsize ĊĠĠĠĠĠĠĠ Ġreturn Ġr ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite U Byte ( value : ĠU Byte ): ĠWrit able Cursor Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Size ( 1 ) ĊĠĠĠĠĠĠĠ Ġdv . set Uint 8 ( absolute Position , Ġvalue . to Byte ()) ĊĠĠĠĠĠĠĠ Ġposition ++ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite U Short ( value : ĠU Short ): ĠWrit able Cursor Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Size ( 2 ) ĊĠĠĠĠĠĠĠ Ġdv . set Uint 1 6 ( absolute Position , Ġvalue . to Short (), Ġlittle Endian ) ĊĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 2 ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite UInt ( value : ĠUInt ): ĠWrit able Cursor Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Size ( 4 ) ĊĠĠĠĠĠĠĠ Ġdv . set Uint 3 2 ( absolute Position , Ġvalue . toInt (), Ġlittle Endian ) ĊĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 4 ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite Byte ( value : ĠByte ): ĠWrit able Cursor Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Size ( 1 ) ĊĠĠĠĠĠĠĠ Ġdv . setInt 8 ( absolute Position , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġposition ++ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite Short ( value : ĠShort ): ĠWrit able Cursor Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Size ( 2 ) ĊĠĠĠĠĠĠĠ Ġdv . setInt 1 6 ( absolute Position , Ġvalue , Ġlittle Endian ) ĊĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 2 ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite Int ( value : ĠInt ): ĠWrit able Cursor Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Size ( 4 ) ĊĠĠĠĠĠĠĠ Ġdv . setInt 3 2 ( absolute Position , Ġvalue , Ġlittle Endian ) ĊĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 4 ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite Float ( value : ĠFloat ): ĠWrit able Cursor Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Size ( 4 ) ĊĠĠĠĠĠĠĠ Ġdv . set Float 3 2 ( absolute Position , Ġvalue , Ġlittle Endian ) ĊĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 4 ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠArray Buffer . cursor ( endi ann ess : ĠEn di ann ess ): ĠArray Buffer Cursor Ġ= ĊĠĠĠ ĠArray Buffer Cursor ( this , Ġend i ann ess ) Ċ