diff --git a/src/pkg/container/vector/Makefile b/src/pkg/container/vector/Makefile index ffd8937a789..c456c6a6c13 100644 --- a/src/pkg/container/vector/Makefile +++ b/src/pkg/container/vector/Makefile @@ -44,6 +44,7 @@ generate: vector.go vector_test.go | gofmt -r='TestDo -> TestIntDo'\ | gofmt -r='TestIter -> TestIntIter'\ | gofmt -r='TestVectorData -> TestIntVectorData'\ + | gofmt -r='interface{} -> int'\ > intvector_test.go\ < vector_test.go cat\ @@ -66,4 +67,5 @@ generate: vector.go vector_test.go | gofmt -r='TestDo -> TestStrDo'\ | gofmt -r='TestIter -> TestStrIter'\ | gofmt -r='TestVectorData -> TestStrVectorData'\ + | gofmt -r='interface{} -> string'\ > stringvector_test.go diff --git a/src/pkg/container/vector/defs.go b/src/pkg/container/vector/defs.go index 7502865c9cc..a2febb6deeb 100644 --- a/src/pkg/container/vector/defs.go +++ b/src/pkg/container/vector/defs.go @@ -49,30 +49,3 @@ func (p *IntVector) Less(i, j int) bool { return (*p)[i] < (*p)[j] } // Less returns a boolean denoting whether the i'th element is less than the j'th element. func (p *StringVector) Less(i, j int) bool { return (*p)[i] < (*p)[j] } - - -// Do calls function f for each element of the vector, in order. -// The behavior of Do is undefined if f changes *p. -func (p *Vector) Do(f func(elem interface{})) { - for _, e := range *p { - f(e) - } -} - - -// Do calls function f for each element of the vector, in order. -// The behavior of Do is undefined if f changes *p. -func (p *IntVector) Do(f func(elem int)) { - for _, e := range *p { - f(e) - } -} - - -// Do calls function f for each element of the vector, in order. -// The behavior of Do is undefined if f changes *p. -func (p *StringVector) Do(f func(elem string)) { - for _, e := range *p { - f(e) - } -} diff --git a/src/pkg/container/vector/intvector.go b/src/pkg/container/vector/intvector.go index 708108b1839..6aad358e3d3 100644 --- a/src/pkg/container/vector/intvector.go +++ b/src/pkg/container/vector/intvector.go @@ -214,3 +214,12 @@ func (p *IntVector) Iter() <-chan int { go p.iterate(c) return c } + + +// Do calls function f for each element of the vector, in order. +// The behavior of Do is undefined if f changes *p. +func (p *IntVector) Do(f func(elem int)) { + for _, e := range *p { + f(e) + } +} diff --git a/src/pkg/container/vector/intvector_test.go b/src/pkg/container/vector/intvector_test.go index b8900478b25..c80dd52cca0 100644 --- a/src/pkg/container/vector/intvector_test.go +++ b/src/pkg/container/vector/intvector_test.go @@ -279,8 +279,9 @@ func TestIntDo(t *testing.T) { a.Set(i, int2IntValue(salt*i)) } count := 0 - a.Do(func(i int) { - if i != count*salt { + a.Do(func(e int) { + i := intf2IntValue(e) + if i != int2IntValue(count*salt) { t.Error(tname(a), "value at", count, "should be", count*salt, "not", i) } count++ @@ -294,8 +295,9 @@ func TestIntDo(t *testing.T) { (*b)[i] = int2IntValue(salt * i) } count = 0 - b.Do(func(i int) { - if i != count*salt { + b.Do(func(e int) { + i := intf2IntValue(e) + if i != int2IntValue(count*salt) { t.Error(tname(b), "b) value at", count, "should be", count*salt, "not", i) } count++ @@ -310,8 +312,9 @@ func TestIntDo(t *testing.T) { c[i] = int2IntValue(salt * i) } count = 0 - c.Do(func(i int) { - if i != count*salt { + c.Do(func(e int) { + i := intf2IntValue(e) + if i != int2IntValue(count*salt) { t.Error(tname(c), "c) value at", count, "should be", count*salt, "not", i) } count++ diff --git a/src/pkg/container/vector/stringvector.go b/src/pkg/container/vector/stringvector.go index 86563ca2034..ddc030f817d 100644 --- a/src/pkg/container/vector/stringvector.go +++ b/src/pkg/container/vector/stringvector.go @@ -214,3 +214,12 @@ func (p *StringVector) Iter() <-chan string { go p.iterate(c) return c } + + +// Do calls function f for each element of the vector, in order. +// The behavior of Do is undefined if f changes *p. +func (p *StringVector) Do(f func(elem string)) { + for _, e := range *p { + f(e) + } +} diff --git a/src/pkg/container/vector/stringvector_test.go b/src/pkg/container/vector/stringvector_test.go index 5bc8a626bff..859dac2fde5 100644 --- a/src/pkg/container/vector/stringvector_test.go +++ b/src/pkg/container/vector/stringvector_test.go @@ -279,9 +279,10 @@ func TestStrDo(t *testing.T) { a.Set(i, int2StrValue(salt*i)) } count := 0 - a.Do(func(s string) { - if s != int2StrValue(count*salt) { - t.Error(tname(a), "value at", count, "should be", count*salt, "not", s) + a.Do(func(e string) { + i := intf2StrValue(e) + if i != int2StrValue(count*salt) { + t.Error(tname(a), "value at", count, "should be", count*salt, "not", i) } count++ }) @@ -294,9 +295,10 @@ func TestStrDo(t *testing.T) { (*b)[i] = int2StrValue(salt * i) } count = 0 - b.Do(func(s string) { - if s != int2StrValue(count*salt) { - t.Error(tname(b), "b) value at", count, "should be", count*salt, "not", s) + b.Do(func(e string) { + i := intf2StrValue(e) + if i != int2StrValue(count*salt) { + t.Error(tname(b), "b) value at", count, "should be", count*salt, "not", i) } count++ }) @@ -310,9 +312,10 @@ func TestStrDo(t *testing.T) { c[i] = int2StrValue(salt * i) } count = 0 - c.Do(func(s string) { - if s != int2StrValue(count*salt) { - t.Error(tname(c), "c) value at", count, "should be", count*salt, "not", s) + c.Do(func(e string) { + i := intf2StrValue(e) + if i != int2StrValue(count*salt) { + t.Error(tname(c), "c) value at", count, "should be", count*salt, "not", i) } count++ }) diff --git a/src/pkg/container/vector/vector.go b/src/pkg/container/vector/vector.go index 07717209654..986321b14b7 100644 --- a/src/pkg/container/vector/vector.go +++ b/src/pkg/container/vector/vector.go @@ -214,3 +214,12 @@ func (p *Vector) Iter() <-chan interface{} { go p.iterate(c) return c } + + +// Do calls function f for each element of the vector, in order. +// The behavior of Do is undefined if f changes *p. +func (p *Vector) Do(f func(elem interface{})) { + for _, e := range *p { + f(e) + } +}