package Ġde . fab max . k ool . util Ċ Ċ import Ġde . fab max . k ool . K ool Exception Ċ import Ġorg . kh ronos . webgl .* Ċ Ċ /** Ċ Ġ* Ġ@ author Ġfab max Ċ Ġ*/ Ċ abstract Ġclass ĠGeneric Buffer < out ĠB : ĠArray Buffer View >( override Ġval Ġcapacity : ĠInt , Ġcreate : Ġ() Ġ-> ĠB ) Ġ: ĠBuffer Ġ{ ĊĠĠĠ Ġval Ġbuffer Ġ= Ġcreate () ĊĊĠĠĠ Ġoverride Ġvar Ġlimit Ġ= Ġcapacity ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ< Ġ 0 Ġ|| Ġvalue Ġ> Ġcapacity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠK ool Exception (" Limit Ġis Ġout Ġof Ġbounds : Ġ$ value Ġ( capacity : Ġ$ capacity )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ> Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġposition Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġval Ġremaining : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġlimit Ġ- Ġposition ĊĊĠĠĠ Ġoverride Ġfun Ġflip () Ġ{ ĊĠĠĠĠĠĠĠ Ġlimit Ġ= Ġposition ĊĠĠĠĠĠĠĠ Ġposition Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġlimit Ġ= Ġcapacity ĊĠĠĠĠĠĠĠ Ġposition Ġ= Ġ 0 ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠByteBuffer Ġbuffer Ġimplementation Ċ Ġ*/ Ċ class ĠUint 8 Buffer Impl ( array : ĠUint 8 Array ) Ġ: ĠUint 8 Buffer , ĠGeneric Buffer < Uint 8 Array >( array . length , Ġ{ Ġarray Ġ}) Ġ{ ĊĊĠĠĠ Ġconstructor ( capacity : ĠInt ) Ġ: Ġthis ( Uint 8 Array ( capacity )) ĊĊĠĠĠ Ġoverride Ġfun Ġget ( i : ĠInt ): ĠByte Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbuffer [ i ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset ( i : ĠInt , Ġvalue : ĠByte ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuffer [ i ] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput ( data : ĠByteArray , Ġoffset : ĠInt , Ġlen : ĠInt ): ĠUint 8 Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġoffset Ġuntil Ġoffset Ġ+ Ġlen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer [ position ++] Ġ= Ġdata [ i ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput ( value : ĠByte ): ĠUint 8 Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġbuffer [ position ++] Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput ( data : ĠUint 8 Buffer ): ĠUint 8 Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdata . position Ġuntil Ġdata . limit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ( data [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠShort Buffer Ġbuffer Ġimplementation Ċ Ġ*/ Ċ class ĠUint 1 6 Buffer Impl ( capacity : ĠInt ) Ġ: ĠUint 1 6 Buffer , ĠGeneric Buffer < Uint 1 6 Array >( capacity , Ġ{ ĊĠĠĠ ĠUint 1 6 Array ( capacity ) Ċ }) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget ( i : ĠInt ): ĠShort Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbuffer [ i ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset ( i : ĠInt , Ġvalue : ĠShort ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuffer [ i ] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput ( data : ĠShort Array , Ġoffset : ĠInt , Ġlen : ĠInt ): ĠUint 1 6 Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġoffset .. ( offset Ġ+ Ġlen Ġ- Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer [ position ++] Ġ= Ġdata [ i ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput ( value : ĠShort ): ĠUint 1 6 Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġbuffer [ position ++] Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput ( data : ĠUint 1 6 Buffer ): ĠUint 1 6 Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdata . position Ġuntil Ġdata . limit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ( data [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠInt Buffer Ġbuffer Ġimplementation Ċ Ġ*/ Ċ class ĠUint 3 2 Buffer Impl ( capacity : ĠInt ) Ġ: ĠUint 3 2 Buffer , ĠGeneric Buffer < Uint 3 2 Array >( capacity , Ġ{ ĊĠĠĠ ĠUint 3 2 Array ( capacity ) Ċ }) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget ( i : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbuffer [ i ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset ( i : ĠInt , Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuffer [ i ] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput ( data : ĠInt Array , Ġoffset : ĠInt , Ġlen : ĠInt ): ĠUint 3 2 Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġoffset .. ( offset Ġ+ Ġlen Ġ- Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer [ position ++] Ġ= Ġdata [ i ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput ( value : ĠInt ): ĠUint 3 2 Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġbuffer [ position ++] Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput ( data : ĠUint 3 2 Buffer ): ĠUint 3 2 Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdata . position Ġuntil Ġdata . limit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ( data [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠFloat Buffer Ġbuffer Ġimplementation Ċ Ġ*/ Ċ class ĠFloat 3 2 Buffer Impl ( capacity : ĠInt ) Ġ: ĠFloat 3 2 Buffer , ĠGeneric Buffer < Float 3 2 Array >( capacity , Ġ{ ĊĠĠĠ ĠFloat 3 2 Array ( capacity ) Ċ }) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget ( i : ĠInt ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbuffer [ i ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset ( i : ĠInt , Ġvalue : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuffer [ i ] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput ( data : ĠFloat Array , Ġoffset : ĠInt , Ġlen : ĠInt ): ĠFloat 3 2 Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġoffset Ġuntil Ġoffset Ġ+ Ġlen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer [ position ++] Ġ= Ġdata [ i ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput ( value : ĠFloat ): ĠFloat 3 2 Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġbuffer [ position ++] Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput ( data : ĠFloat 3 2 Buffer ): ĠFloat 3 2 Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdata . position Ġuntil Ġdata . limit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ( data [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠM ixed Buffer Impl ( capacity : ĠInt ) Ġ: ĠM ixed Buffer , ĠGeneric Buffer < Data View >( capacity , Ġ{ ĊĠĠĠ ĠData View ( ArrayBuffer ( capacity )) Ċ }) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġput Uint 8 ( value : ĠByte ): ĠM ixed Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġbuffer . set Uint 8 ( position ++, Ġvalue ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput Uint 8 ( data : ĠByteArray , Ġoffset : ĠInt , Ġlen : ĠInt ): ĠM ixed Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġoffset Ġuntil Ġoffset Ġ+ Ġlen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . set Uint 8 ( position ++, Ġdata [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput Uint 8 ( data : ĠUint 8 Buffer ): ĠM ixed Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdata . position Ġuntil Ġdata . limit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . set Uint 8 ( position ++, Ġdata [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput Uint 1 6 ( value : ĠShort ): ĠM ixed Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġbuffer . set Uint 1 6 ( position , Ġvalue , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 2 ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput Uint 1 6 ( data : ĠShort Array , Ġoffset : ĠInt , Ġlen : ĠInt ): ĠM ixed Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġoffset Ġuntil Ġoffset Ġ+ Ġlen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . set Uint 1 6 ( position , Ġdata [ i ], Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput Uint 1 6 ( data : ĠUint 1 6 Buffer ): ĠM ixed Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdata . position Ġuntil Ġdata . limit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . set Uint 1 6 ( position , Ġdata [ i ], Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput Uint 3 2 ( value : ĠInt ): ĠM ixed Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġbuffer . set Uint 3 2 ( position , Ġvalue , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 4 ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput Uint 3 2 ( data : ĠInt Array , Ġoffset : ĠInt , Ġlen : ĠInt ): ĠM ixed Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġoffset Ġuntil Ġoffset Ġ+ Ġlen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . set Uint 3 2 ( position , Ġdata [ i ], Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 4 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput Uint 3 2 ( data : ĠUint 3 2 Buffer ): ĠM ixed Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdata . position Ġuntil Ġdata . limit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . set Uint 3 2 ( position , Ġdata [ i ], Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 4 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput Float 3 2 ( value : ĠFloat ): ĠM ixed Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġbuffer . set Float 3 2 ( position , Ġvalue , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 4 ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput Float 3 2 ( data : ĠFloat Array , Ġoffset : ĠInt , Ġlen : ĠInt ): ĠM ixed Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġoffset Ġuntil Ġoffset Ġ+ Ġlen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . set Float 3 2 ( position , Ġdata [ i ], Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 4 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput Float 3 2 ( data : ĠFloat 3 2 Buffer ): ĠM ixed Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdata . position Ġuntil Ġdata . limit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . set Float 3 2 ( position , Ġdata [ i ], Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 4 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpadding ( n Bytes : ĠInt ): ĠM ixed Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġposition Ġ+= Ġn Bytes ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} Ċ } Ċ Ċ actual Ġfun Ġcreate Uint 8 Buffer ( capacity : ĠInt ): ĠUint 8 Buffer Ġ{ ĊĠĠĠ Ġreturn ĠUint 8 Buffer Impl ( capacity ) Ċ } Ċ Ċ actual Ġfun Ġcreate Uint 1 6 Buffer ( capacity : ĠInt ): ĠUint 1 6 Buffer Ġ{ ĊĠĠĠ Ġreturn ĠUint 1 6 Buffer Impl ( capacity ) Ċ } Ċ Ċ actual Ġfun Ġcreate Uint 3 2 Buffer ( capacity : ĠInt ): ĠUint 3 2 Buffer Ġ{ ĊĠĠĠ Ġreturn ĠUint 3 2 Buffer Impl ( capacity ) Ċ } Ċ Ċ actual Ġfun Ġcreate Float 3 2 Buffer ( capacity : ĠInt ): ĠFloat 3 2 Buffer Ġ{ ĊĠĠĠ Ġreturn ĠFloat 3 2 Buffer Impl ( capacity ) Ċ } Ċ Ċ actual Ġfun Ġcreate Mixed Buffer ( capacity : ĠInt ): ĠM ixed Buffer Ġ{ ĊĠĠĠ Ġreturn ĠM ixed Buffer Impl ( capacity ) Ċ } Ċ