date_or_now = date_or_now ? new Date()
if date_or_now.sec?
now = date_or_now
else
now = date_to_now(date_or_now)
if @last?
if @last.sec is now.sec
if @last.nsec is now.nsec
now.nsec++
if now.nsec >= one_billion
now.nsec = 0
++now.nsec
else
now.nsec = @last.nsec + 1
@last = now
return {sec:@last.sec, nsec:@last.nsec}
asDate: () ->
return new Date(@asMsec())
asMsec: () ->
now = @now()
return (now.sec * 1000) + ((now.nsec / one_million) | 0)
class ControlledClock extends Clock
constructor: (date) ->
if not date?
throw new Error "ControlledClock(initial_date) requires an initial Date()"
@last = date_to_now(date)
now: (date_or_now) ->
super(@last)
(exports ? this).ControlledClock = ControlledClock
(exports ? this).Clock = Clock
(exports ? this).date_to_now = date_to_now
(exports ? this).one_million = one_million