package Ġm ary k . core . clock Ċ Ċ import Ġm ary k . core . extensions . bytes . init UL ong Ċ import Ġm ary k . core . extensions . bytes . write Bytes Ċ import Ġm ary k . core . properties . definitions . Is Storage Bytes En codable Ċ import Ġm ary k . lib . time . Instant Ċ import Ġkotlin . jvm . Jvm Inline Ċ Ċ private Ġconst Ġval ĠLOG ICAL _ BYTE _ SIZE Ġ= Ġ 2 0 Ċ Ċ private Ġconst Ġval ĠLOG ICAL _ MASK Ġ= Ġ 0 xFFFF Fu L Ċ Ċ /** Ċ Ġ* ĠHy brid ĠLogical ĠClock Ġvalue . Ċ Ġ* Ċ Ġ* ĠEn codes Ġboth Ġa Ġphysical Ġclock Ġin Ġthe Ġupper Ġ 4 4 Ġbits Ġand Ġa Ġlogic Ġclock Ġin Ġthe Ġlower Ċ Ġ* Ġ 2 0 Ġbits . ĠThis Ġallows Ġfor Ġtimestamps Ġuntil Ġthe Ġyear Ġ 2 5 2 7 Ġand Ġa Ġlogical Ġclock Ġof Ġover Ċ Ġ* Ġ 1 Ġmillion Ġticks . Ċ Ġ* Ċ Ġ* ĠSee Ġoriginal Ġproposal Ġfor Ġmore Ġdetails : Ċ Ġ* Ġhttps :// c se . buff alo . edu / tech - reports / 2 0 1 4 - 0 4 . pdf Ċ Ġ*/ Ċ @ Jvm Inline Ċ value Ġclass ĠH LC Ġconstructor ( ĊĠĠĠ Ġval Ġtimestamp : ĠU Long Ċ ) Ġ{ ĊĠĠĠ Ġ/** ĠCreate ĠH LC Ġby Ġsetting Ġ[ physical ] Ġand Ġ[ logical ] Ġtime Ġspecifically Ġ*/ ĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġphysical : ĠU Long , ĊĠĠĠĠĠĠĠ Ġlogical : ĠUInt ĊĠĠĠ Ġ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġphysical . sh l ( LOG ICAL _ BYTE _ SIZE ) Ġ+ Ġlogical ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĠCreate ĠH LC Ġfor Ġthe Ġcurrent Ġtime Ġ*/ ĊĠĠĠ Ġconstructor () Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġphysical Ġ= ĠInstant . getCurrent Epoch TimeIn Millis (). to UL ong (), ĊĠĠĠĠĠĠĠ Ġlogical Ġ= Ġ 0 u ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĠIncrement Ġthe Ġlogical Ġclock Ġby Ġ 1 Ġ*/ ĊĠĠĠ Ġfun Ġincrement () Ġ= ĊĠĠĠĠĠĠĠ ĠH LC ( this . timestamp Ġ+ Ġ 1 u ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalculate Ġthe Ġcurrent Ġmost Ġrecent Ġtimestamp . ĠIf Ġit Ġwas Ġa Ġgiven Ġtimestamp Ġhigher Ġlogical Ġclock Ġby Ġ 1 . ĊĠĠĠĠ Ġ* ĠBy Ġdefault Ġit Ġwill Ġget Ġa Ġnew Ġtime Ġby Ġ` Instant . getCurrent Epoch TimeIn Millis ()`, Ġoverride Ġ[ new Time Creator ] ĊĠĠĠĠ Ġ* Ġfor Ġcustom Ġnew Ġtime . ĠUseful Ġfor Ġtests Ġor Ġcustom Ġclock s . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcalculate Max TimeStamp ( other : ĠH LC ? Ġ= Ġnull , Ġnew Time Creator : Ġ() Ġ-> ĠH LC Ġ= Ġ:: H LC ) Ġ= ĠH LC ( ĊĠĠĠĠĠĠĠ Ġmax Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Of ( this . timestamp , Ġother . timestamp ) Ġ+ Ġ 1 u ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthis . timestamp Ġ+ Ġ 1 u , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Time Creator (). timestamp ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĠGet Ġthe Ġphysical Ġtime Ġof Ġthis ĠH LC Ġ*/ ĊĠĠĠ Ġfun Ġto Physical Unix Time (): ĠU Long Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtimestamp . shr ( LOG ICAL _ BYTE _ SIZE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠGet Ġthe Ġlogical Ġtime Ġof Ġthis ĠH LC Ġ*/ ĊĠĠĠ Ġfun Ġto Logical Time () Ġ= ĊĠĠĠĠĠĠĠ Ġtimestamp . and ( LOG ICAL _ MASK ). to UInt () ĊĊĠĠĠ Ġ/** ĠCompare Ġagainst Ġ[ other ] ĠH LC Ġand Ġreturn Ġdifference Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġcompare To ( other : ĠH LC ) Ġ= ĊĠĠĠĠĠĠĠ Ġthis . timestamp . compareTo ( other . timestamp ) ĊĊĠĠĠ Ġ/** ĠCompare Ġagainst Ġ[ other ] Ġtimestamps Ġand Ġreturn Ġdifference Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġcompare To ( other : ĠU Long ) Ġ= ĊĠĠĠĠĠĠĠ Ġthis . timestamp . compareTo ( other ) ĊĊĠĠĠ Ġcompanion Ġobject : ĠIs Storage Bytes En codable < H LC > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġread Storage Bytes ( length : ĠInt , Ġreader : Ġ() Ġ-> ĠByte ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH LC ( init UL ong ( reader )) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcalculate Storage Byte Length ( value : ĠH LC ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠU Long . SIZE _ BYTES ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwrite Storage Bytes ( value : ĠH LC , Ġwriter : Ġ( byte : ĠByte ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . timestamp . write Bytes ( writer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