open-nomad/vendor/github.com/hashicorp/go-immutable-radix
Drew Bailey 34871f89be
Oss license support for ent builds (#8054)
* changes necessary to support oss licesning shims

revert nomad fmt changes

update test to work with enterprise changes

update tests to work with new ent enforcements

make check

update cas test to use scheduler algorithm

back out preemption changes

add comments

* remove unused method
2020-05-27 13:46:52 -04:00
..
CHANGELOG.md Oss license support for ent builds (#8054) 2020-05-27 13:46:52 -04:00
edges.go Using godeps to build 2016-02-12 10:02:16 -08:00
go.mod Oss license support for ent builds (#8054) 2020-05-27 13:46:52 -04:00
go.sum Oss license support for ent builds (#8054) 2020-05-27 13:46:52 -04:00
iradix.go Oss license support for ent builds (#8054) 2020-05-27 13:46:52 -04:00
iter.go Oss license support for ent builds (#8054) 2020-05-27 13:46:52 -04:00
LICENSE Using godeps to build 2016-02-12 10:02:16 -08:00
node.go Oss license support for ent builds (#8054) 2020-05-27 13:46:52 -04:00
raw_iter.go Oss license support for ent builds (#8054) 2020-05-27 13:46:52 -04:00
README.md Oss license support for ent builds (#8054) 2020-05-27 13:46:52 -04:00

go-immutable-radix CircleCI

Provides the iradix package that implements an immutable radix tree. The package only provides a single Tree implementation, optimized for sparse nodes.

As a radix tree, it provides the following:

  • O(k) operations. In many cases, this can be faster than a hash table since the hash function is an O(k) operation, and hash tables have very poor cache locality.
  • Minimum / Maximum value lookups
  • Ordered iteration

A tree supports using a transaction to batch multiple updates (insert, delete) in a more efficient manner than performing each operation one at a time.

For a mutable variant, see go-radix.

Documentation

The full documentation is available on Godoc.

Example

Below is a simple example of usage

// Create a tree
r := iradix.New()
r, _, _ = r.Insert([]byte("foo"), 1)
r, _, _ = r.Insert([]byte("bar"), 2)
r, _, _ = r.Insert([]byte("foobar"), 2)

// Find the longest prefix match
m, _, _ := r.Root().LongestPrefix([]byte("foozip"))
if string(m) != "foo" {
    panic("should be foo")
}

Here is an example of performing a range scan of the keys.

// Create a tree
r := iradix.New()
r, _, _ = r.Insert([]byte("001"), 1)
r, _, _ = r.Insert([]byte("002"), 2)
r, _, _ = r.Insert([]byte("005"), 5)
r, _, _ = r.Insert([]byte("010"), 10)
r, _, _ = r.Insert([]byte("100"), 10)

// Range scan over the keys that sort lexicographically between [003, 050)
it := r.Root().Iterator()
it.SeekLowerBound([]byte("003"))
for key, _, ok := it.Next(); ok; key, _, ok = it.Next() {
  if key >= "050" {
      break
  }
  fmt.Println(key)
}
// Output:
//  005
//  010