package Ġsoftware . one piece . limits . spec Ċ Ċ class ĠCoordinate Spec ( private Ġval ĠprojectName : ĠString , Ġprivate Ġval ĠtypeName : ĠString , Ġval Ġlimit : ĠInt , Ġval Ġliteral Prefix : ĠString ) Ġ: ĠCoordinates Spec Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠprojectName () Ġ= ĠprojectName ĊĠĠĠ Ġoverride Ġfun ĠtypeName () Ġ= ĠtypeName ĊĠĠĠ Ġoverride Ġfun Ġgenerate Size Fields () Ġ= Ġ" const Ġval Ġsize Ġ= Ġ$ limit " ĊĠĠĠ Ġoverride Ġfun Ġgenerate Size Fields Sum () Ġ= Ġ Ġ" size " ĊĠĠĠ Ġoverride Ġfun Ġgenerate Index Iterator Entry () Ġ= Ġ Ġ"$ typeName . of ( idx )" ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate ( packageName : ĠString ): ĠString Ġ= Ġ""" ĊĠĠĠĠĠĠĠ Ġpackage Ġ$ packageName . entities .$ projectName ĊĊĠĠĠĠĠĠĠ Ġ@ kotlin x . serialization . Serializable ĠĊĠĠĠĠĠĠĠ Ġenum Ġclass Ġ$ typeName Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ${ ( 0 Ġuntil Ġlimit ). join ToString Ġ{ Ġliteral Prefix Ġ+ Ġit Ġ}}; ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġof ( un limited Int : ĠInt ): Ġ$ typeName Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( un limited Int Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ${ literal Prefix } 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( un limited Int Ġ> Ġ${ limit Ġ- Ġ 1 }) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ$ literal Prefix ${ limit Ġ- Ġ 1 } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalues [ un limited Int ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġof ( string : ĠString ) Ġ= Ġof ( string . toInt ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġzero Ġ= Ġ${ literal Prefix } 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= Ġvalues (). asList () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġsave Value ( ordinal : ĠInt ) Ġ= Ġvalues [ kotlin . math . max ( 0 , Ġkotlin . math . min (${ limit Ġ- Ġ 1 }, Ġordinal ))] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġordinal . toString (). pad Start ( 2 , Ġ' 0 ') ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperator Ġfun Ġplus ( other : Ġ$ typeName ) Ġ= Ġsave Value ( ordinal Ġ+ Ġother . ordinal ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperator Ġfun Ġminus ( other : Ġ$ typeName ) Ġ= Ġsave Value ( ordinal Ġ- Ġother . ordinal ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperator Ġfun Ġtimes ( other : Ġ$ typeName ) Ġ= Ġsave Value ( ordinal Ġ* Ġother . ordinal ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperator Ġfun Ġdiv ( other : Ġ$ typeName ) Ġ= Ġsave Value ( ordinal Ġ/ Ġother . ordinal ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġdata Hash () Ġ= Ġordinal ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠInt . to $ typeName () Ġ= Ġ$ typeName . save Value ( this ) ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊ Ċ }