tree

package
v0.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 6, 2026 License: BSD-3-Clause Imports: 5 Imported by: 0

Documentation

Overview

Package tree implements in-memory ordered maps. [_OMap][K, V] is suitable for ordered types K, while Map[K, V] supports arbitrary keys and comparison functions.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Map

type Map[K, V any] struct {
	// contains filtered or unexported fields
}

A Map is a map[K]V ordered according to an arbitrary comparison function. The zero value of a Map is not meaningful since it has no comparison function. Use NewMap to create a Map. A nil *Map, like a nil Go map, can be read but not written and contains no entries.

func NewMap

func NewMap[K, V any](cmp func(K, K) int) *Map[K, V]

NewMap returns a new MapFunc[K, V] ordered according to cmp.

func (*Map[K, V]) Above

func (m *Map[K, V]) Above(lo K) Range[K, V]

Above returns an Range with lower bound lo, exclusive, and no upper bound.

func (*Map[K, V]) All

func (m *Map[K, V]) All() iter.Seq2[K, V]

All returns an iterator over the map m from smallest to largest key. See [_OMap.All] for the guarantee provided if m is modified during the iteration.

Example
package main

import (
	"cmp"
	"fmt"

	"github.com/jba/omap/tree"
)

func main() {
	m := tree.NewMap[int, string](cmp.Compare)
	m.Set(1, "one")
	m.Set(2, "two")
	m.Set(3, "three")

	for k, v := range m.All() {
		fmt.Println(k, v)
	}

}
Output:
1 one
2 two
3 three

func (*Map[K, V]) At

func (m *Map[K, V]) At(key K) V

At returns the value of m[key], or the zero value if key is not present.

func (*Map[K, V]) Backward

func (m *Map[K, V]) Backward() iter.Seq2[K, V]

Backward returns an iterator over the map m from largest to smallest key. See [_OMap.All] for the guarantee provided if m is modified during the iteration.

func (*Map[K, V]) Below

func (m *Map[K, V]) Below(hi K) Range[K, V]

Below returns an Range with upper bound hi, exclusive, and no lower bound.

Example
package main

import (
	"cmp"
	"fmt"

	"github.com/jba/omap/tree"
)

func main() {
	m := tree.NewMap[int, string](cmp.Compare)
	m.Set(1, "one")
	m.Set(2, "two")
	m.Set(3, "three")

	for k, v := range m.Above(1).Below(3).All() {
		fmt.Println(k, v)
	}

}
Output:
2 two

func (*Map[K, V]) Clear

func (m *Map[K, V]) Clear() bool

Clear removes all entries from the map. It reports whether the size changed.

func (*Map[K, V]) Clone

func (m *Map[K, V]) Clone() *Map[K, V]

Clone returns a shallow copy of m.

func (*Map[K, V]) Contains added in v0.4.0

func (m *Map[K, V]) Contains(key K) bool

Contains reports whether the map contains an entry with the given key.

func (*Map[K, V]) ContainsAll added in v0.4.0

func (m *Map[K, V]) ContainsAll(keys iter.Seq[K]) bool

ContainsAll reports whether the map contains an entry for each key in the sequence.

func (*Map[K, V]) Delete

func (m *Map[K, V]) Delete(key K) (V, bool)

Delete removes the entry with the given key, if present. It reports whether the map changed, and returns the previous value, if any.

func (*Map[K, V]) DeleteAll added in v0.4.0

func (m *Map[K, V]) DeleteAll(keys iter.Seq[K]) bool

DeleteAll removes all the entries whose keys are in the sequence. It reports whether the map changed.

func (*Map[K, V]) From

func (m *Map[K, V]) From(lo K) Range[K, V]

From returns an Range with lower bound lo, inclusive, and no upper bound.

Example
package main

import (
	"cmp"
	"fmt"

	"github.com/jba/omap/tree"
)

func main() {
	m := tree.NewMap[int, string](cmp.Compare)
	m.Set(1, "one")
	m.Set(2, "two")
	m.Set(3, "three")

	for k, v := range m.From(2).All() {
		fmt.Println(k, v)
	}

}
Output:
2 two
3 three

func (*Map[K, V]) Get

func (m *Map[K, V]) Get(key K) (V, bool)

