aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/container
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/container')
-rw-r--r--libgo/go/container/ring/ring.go19
-rw-r--r--libgo/go/container/ring/ring_test.go14
2 files changed, 10 insertions, 23 deletions
diff --git a/libgo/go/container/ring/ring.go b/libgo/go/container/ring/ring.go
index 335afbc..5925164 100644
--- a/libgo/go/container/ring/ring.go
+++ b/libgo/go/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/libgo/go/container/ring/ring_test.go b/libgo/go/container/ring/ring_test.go
index ee3c411..778c083 100644
--- a/libgo/go/container/ring/ring_test.go
+++ b/libgo/go/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 }