diff options
author | Ondřej Surý <ondrej@sury.org> | 2011-02-18 09:50:58 +0100 |
---|---|---|
committer | Ondřej Surý <ondrej@sury.org> | 2011-02-18 09:50:58 +0100 |
commit | c072558b90f1bbedc2022b0f30c8b1ac4712538e (patch) | |
tree | 67767591619e4bd8111fb05fac185cde94fb7378 /src/pkg/container | |
parent | 5859517b767c99749a45651c15d4bae5520ebae8 (diff) | |
download | golang-c072558b90f1bbedc2022b0f30c8b1ac4712538e.tar.gz |
Imported Upstream version 2011.02.15upstream/2011.02.15
Diffstat (limited to 'src/pkg/container')
-rw-r--r-- | src/pkg/container/ring/ring.go | 19 | ||||
-rw-r--r-- | src/pkg/container/ring/ring_test.go | 14 |
2 files changed, 10 insertions, 23 deletions
diff --git a/src/pkg/container/ring/ring.go b/src/pkg/container/ring/ring.go index 335afbc3c..5925164e9 100644 --- a/src/pkg/container/ring/ring.go +++ b/src/pkg/container/ring/ring.go @@ -138,16 +138,13 @@ func (r *Ring) Len() int { } -func (r *Ring) Iter() <-chan interface{} { - c := make(chan interface{}) - go func() { - if r != nil { - c <- r.Value - for p := r.Next(); p != r; p = p.next { - c <- p.Value - } +// Do calls function f on each element of the ring, in forward order. +// The behavior of Do is undefined if f changes *r. +func (r *Ring) Do(f func(interface{})) { + if r != nil { + f(r.Value) + for p := r.Next(); p != r; p = p.next { + f(p.Value) } - close(c) - }() - return c + } } diff --git a/src/pkg/container/ring/ring_test.go b/src/pkg/container/ring/ring_test.go index ee3c41128..778c083d0 100644 --- a/src/pkg/container/ring/ring_test.go +++ b/src/pkg/container/ring/ring_test.go @@ -35,12 +35,12 @@ func verify(t *testing.T, r *Ring, N int, sum int) { // iteration n = 0 s := 0 - for p := range r.Iter() { + r.Do(func(p interface{}) { n++ if p != nil { s += p.(int) } - } + }) if n != N { t.Errorf("number of forward iterations == %d; expected %d", n, N) } @@ -128,16 +128,6 @@ func makeN(n int) *Ring { return r } - -func sum(r *Ring) int { - s := 0 - for p := range r.Iter() { - s += p.(int) - } - return s -} - - func sumN(n int) int { return (n*n + n) / 2 } |