Get returns the value of m[key] and reports whether it exists.

func (*Map[K, V]) Index

func (m *Map[K, V]) Index(key K) int

Index returns the index of key in m, or -1 if key is not present.

func (*Map[K, V]) Keys added in v0.4.0

func (m *Map[K, V]) Keys() iter.Seq[K]

Keys returns an iterator over the keys in m from smallest to largest. See [_OMap.All] for the guarantee provided if m is modified during the iteration.

func (*Map[K, V]) Len

func (m *Map[K, V]) Len() int

Len returns the number of keys in m.

func (*Map[K, V]) Max

func (m *Map[K, V]) Max() (K, V, bool)

Max returns the maximum key in m, is value, and true. If m is empty, the third return value is false.

func (*Map[K, V]) Min

func (m *Map[K, V]) Min() (K, V, bool)

Min returns the minimum key in m, its value, and true. If m is empty, the third return value is false.

func (*Map[K, V]) Nth

func (m *Map[K, V]) Nth(i int) (K, V)

Nth returns the key and value at index i. It panics if i < 0 or i >= m.Len().

func (*Map[K, V]) Set added in v0.3.0

func (m *Map[K, V]) Set(key K, val V) (old V, added bool)

Set sets m[key] = val. If the entry was present, Set returns the former value and false. Otherwise it returns the zero value and true.

func (*Map[K, V]) SetAll added in v0.4.0

func (m *Map[K, V]) SetAll(seq iter.Seq2[K, V]) bool

SetAll calls Set(k, v) for each key/value pair in the sequence. It reports whether the number of map entries increased.

func (*Map[K, V]) String added in v0.4.0

func (m *Map[K, V]) String() string

String returns a string representation of m in the form "{k1: v1, k2: v2}".

func (*Map[K, V]) To

func (m *Map[K, V]) To(hi K) Range[K, V]

To returns an Range with upper bound hi, inclusive, and no lower bound.

func (*Map[K, V]) Values added in v0.4.0

func (m *Map[K, V]) Values() iter.Seq[V]

Values returns an iterator over the values in m from smallest to largest key. See [_OMap.All] for the guarantee provided if m is modified during the iteration.

type ORange added in v0.3.0

type ORange[K cmp.Ordered, V any] struct {
	// contains filtered or unexported fields
}

A ORange is a subsequence of keys in an [_OMap].

func (ORange[K, V]) Above added in v0.4.0

func (r ORange[K, V]) Above(lo K) ORange[K, V]

Above returns an ORange with lower bound lo, exclusive and the same upper bound as r.

func (ORange[K, V]) All added in v0.3.0

func (r ORange[K, V]) All() iter.Seq2[K, V]

All returns an iterator over r's underlying map from smallest to largest key in r. See [_OMap.All] for the guarantee provided if m is modified during the iteration.

func (ORange[K, V]) Backward added in v0.3.0

func (r ORange[K, V]) Backward() iter.Seq2[K, V]

Backward returns an iterator over r's underlying map from largest to smallest key in r. See [_OMap.All] for the guarantee provided if m is modified during the iteration.

func (ORange[K, V]) Below added in v0.3.0

func (r ORange[K, V]) Below(hi K) ORange[K, V]

Below returns an ORange with upper bound hi, exclusive and the same lower bound as r.

func (ORange[K, V]) Clear added in v0.3.0

func (r ORange[K, V]) Clear()

Clear deletes all the entries in r from r's underlying map.

func (ORange[K, V]) Clone added in v0.3.0

func (r ORange[K, V]) Clone() *_OMap[K, V]

Clone returns a new OMap containing only the keys in r.

func (ORange[K, V]) From added in v0.4.0

func (r ORange[K, V]) From(lo K) ORange[K, V]

From returns an ORange with lower bound lo, inclusive and the same upper bound as r.

func (ORange[K, V]) Index added in v0.3.0

func (r ORange[K, V]) Index(key K) int

Index returns the index of key within r, or -1 if key is not present or not in bounds.

func (ORange[K, V]) Keys added in v0.4.0

func (r ORange[K, V]) Keys() iter.Seq[K]

Keys returns an iterator over the keys in r from smallest to largest. See [_OMap.All] for the guarantee provided if m is modified during the iteration.

