/* Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠCopyright Ġ 2 0 1 8 ĠControl - J ĠP ty ĠLtd Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* Ġ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* Ġ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* Ġ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ġ Ġ* Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . control j . kom odo Ċ Ċ import Ġorg . th reet en . bp . Instant Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . nio . Byte Order Ċ Ċ /** Ċ Ġ* ĠCopyright Ġ( C ) ĠControl - J ĠP ty . ĠLtd . ĠA CN Ġ 1 0 3 5 9 4 1 9 0 Ċ Ġ* Ċ Ġ* ĠUser : Ġc ly de Ċ Ġ* ĠDate : Ġ 3 0 / 5 / 1 8 Ċ Ġ* ĠTime : Ġ 1 3 : 0 4 Ċ Ġ* Ċ Ġ* ĠThis Ġclass Ġwraps Ġa Ġkey . ĠConvenience Ġmethods Ġare Ġprovided Ġto Ġwrap Ġsimple Ġstrings Ġand Ġintegers Ċ Ġ* Ċ Ġ*/ Ċ open Ġclass ĠKey Wrapper Ġ{ ĊĠĠĠ Ġval ĠbyteArray : ĠByteArray ĊĊĠĠĠ Ġconstructor ( byteArray : ĠByteArray ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . byteArray Ġ= ĠbyteArray ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( buffer : ĠByteBuffer ) Ġ: Ġthis ( buffer . array ()) ĊĊĠĠĠ Ġconstructor ( string : ĠString ) Ġ: Ġthis ( string . toByteArray ()) ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġother Ġis ĠKey Wrapper Ġ&& ĠbyteArray . isNotEmpty () Ġ&& ĠbyteArray . content Equals ( other . byteArray ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠbyteArray . sum () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIs Ġthis Ġvalue Ġa Ġprefix Ġof Ġthe Ġcompared Ġkey ? ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġfun Ġis Prefix Of ( other : ĠByteArray ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( other . size Ġ< ĠbyteArray . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ ĠbyteArray . forEach Indexed Ġ{ Ġindex , Ġbyte Ġ-> Ġif Ġ( other [ index ] Ġ!= Ġbyte ) Ġreturn Ġfalse Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Prefix Of ( other : ĠKey Wrapper ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġis Prefix Of ( other . byteArray ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCompare Ġone Ġkey Ġto Ġanother . ĠReturn Ġ< 0 , Ġ 0 Ġor Ġ> 0 Ġdepending Ġon ĊĠĠĠĠ Ġ* Ġwhether Ġthis Ġobject Ġis Ġ< , Ġ= Ġor Ġ> Ġthe Ġother Ġrespectively ĊĠĠĠĠ Ġ* Ġ@ param Ġother ĠThe Ġother Ġkey Ġto Ġcompare Ġto ĊĠĠĠĠ Ġ* Ġ@ return Ġ- 1 , Ġ 0 Ġor Ġ 1 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġcompare To ( other : ĠByteArray ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠ Ġreturn ĠbyteArray . compareTo ( other ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCompare Ġone Ġkey Ġto Ġanother . ĠReturn Ġ< 0 , Ġ 0 Ġor Ġ> 0 Ġdepending Ġon ĊĠĠĠĠ Ġ* Ġwhether Ġthis Ġobject Ġis Ġ< , Ġ= Ġor Ġ> Ġthe Ġother Ġrespectively ĊĠĠĠĠ Ġ* Ġ@ param Ġother ĠA ĠKey Wrapper Ġcontaining Ġthe Ġother Ġkey Ġto Ġcompare Ġto ĊĠĠĠĠ Ġ* Ġ@ return Ġ- 1 , Ġ 0 Ġor Ġ 1 ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġfun Ġcompare To ( other : ĠKey Wrapper ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ== ĠSTART ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ== ĠEND ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġreturn Ġcompare To ( other . byteArray ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreate Ġa Ġkey Ġfrom Ġa Ġnumber Ġof Ġprimitive Ġobjects ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġkeys Ġ ĠThe Ġkeys Ġto Ġbe Ġused . ĠWill Ġbe Ġstored Ġin Ġbig - endian Ġformat , Ġin Ġthe Ġgiven Ġorder , Ġso ĊĠĠĠĠĠĠĠĠ Ġ* Ġ Ġthe Ġfirst Ġkey Ġis Ġthe Ġmost Ġsignificant . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġfun Ġof ( var arg Ġkeys : ĠAny ): ĠKey Wrapper Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( keys . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSTART ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġkeys . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInt Ġ-> ĠInt . SIZE _ BYTES ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLong , Ġis ĠInstant Ġ-> ĠLong . SIZE _ BYTES ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġit . toByteArray (). size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Illegal Ġkey Ġclass Ġ${ it :: class }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. sum () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteBuffer . allocate ( size ). order ( Byte Order . BIG _ ENDIAN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeys . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInt Ġ-> Ġbuffer . put Int ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLong Ġ-> Ġbuffer . put Long ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInstant Ġ-> Ġbuffer . put Long ( it . to Epoch Milli ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġbuffer . put ( it . toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKey Wrapper ( buffer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSentinel Ġvalues Ġused Ġto Ġrepresent Ġthe Ġstart Ġand Ġend Ġof Ġa ĠKo Map ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġvalue Ġrepresents Ġthe Ġstart Ġof Ġa Ġan Ġindex . ĠIt Ġalways Ġcomp ares Ġas Ġless ĊĠĠĠĠĠĠĠĠ Ġ* Ġthan Ġany Ġother Ġkey Ġexcept Ġitself ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠSTART Ġ= Ġobject Ġ: ĠKey Wrapper ( byte ArrayOf ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠByteArray ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( other Ġ=== ĠbyteArray ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġvalue Ġrepresents Ġthe Ġend Ġof Ġa Ġan Ġindex . ĠIt Ġalways Ġcomp ares Ġas Ġgreater ĊĠĠĠĠĠĠĠĠ Ġ* Ġthan Ġany Ġother Ġkey Ġexcept Ġitself ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠEND Ġ= Ġobject Ġ: ĠKey Wrapper ( byte ArrayOf ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEND Ġis Ġequal Ġto Ġitself , Ġbut Ġbigger Ġthan Ġanything Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠByteArray ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( other Ġ=== ĠbyteArray ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠByteArray . compareTo ( other : ĠByteArray ?): ĠInt Ġ{ ĊĠĠĠ Ġif ( other Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠ ĠforEach Indexed Ġ{ Ġindex , Ġbyte Ġ-> ĊĠĠĠĠĠĠĠ Ġ// Ġif Ġwe Ġare Ġlonger , Ġwe Ġare Ġbigger Ġat Ġthis Ġpoint ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġother . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġob Ġ= Ġother [ index ] ĊĠĠĠĠĠĠĠ Ġif Ġ( ob Ġ!= Ġbyte ) Ġreturn Ġbyte Ġ- Ġob ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// Ġwe Ġare Ġa Ġprefix Ġor Ġequal . ĠSo ... ĊĠĠĠ Ġif Ġ( other . size Ġ> Ġsize ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠ Ġreturn Ġ 0 Ċ } Ċ Ċ fun ĠByteArray ?. equals ( other : ĠByteArray ?): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( this Ġ=== Ġother ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġif Ġ( this Ġ== Ġnull Ġ|| Ġother Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġreturn Ġcontent Equals ( other ) Ċ } Ċ