package Ġcom . ge ek be ast . hazelcast . serializers Ċ Ċ import Ġcom . hazelcast . nio . Object Data Input Ċ import Ġcom . hazelcast . nio . Object Data Output Ċ import Ġorg . apache . commons . lang 3 . Random Utils Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ import Ġjava . util . concurrent . Concurrent Map Ċ Ċ abstract Ġclass ĠAbstract Enum Serializer < T : ĠEnum < T >> Ġ: ĠTest able Self Register ing Stream Serializer < T > Ġ{ ĊĊĠĠĠ Ġprotected Ġval Ġenum Array Ġ= Ġenum Cache . get Or Put ( clazz Ġ) Ġ{ Ġ-> ĊĠĠĠĠĠĠĠ Ġthis . clazz . enum Constants Ġas ĠArray < Enum <* >> ĊĠĠĠ Ġ} Ġas ĠArray < T > ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġenum Cache : ĠConcurrent Map < Class <* >, ĠArray < Enum <* >>> Ġ= ĠConcurrent HashMap () ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġserialize ( out : ĠObject Data Output , Ġ` object `: ĠEnum <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . writeInt (` object `. ordinal ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< K : ĠEnum < K >> Ġdeserialize ( target Class : ĠClass < out ĠK >, Ġ` in `: ĠObject Data Input ): ĠK Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġord Ġ= Ġ` in `. readInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( enum Cache . get Or Put ( target Class Ġ) Ġ{ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Class . enum Constants Ġas ĠArray < Enum <* >> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) [ ord ] Ġas ĠK ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( out : ĠObject Data Output , Ġ` object `: ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġserialize ( out , Ġ` object `) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread (` in `: ĠObject Data Input ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġenum Array [` in `. readInt ()] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate Test Value (): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġenum Array [ Random Utils . nextInt ( 0 , Ġenum Array . size )] ĊĠĠĠ Ġ} Ċ } Ċ