diff options
| author | Robert Griesemer <gri@golang.org> | 2009-12-22 18:25:27 -0800 |
|---|---|---|
| committer | Robert Griesemer <gri@golang.org> | 2009-12-22 18:25:27 -0800 |
| commit | be2b0efdfb4fa4164d716c44d82bcbf39c99e624 (patch) | |
| tree | 965078e4c4cd5aff7916c43bb0bd8679993ca574 /src/pkg/container/vector/defs.go | |
| parent | 2df67a3676e572d5b33280dde3e6dfa8c2e73f85 (diff) | |
| download | golang-be2b0efdfb4fa4164d716c44d82bcbf39c99e624.tar.gz | |
Replace container/vector with exp/vector (faster).
Manual changes to the following files:
src/pkg/Makefile
src/pkg/exp/vector/Makefile (now: src/pkg/container/vector/Makefile)
R=rsc, r
CC=golang-dev
http://codereview.appspot.com/181041
Diffstat (limited to 'src/pkg/container/vector/defs.go')
| -rw-r--r-- | src/pkg/container/vector/defs.go | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/pkg/container/vector/defs.go b/src/pkg/container/vector/defs.go new file mode 100644 index 000000000..0607a50c6 --- /dev/null +++ b/src/pkg/container/vector/defs.go @@ -0,0 +1,78 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// The vector package implements containers for managing sequences +// of elements. Vectors grow and shrink dynamically as necessary. +package vector + + +// Vector is a container for numbered sequences of elements of type interface{}. +// A vector's length and capacity adjusts automatically as necessary. +// The zero value for Vector is an empty vector ready to use. +type Vector []interface{} + + +// IntVector is a container for numbered sequences of elements of type int. +// A vector's length and capacity adjusts automatically as necessary. +// The zero value for IntVector is an empty vector ready to use. +type IntVector []int + + +// StringVector is a container for numbered sequences of elements of type string. +// A vector's length and capacity adjusts automatically as necessary. +// The zero value for StringVector is an empty vector ready to use. +type StringVector []string + + +// Initial underlying array size +const initialSize = 8 + + +// Partial sort.Interface support + +// LessInterface provides partial support of the sort.Interface. +type LessInterface interface { + Less(y interface{}) bool +} + + +// Less returns a boolean denoting whether the i'th element is less than the j'th element. +func (p *Vector) Less(i, j int) bool { return (*p)[i].(LessInterface).Less((*p)[j]) } + + +// sort.Interface support + +// Less returns a boolean denoting whether the i'th element is less than the j'th element. +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 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 *StringVector) Do(f func(elem interface{})) { + for _, e := range *p { + f(e) + } +} |
