mirror of
https://github.com/golang/go
synced 2024-11-20 11:04:56 -07:00
- 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
This commit is contained in:
parent
b725e32c99
commit
0fe8487ced
@ -8,7 +8,6 @@ import "container/vector"
|
||||
|
||||
// IntVector is a specialization of Vector that hides the wrapping of Elements around ints.
|
||||
type IntVector struct {
|
||||
// TODO do not export field
|
||||
vector.Vector;
|
||||
}
|
||||
|
||||
@ -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.
|
||||
func (p *IntVector) 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.
|
||||
func (p *IntVector) Pop() int {
|
||||
return p.Vector.Pop().(int)
|
||||
|
@ -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
|
||||
// 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;
|
||||
n := len(a);
|
||||
|
||||
x := a[i];
|
||||
copy(a[i : n-1], a[i+1 : n]);
|
||||
a[n-1] = nil; // support GC, nil out entry
|
||||
p.a = a[0 : n-1];
|
||||
|
||||
return x
|
||||
}
|
||||
|
||||
|
||||
@ -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 {
|
||||
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) {
|
||||
close(c);
|
||||
}
|
||||
|
||||
|
||||
// Channel iterator for range.
|
||||
func (p *Vector) Iter() chan Element {
|
||||
c := make(chan Element);
|
||||
|
@ -53,7 +53,8 @@ func TestInsertDeleteClear(t *testing.T) {
|
||||
}
|
||||
for i := n-1; i >= 0; i-- {
|
||||
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) }
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user