Commit 0fe8487c authored by Robert Griesemer's avatar Robert Griesemer

- Remove IntVector methods that are "inherited" with correct type

- Faster vector.Delete, removed result value (easy to get via At(i))

R=r
DELTA=40  (6 added, 30 deleted, 4 changed)
OCL=28866
CL=28897
parent b725e32c
...@@ -8,7 +8,6 @@ import "container/vector" ...@@ -8,7 +8,6 @@ import "container/vector"
// IntVector is a specialization of Vector that hides the wrapping of Elements around ints. // IntVector is a specialization of Vector that hides the wrapping of Elements around ints.
type IntVector struct { type IntVector struct {
// TODO do not export field
vector.Vector; vector.Vector;
} }
...@@ -34,38 +33,12 @@ func (p *IntVector) At(i int) int { ...@@ -34,38 +33,12 @@ func (p *IntVector) At(i int) int {
} }
// Set sets the i'th element of the vector to value x.
func (p *IntVector) Set(i int, x int) {
p.Vector.Set(i, x)
}
// Last returns the element in the vector of highest index. // Last returns the element in the vector of highest index.
func (p *IntVector) Last() int { func (p *IntVector) Last() int {
return p.Vector.Last().(int) return p.Vector.Last().(int)
} }
// Insert inserts into the vector an element of value x before
// the current element at index i.
func (p *IntVector) Insert(i int, x int) {
p.Vector.Insert(i, x)
}
// Delete deletes the i'th element of the vector. The gap is closed so the old
// element at index i+1 has index i afterwards.
func (p *IntVector) Delete(i int) int {
return p.Vector.Delete(i).(int)
}
// Push appends x to the end of the vector.
func (p *IntVector) Push(x int) {
p.Vector.Push(x)
}
// Pop deletes and returns the last element of the vector. // Pop deletes and returns the last element of the vector.
func (p *IntVector) Pop() int { func (p *IntVector) Pop() int {
return p.Vector.Pop().(int) return p.Vector.Pop().(int)
......
...@@ -127,16 +127,13 @@ func (p *Vector) Insert(i int, x Element) { ...@@ -127,16 +127,13 @@ func (p *Vector) Insert(i int, x Element) {
// Delete deletes the i'th element of the vector. The gap is closed so the old // Delete deletes the i'th element of the vector. The gap is closed so the old
// element at index i+1 has index i afterwards. // element at index i+1 has index i afterwards.
func (p *Vector) Delete(i int) Element { func (p *Vector) Delete(i int) {
a := p.a; a := p.a;
n := len(a); n := len(a);
x := a[i];
copy(a[i : n-1], a[i+1 : n]); copy(a[i : n-1], a[i+1 : n]);
a[n-1] = nil; // support GC, nil out entry a[n-1] = nil; // support GC, nil out entry
p.a = a[0 : n-1]; p.a = a[0 : n-1];
return x
} }
...@@ -189,9 +186,13 @@ func (p *Vector) Push(x Element) { ...@@ -189,9 +186,13 @@ func (p *Vector) Push(x Element) {
} }
// Push deletes the last element of the vector. // Pop deletes the last element of the vector.
func (p *Vector) Pop() Element { func (p *Vector) Pop() Element {
return p.Delete(len(p.a) - 1) i := len(p.a) - 1;
x := p.a[i];
p.a[i] = nil; // support GC, nil out entry
p.a = p.a[0 : i];
return x;
} }
...@@ -230,6 +231,7 @@ func (p *Vector) iterate(c chan Element) { ...@@ -230,6 +231,7 @@ func (p *Vector) iterate(c chan Element) {
close(c); close(c);
} }
// Channel iterator for range. // Channel iterator for range.
func (p *Vector) Iter() chan Element { func (p *Vector) Iter() chan Element {
c := make(chan Element); c := make(chan Element);
......
...@@ -53,7 +53,8 @@ func TestInsertDeleteClear(t *testing.T) { ...@@ -53,7 +53,8 @@ func TestInsertDeleteClear(t *testing.T) {
} }
for i := n-1; i >= 0; i-- { for i := n-1; i >= 0; i-- {
if a.Last().(int) != val(0) { t.Error("C") } if a.Last().(int) != val(0) { t.Error("C") }
if a.Delete(0).(int) != val(i) { t.Error("D") } if a.At(0).(int) != val(i) { t.Error("D") }
a.Delete(0);
if a.Len() != i { t.Errorf("E) wrong len %d (expected %d)", a.Len(), i) } if a.Len() != i { t.Errorf("E) wrong len %d (expected %d)", a.Len(), i) }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment