package Ġno . n jo h . pulse engine . data Ċ Ċ class ĠArray 2 D Ġ< T > Ġ( ĊĠĠĠ Ġval Ġwidth : ĠInt , ĊĠĠĠ Ġval Ġheight : ĠInt , ĊĠĠĠ Ġval Ġinit : Ġ( x : ĠInt , Ġy : ĠInt ) Ġ-> ĠT ? Ġ= Ġ{ Ġ_, Ġ_ Ġ-> Ġnull Ġ} Ċ ): ĠIterable < T > Ġ{ ĊĠĠĠ Ġval Ġsize Ġ= Ġwidth Ġ* Ġheight ĊĊĠĠĠ Ġprivate Ġval Ġdata : ĠArray < Any ?> Ġ= ĠArray ( size ) Ġ{ Ġi Ġ-> Ġinit . invoke ( i Ġ% Ġwidth , Ġi Ġ/ Ġwidth ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġiterator Ġ= ĠArray 2 DI ter ator () ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoperator Ġfun Ġget ( index : ĠInt ): ĠT Ġ= Ġdata [ index ] Ġas ĠT ĊĠĠĠ Ġoperator Ġfun Ġset ( index : ĠInt , Ġvalue : ĠT ) Ġ{ Ġdata [ index ] Ġ= Ġvalue Ġ} ĊĠĠĠ Ġoperator Ġfun Ġget ( x : ĠInt , Ġy : ĠInt ): ĠT Ġ= Ġdata [ y Ġ* Ġwidth Ġ+ Ġx ] Ġas ĠT ĊĠĠĠ Ġoperator Ġfun Ġset ( x : ĠInt , Ġy : ĠInt , Ġvalue : ĠT ) Ġ{ Ġdata [ y Ġ* Ġwidth Ġ+ Ġx ] Ġ= Ġvalue Ġ} ĊĠĠĠ Ġoverride Ġfun Ġiterator (): ĠIterator < T > Ġ= Ġiterator . apply Ġ{ Ġindex Ġ= Ġ 0 Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠArray 2 DI ter ator ( var Ġindex : ĠInt Ġ= Ġ 0 ) Ġ: ĠIterator < T > ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhas Next (): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ< Ġwidth Ġ* Ġheight ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnext (): ĠT Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ index ++] Ġas ĠT ĊĠĠĠ Ġ} Ċ }