@cryptotaxi247 / kubo / commits / ae79ac04d

feat(util/delay) add Delay

License: MIT Signed-off-by: Brian Tiger Chow <brian@perfmode.com>

Brian Tiger Chow committed Dec 12, 2014 at 22:11 UTC ae79ac04d3ae682fc56a269c4eb527a572aecabd
1 file changed +39
util/delay/delay.go new
+39
@@ -0,0 +1,39 @@
1 +package delay
2 +
3 +import (
4 + "sync"
5 + "time"
6 +)
7 +
8 +// Delay makes it easy to add (threadsafe) configurable delays to other
9 +// objects.
10 +type D interface {
11 + Set(time.Duration) time.Duration
12 + Wait()
13 +}
14 +
15 +// Fixed returns a delay with fixed latency
16 +func Fixed(t time.Duration) D {
17 + return &delay{t: t}
18 +}
19 +
20 +type delay struct {
21 + l sync.RWMutex
22 + t time.Duration
23 +}
24 +
25 +// TODO func Variable(time.Duration) D returns a delay with probablistic latency
26 +
27 +func (d *delay) Set(t time.Duration) time.Duration {
28 + d.l.Lock()
29 + defer d.l.Unlock()
30 + prev := d.t
31 + d.t = t
32 + return prev
33 +}
34 +
35 +func (d *delay) Wait() {
36 + d.l.RLock()
37 + defer d.l.RUnlock()
38 + time.Sleep(d.t)
39 +}