package Ġcom . hand truth . mc . p aket . fields Ċ Ċ import Ġcom . hand truth . mc . p aket .* Ċ import Ġkotlinx . io . Input Ċ import Ġkotlinx . io . Output Ċ import Ġkotlin . jvm . Jvm Name Ċ Ċ class ĠEnum Codec < T : ĠEnum < T >>( private Ġval Ġall : ĠArray < T >) Ġ: ĠCodec < T > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġmeasure ( value : ĠT ) Ġ= Ġsize Var Int ( value . ordinal ) ĊĠĠĠ Ġoverride Ġfun Ġread ( input : ĠInput , Ġold : ĠT ?) Ġ= Ġall [ read Var Int ( input )] ĊĠĠĠ Ġoverride Ġfun Ġwrite ( output : ĠOutput , Ġvalue : ĠT ) Ġ= Ġwrite Var Int ( output , Ġvalue . ordinal ) ĊĊĠĠĠ Ġval Ġvalues Ġget () Ġ= Ġall . as Sequence () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinline Ġoperator Ġfun Ġ< re ified ĠE : ĠEnum < E >> Ġinvoke () Ġ= ĠEnum Codec ( enum Values < E >()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠEnum List Codec < T : ĠEnum < T >>( values : ĠArray < T >) Ġ: ĠList Codec < T >( Enum Codec ( values )) Ġ{ ĊĠĠĠ Ġval Ġvalues Ġget () Ġ= Ġ( inner Ġas ĠEnum Codec < T >). values ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinline Ġoperator Ġfun Ġ< re ified ĠE : ĠEnum < E >> Ġinvoke () Ġ= ĠEnum List Codec ( enum Values < E >()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠEnum Field < E : ĠEnum < E >>( initial : ĠE , Ġvalues : ĠArray < E >) Ġ: ĠField < E >( Enum Codec ( values ), Ġinitial ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinline Ġoperator Ġfun Ġ< re ified ĠE : ĠEnum < E >> Ġinvoke ( initial : ĠE ) Ġ= ĠEnum Field ( initial , Ġenum Values ()) ĊĠĠĠ Ġ} Ċ } Ċ class ĠEnum List Field < E : ĠEnum < E >>( initial : ĠMutable List < E >, Ġvalues : ĠArray < E >) Ġ: ĊĠĠĠ ĠList Field < E >( Enum List Codec ( values ), Ġinitial ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinline Ġoperator Ġfun Ġ< re ified ĠE : ĠEnum < E >> Ġinvoke ( initial : ĠMutable List < E >) Ġ= ĠEnum List Field ( initial , Ġenum Values ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠE : ĠEnum < E >> ĠP aket . enum ( initial : ĠE Ġ= Ġenum Values < E >() [ 0 ]) Ġ= Ġfield ( Enum Field ( initial )) Ċ inline Ġfun Ġ< re ified ĠE : ĠEnum < E >> ĠP aket . listOf Enum ( initial : ĠMutable List < E > Ġ= Ġmutable ListOf ()) Ġ= ĊĠĠĠ Ġfield ( Enum List Field ( initial , Ġenum Values ())) Ċ @ Jvm Name (" listOf Enum RO ") Ċ inline Ġfun Ġ< re ified ĠE : ĠEnum < E >> ĠP aket . listOf Enum ( initial : ĠList < E >) Ġ= ĠlistOf Enum ( initial . to Mutable List ()) Ċ