summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2008-11-14 11:22:39 -0800
committerRobert Griesemer <gri@golang.org>2008-11-14 11:22:39 -0800
commit073d80e1e06a2630ab8f6354e4c48c9f55567b68 (patch)
tree2a8033a57312f43cab2238cd0b336d4e5d68799b
parent16843dbb133feb37a2f2f68d156500ab03d8537a (diff)
downloadgolang-073d80e1e06a2630ab8f6354e4c48c9f55567b68.tar.gz
- added Init() function so that vectors can be used w/o New():
var v Vector.Vector; v.Init(); ... - clear vector elements in Reset - removed some comments that seem redundant R=r DELTA=16 (9 added, 5 deleted, 2 changed) OCL=19247 CL=19247
-rw-r--r--src/lib/container/vector.go18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/lib/container/vector.go b/src/lib/container/vector.go
index 5feea65d4..8e9c46f46 100644
--- a/src/lib/container/vector.go
+++ b/src/lib/container/vector.go
@@ -24,9 +24,14 @@ export type Vector struct {
}
+func (v *Vector) Init() {
+ v.elem = new([]Element, 8) [0 : 0]; // capacity must be > 0!
+}
+
+
export func New() *Vector {
v := new(Vector);
- v.elem = new([]Element, 8) [0 : 0]; // capacity must be > 0!
+ v.Init();
return v;
}
@@ -37,13 +42,11 @@ func (v *Vector) Len() int {
func (v *Vector) At(i int) Element {
- // range check unnecessary - done by runtime
return v.elem[i];
}
func (v *Vector) Set(i int, e Element) {
- // range check unnecessary - done by runtime
v.elem[i] = e;
}
@@ -51,24 +54,25 @@ func (v *Vector) Set(i int, e Element) {
func (v *Vector) Remove(i int) Element {
ret := v.elem[i];
n := v.Len();
- // range check unnecessary - done by runtime
for j := i + 1; j < n; j++ {
v.elem[j - 1] = v.elem[j];
}
- var e Element;
- v.elem[n - 1] = e; // don't set to nil - may not be legal in the future
+ v.elem[n - 1] = nil; // support GC, nil out entry
v.elem = v.elem[0 : n - 1];
return ret;
}
func (v *Vector) Reset() {
+ // support GC, nil out entries
+ for j := len(v.elem) - 1; j >= 0; j-- {
+ v.elem[j] = nil;
+ }
v.elem = v.elem[0:0];
}
func (v *Vector) Insert(i int, e Element) {
n := v.Len();
- // range check unnecessary - done by runtime
// grow array by doubling its capacity
if n == cap(v.elem) {