package Ġmb . pie . store . l mdb Ċ Ċ import Ġmb . pie . api . Logger Ċ import Ġjava . io .* Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . security . Message Digest Ċ import Ġjava . util .* ĊĊ Ċ @ Suppress (" NOTH ING _ TO _ INLINE ") Ċ inline Ġfun Ġ< T Ġ: ĠSerializable ?> ĠT . serialize (): ĠByteArray Ġ{ ĊĠ ĠByteArrayOutputStream (). use Ġ{ ĊĠĠĠ ĠObject OutputStream ( it ). use Ġ{ ĊĠĠĠĠĠ Ġit . write Object ( this ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠOP TO : Ġcopies Ġbytes , Ġnot Ġefficient ĊĠĠĠ Ġreturn Ġit . toByteArray () ĊĠ Ġ} Ċ } Ċ Ċ @ Suppress (" NOTH ING _ TO _ INLINE ") Ċ inline Ġfun ĠByteArray . hash (): ĠByteArray Ġ{ ĊĠ Ġval Ġdigest Ġ= ĠMessage Digest . getInstance (" SHA - 1 ") ĊĠ Ġreturn Ġdigest . digest ( this ) Ċ } Ċ Ċ @ Suppress (" NOTH ING _ TO _ INLINE ") Ċ inline Ġfun Ġ< T Ġ: ĠSerializable ?> ĠT . serialize And Hash (): ĠSerialized And Has hed Ġ{ ĊĠ Ġval Ġserialized Ġ= Ġthis . serialize () ĊĠ Ġval Ġhashed Ġ= Ġserialized . hash () ĊĠ Ġreturn ĠSerialized And Has hed ( serialized , Ġhashed ) Ċ } Ċ Ċ data Ġclass ĠSerialized And Has hed ( val Ġserialized : ĠByteArray , Ġval Ġhashed : ĠByteArray ) Ġ{ ĊĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠ Ġif ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠ Ġif ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĊĠĠĠ Ġother Ġas ĠSerialized And Has hed ĊĊĠĠĠ Ġif (! Arrays . equals ( serialized , Ġother . serialized )) Ġreturn Ġfalse ĊĠĠĠ Ġif (! Arrays . equals ( hashed , Ġother . hashed )) Ġreturn Ġfalse ĊĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġresult Ġ= ĠArrays . hashCode ( serialized ) ĊĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ ĠArrays . hashCode ( hashed ) ĊĠĠĠ Ġreturn Ġresult ĊĠ Ġ} Ċ } ĊĊ Ċ fun Ġ< T Ġ: ĠSerializable ?> ĠBuf . deserialize ( logger : ĠLogger ): ĠDeserial ized < T > Ġ{ ĊĠ ĠByteBuffer Back ed InputStream ( this ). use Ġ{ ĊĠĠĠ ĠObject InputStream ( it ). use Ġ{ ĊĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġval Ġdeserialized Ġ= Ġit . read Object () Ġas ĠT ĊĠĠĠĠĠĠĠ ĠDeserial ized ( de serialized ) ĊĠĠĠĠĠ Ġ} Ġcatch ( e : ĠClass NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . error (" Deserialization Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠ ĠDeserial ized < T >() ĊĠĠĠĠĠ Ġ} Ġcatch ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . error (" Deserialization Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠ ĠDeserial ized < T >() ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠDeserial ized < out ĠR Ġ: ĠSerializable ? >( val Ġdeserialized : ĠR , Ġval Ġfailed : ĠBoolean ) Ġ{ ĊĠ Ġconstructor ( de serialized : ĠR ) Ġ: Ġthis ( de serialized , Ġfalse ) ĊĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠ Ġconstructor () Ġ: Ġthis ( null Ġas ĠR , Ġtrue ) Ċ } Ċ Ċ @ Suppress (" NOTH ING _ TO _ INLINE ") Ċ inline Ġfun Ġ< R Ġ: ĠSerializable ?> ĠDeserial ized < R > ?. orElse ( default : ĠR ): ĠR Ġ{ ĊĠ Ġreturn Ġif ( this Ġ== Ġnull Ġ|| Ġthis . failed ) Ġ{ ĊĠĠĠ Ġdefault ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġthis . de serialized ĊĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġ< R Ġ: ĠSerializable ?, ĠRR > ĠDeserial ized < R > ?. map OrElse ( default : ĠRR , Ġfunc : Ġ( R ) Ġ-> ĠRR ): ĠRR Ġ{ ĊĠ Ġreturn Ġif ( this Ġ== Ġnull Ġ|| Ġthis . failed ) Ġ{ ĊĠĠĠ Ġdefault ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġfunc ( this . de serialized ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠByteBuffer Back ed InputStream ( private Ġval Ġbuf : ĠByteBuffer ) Ġ: ĠInputStream () Ġ{ ĊĠ Ġ@ Throws ( IOException :: class ) ĊĠ Ġoverride Ġfun Ġread (): ĠInt Ġ{ ĊĠĠĠ Ġif (! buf . has Remaining ()) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġbuf . get (). toInt () Ġand Ġ 0 xFF ĊĠ Ġ} ĊĊĠ Ġ@ Throws ( IOException :: class ) ĊĠ Ġoverride Ġfun Ġread ( bytes : ĠByteArray , Ġoffset : ĠInt , Ġlength : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġif (! buf . has Remaining ()) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġmin Length Ġ= ĠMath . min ( length , Ġbuf . remaining ()) ĊĠĠĠ Ġbuf . get ( bytes , Ġoffset , Ġmin Length ) ĊĠĠĠ Ġreturn Ġmin Length ĊĠ Ġ} Ċ } ĊĊĊ