// IntVector is a specialization of Vector that hides the wrapping of Elements around ints.
type IntVector struct {
- // TODO do not export field
vector.Vector;
}
}
-// 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)
// 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
}
}
-// 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;
}
close(c);
}
+
// Channel iterator for range.
func (p *Vector) Iter() chan Element {
c := make(chan Element);
}
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) }
}