package Ġch en j ox . util . table . templates Ċ Ċ import Ġch en j ox . util . table . mono .* Ċ Ċ /** Ċ Ġ* ĠA ĠTemplate ĠTable Ġthat Ġrestrict s Ġaccess Ġto Ġthe Ġsetting Ġof Ġcertain Ġfields . Ċ Ġ* Ġits Ġgetters Ġrefer Ġto Ġthe Ġtable Ġas Ġa Ġwhole , Ġwhile Ġthe Ġset ters Ġonly Ġrefer Ġto Ġthe Ġspecified Ġfields Ċ Ġ*/ Ċ public Ġclass ĠColumn Functional Table < E >( ĊĠĠĠ Ġlist : ĠList <( Mono Table Accessor < E >. ( current Col Ġ: ĠInt , Ġcurrent Row Ġ: ĠInt ) Ġ-> ĠE )? >, ĊĠĠĠ Ġdelegate : ĠMutable Functional Mono Table < E >, ĊĠĠĠ Ġprivate Ġval Ġinitializer : Ġ() Ġ-> ĠE Ċ ) Ġ: ĠMutable Row Mono Table < E > Ġby Ġdelegate Ċ { ĊĊĠĠĠ Ġprivate Ġval Ġbacking Table : ĠMutable Functional Mono Table < E > ĊĠĠĠ Ġprivate Ġval Ġfunc Array : ĠArray < Mono Table Accessor < E >. ( current Col Ġ: ĠInt , Ġcurrent Row Ġ: ĠInt ) Ġ-> ĠE > ĊĠĠĠ Ġprivate Ġval Ġfunc In de ces : ĠInt Array ĊĠĠĠ Ġprivate Ġval Ġread Write In de ces : ĠInt Array ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrw I Ġ= ĠMutable List ( 0 ) Ġ{ Ġ 0 Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġf I Ġ= ĠMutable List ( 0 Ġ) Ġ{ Ġ 0 Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ(( i Ġ, e Ġ) Ġin Ġlist . with Index ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( e Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf I . add ( Ġi Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrw I . add ( Ġi Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfunc Array Ġ= Ġlist . filter NotNull (). to Typed Array () ĊĠĠĠĠĠĠĠ Ġfunc In de ces Ġ= Ġf I . to IntArray () ĊĠĠĠĠĠĠĠ Ġread Write In de ces Ġ= Ġrw I . to IntArray () ĊĠĠĠĠĠĠĠ Ġbacking Table Ġ= Ġdelegate ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset ( column : ĠInt , Ġrow : ĠInt , Ġelement : ĠE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbacking Table [ read Write In de ces [ column ], Ġrow ] Ġ= Ġelement ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġfun Ġset Column ( column : ĠInt , Ġnew : ĠList < E >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġbacking Table . get Rows ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbacking Table [ read Write In de ces [ column ], Ġi ] Ġ= Ġnew [ i ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Row ( row : ĠInt , Ġnew : ĠList < E >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( new . size Ġ!= Ġread Write In de ces . size ) Ġthrow ĠIllegalArgumentException (" Size Ġof Ġthe Ġsupplied ĠList Ġdoes Ġnot Ġmatch Ġthe Ġinput Ġsize !") ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġread Write In de ces . indices ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbacking Table [ read Write In de ces [ i ], Ġrow ] Ġ= Ġnew [ i ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Row ( row : ĠInt , Ġnew : ĠList < E >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( new . size Ġ!= Ġread Write In de ces . size ) Ġthrow ĠIllegalArgumentException (" Size Ġof Ġthe Ġsupplied ĠList Ġdoes Ġnot Ġmatch Ġthe Ġinput Ġsize !") ĊĠĠĠĠĠĠĠ Ġval Ġfinal List : ĠList < E > Ġ= ĠList ( Ġread Write In de ces . size + func In de ces . size Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitializer . invoke () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbacking Table . add Row ( row , Ġfinal List ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠNow Ġthe Ġoverride ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġread Write In de ces . indices ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbacking Table [ read Write In de ces [ i ], Ġrow ] Ġ= Ġnew [ i ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġfunctions ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġfunc In de ces . indices ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbacking Table ( func In de ces [ i ], Ġrow , Ġfunc Array [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠImport ant !, Ġbehaviour Ġis Ġvery Ġdifferent Ġhere Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġadd Row ( new : ĠList < E >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . add Row ( back ing Table . get Rows (), Ġnew ) ĊĠĠĠ Ġ} Ċ Ċ }