package Ġio . fde ity link . util Ċ Ċ import Ġjava . util . Enum Set Ċ Ċ import Ġkotlin . reflect . K Class Ċ Ċ // TODO : ĠMake Ġthe Ġfollowing Ġtwo Ġmethods Ġregular , Ġnon - extension Ġmethods ? Ċ fun Ġ< E > ĠEnum Set < E >. encoded (): ĠLong Ġwhere ĠE : ĠEnum < E >, ĠE : ĠSafe Enum < E > Ġ{ ĊĠĠĠ Ġvar Ġflags Ġ= Ġ 0 L ĊĠĠĠ Ġfor Ġ( e Ġin Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠ Ġflags Ġ= Ġflags Ġor Ġ( 1 L Ġshl Ġe . ordinal ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġflags Ċ } Ċ Ċ fun Ġ< E > ĠLong . decoded ( enum Class : ĠK Class < E >): ĠEnum Set < E > Ġwhere ĠE : ĠEnum < E >, ĠE : ĠSafe Enum < E > Ġ{ ĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠAss umes Ġat Ġmost Ġ 6 4 Ġvalues Ġin Ġthe Ġenum Ġclass Ġ( 6 4 Ġbits Ġin Ġa Ġlong ) ĊĠĠĠĠ Ġ* Ġhttp :// stackoverflow . com / a / 2 1 9 9 4 8 6 ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġ// TODO : ĠThrow Ġexception Ġif Ġthere Ġare Ġmore Ġthan Ġ 6 4 Ġvalues ? ĊĊĠĠĠ Ġval Ġset Ġ= ĠEnum Set . none Of ( enum Class . java ) ĊĠĠĠ Ġvar Ġordinal Ġ= Ġ 0 ĊĊĠĠĠ Ġval Ġconstants : ĠArray < out ĠE > Ġ= Ġenum Class . java . enum Constants ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠBit shift Ġthrough Ġevery Ġconstant Ġin Ġthe Ġenum ĊĠĠĠĠ Ġ* Ġand Ġcheck Ġthe Ġflag Ġin Ġthe Ġencoded ĠLong . ĠIf Ġit ĊĠĠĠĠ Ġ* Ġis Ġset , Ġthen Ġadd Ġthe Ġenum Ġconstant Ġto Ġthe Ġset ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġ// TODO : ĠPossible Ġto Ġdo Ġthis Ġas Ġa Ġfor Ġloop ? ĊĠĠĠ Ġvar Ġi Ġ= Ġ 1 L ĊĠĠĠ Ġwhile Ġ( i Ġ!= Ġ 0 L Ġ&& Ġordinal Ġ< Ġconstants . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( 0 L Ġ!= Ġ( i Ġand Ġthis )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . add ( constants [ ordinal ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġi Ġ= Ġi Ġshl Ġ 1 ĊĠĠĠĠĠĠĠ Ġordinal ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġset Ċ }