package Ġcom . ve o sp s . game . cache . types Ċ Ċ open Ġclass ĠType List < T Ġ: ĠCache Type >( ĊĠĠĠ Ġprivate Ġval Ġtypes : ĠMutable Map < Int , ĠT > Ġ= Ġmutable Map Of () Ċ ) Ġ: ĠIterable < T > Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġmax Id Ġ= Ġ- 1 ĊĊĠĠĠ Ġval Ġsize : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmax Id Ġ+ Ġ 1 ĊĊĠĠĠ Ġfun Ġadd ( type : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( types . containsKey ( type . id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Config Ġtype Ġat Ġindex Ġhas Ġalready Ġbeen Ġset Ġ( index =${ type . id }, Ġtype =${ type :: class . simple Name }). ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis [ type . id ] Ġ= Ġtype ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget OrNull ( id : ĠInt ): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtypes [ id ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġget ( id : ĠInt ): ĠT Ġ= Ġget OrNull ( id ) Ġ?: Ġerror (" Config Ġtype Ġdoes Ġnot Ġexist Ġ( id =$ id ). ") ĊĊĠĠĠ Ġoperator Ġfun Ġset ( id : ĠInt , Ġtype : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmax Id Ġ= Ġmax Id . coerce At Least ( id ) ĊĠĠĠĠĠĠĠ Ġtypes [ id ] Ġ= Ġtype ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcontains Key ( key : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtypes . containsKey ( key ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcontains Value ( value : ĠT ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtypes . contains Value ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġiterator (): ĠIterator < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtypes . values . iterator () ĊĠĠĠ Ġ} Ċ }