func (ORange[K, V]) Len added in v0.3.0

func (r ORange[K, V]) Len() int

Len returns the number of keys in r.

func (ORange[K, V]) Max added in v0.3.0

func (r ORange[K, V]) Max() (K, V, bool)

Max returns the maximum key from r's underlying map that is in r, its value, and true. If m is empty, the third return value is false.

func (ORange[K, V]) Min added in v0.3.0

func (r ORange[K, V]) Min() (K, V, bool)

Min returns the minimum key from r's underlying map that is in r, its value, and true. If m is empty, the third return value is false.

func (ORange[K, V]) Nth added in v0.3.0

func (r ORange[K, V]) Nth(i int) (K, V)

Nth returns the key and value at index i within r. It panics if i < 0 or i >= r.Len().

func (ORange[K, V]) To added in v0.3.0

func (r ORange[K, V]) To(hi K) ORange[K, V]

To returns an ORange with upper bound hi, inclusive and the same lower bound as r.

func (ORange[K, V]) Values added in v0.4.0

func (r ORange[K, V]) Values() iter.Seq[V]

Values returns an iterator over the values in r from smallest to largest key. See [_OMap.All] for the guarantee provided if m is modified during the iteration.

type Range

type Range[K, V any] struct {
	// contains filtered or unexported fields
}

A Range is a subsequence of keys in a Map.

func (Range[K, V]) Above added in v0.4.0

func (r Range[K, V]) Above(lo K) Range[K, V]

Above returns a Range with lower bound lo, exclusive and the same upper bound as r.

func (Range[K, V]) All

func (r Range[K, V]) All() iter.Seq2[K, V]

All returns an iterator over r's underlying map from smallest to largest key in r. See [_OMap.All] for the guarantee provided if m is modified during the iteration.

func (Range[K, V]) Backward

func (r Range[K, V]) Backward() iter.Seq2[K, V]

Backward returns an iterator over r's underlying map from largest to smallest key in r. See [_OMap.All] for the guarantee provided if m is modified during the iteration.

func (Range[K, V]) Below

func (r Range[K, V]) Below(hi K) Range[K, V]

Below returns a Range with upper bound hi, exclusive and the same lower bound as r.

func (Range[K, V]) Clear

func (r Range[K, V]) Clear()

Clear deletes all the entries in r from r's underlying map.

func (Range[K, V]) Clone

func (r Range[K, V]) Clone() *Map[K, V]

Clone returns a new Map containing only the keys in r.

func (Range[K, V]) From added in v0.4.0

func (r Range[K, V]) From(lo K) Range[K, V]

From returns a Range with lower bound lo, inclusive and the same upper bound as r.

func (Range[K, V]) Index

func (r Range[K, V]) Index(key K) int

Index returns the index of key within r, or -1 if key is not present or not in bounds.

func (Range[K, V]) Keys added in v0.4.0

func (r Range[K, V]) Keys() iter.Seq[K]

Keys returns an iterator over the keys in r from smallest to largest. See [_OMap.All] for the guarantee provided if m is modified during the iteration.

func (Range[K, V]) Len

func (r Range[K, V]) Len() int

Len returns the number of keys in r.

func (Range[K, V]) Max

func (r Range[K, V]) Max() (K, V, bool)

Max returns the maximum key from r's underlying map that is in r, its value, and true. If m is empty, the third return value is false.

func (Range[K, V]) Min

func (r Range[K, V]) Min() (K, V, bool)

Min returns the minimum key from r's underlying map that is in r, its value, and true. If m is empty, the third return value is false.

func (Range[K, V]) Nth

func (r Range[K, V]) Nth(i int) (K, V)

Nth returns the key and value at index i within r. It panics if i < 0 or i >= r.Len().

func (Range[K, V]) To

func (r Range[K, V]) To(hi K) Range[K, V]

To returns a Range with upper bound hi, inclusive and the same lower bound as r.

func (Range[K, V]) Values added in v0.4.0

func (r Range[K, V]) Values() iter.Seq[V]

Values returns an iterator over the values in r from smallest to largest key. See [_OMap.All] for the guarantee provided if m is modified during the iteration.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL