ptree

package module
v0.0.0-...-1071f04 Latest Latest
Warning

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

Go to latest
Published: Dec 8, 2021 License: Apache-2.0 Imports: 2 Imported by: 0

README

ptree

Ptree is an in-memory immutable radix / patricia tree package for Golang.

Features
  • Immutable radix tree
  • Copy-on-write radix tree
  • Rich transaction support
Installation
go get github.com/surrealdb/ptree

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Copy

type Copy struct {
	// contains filtered or unexported fields
}

Copy is a copy of a tree which can be used to apply changes to the radix tree. All changes are applied atomically and a new tree is returned when committed. A Copy is not thread safe.

func (*Copy) Cursor

func (c *Copy) Cursor() *Cursor

Cursor returns a new cursor for iterating through the radix tree.

func (*Copy) Del

func (c *Copy) Del(key []byte) interface{}

Del is used to delete a given key, returning the previous value.

func (*Copy) Get

func (c *Copy) Get(key []byte) interface{}

Get is used to retrieve a specific key, returning the current value.

func (*Copy) Put

func (c *Copy) Put(key []byte, val interface{}) interface{}

Put is used to insert a specific key, returning the previous value.

func (*Copy) Root

func (c *Copy) Root() *Node

Root returns the root node within this copy of the radix tree.

func (*Copy) Size

func (c *Copy) Size() int

Size is used to return the total number of elements in the tree.

func (*Copy) Tree

func (c *Copy) Tree() *Tree

Tree returns a new tree with the changes committed in memory.

type Cursor

type Cursor struct {
	// contains filtered or unexported fields
}

Cursor represents an iterator that can traverse over all key-value pairs in a tree in sorted order. Cursors can be obtained from a transaction and are valid as long as the transaction is open. Changing data while traversing with a cursor may cause it to be invalidated and return unexpected keys and/or values. You must reposition your cursor after mutating data.

func (*Cursor) Del

func (c *Cursor) Del() ([]byte, interface{})

Del removes the current item under the cursor from the tree. If the cursor has not yet been positioned using First, Last, or Seek, then no item is deleted and a nil key and value are returned.

func (*Cursor) First

func (c *Cursor) First() ([]byte, interface{})

First moves the cursor to the first item in the tree and returns its key and value. If the tree is empty then a nil key and value are returned.

func (*Cursor) Last

func (c *Cursor) Last() ([]byte, interface{})

Last moves the cursor to the last item in the tree and returns its key and value. If the tree is empty then a nil key and value are returned.

func (*Cursor) Next

func (c *Cursor) Next() ([]byte, interface{})

Next moves the cursor to the next item in the tree and returns its key and value. If the tree is empty then a nil key and value are returned, and if the cursor is at the end of the tree then a nil key and value are returned. If the cursor has not yet been positioned using First, Last, or Seek, then a nil key and value are returned.

func (*Cursor) Prev

func (c *Cursor) Prev() ([]byte, interface{})

Prev moves the cursor to the previous item in the tree and returns its key and value. If the tree is empty then a nil key and value are returned, and if the cursor is at the start of the tree then a nil key and value are returned. If the cursor has not yet been positioned using First, Last, or Seek, then a nil key and value are returned.

func (*Cursor) Seek

func (c *Cursor) Seek(key []byte) ([]byte, interface{})

Seek moves the cursor to a given key in the tree and returns it. If the specified key does not exist then the next key in the tree is used. If no keys follow, then a nil key and value are returned.

type Node

type Node struct {
	// contains filtered or unexported fields
}

Node represents an immutable node in the radix tree which can be either an edge node or a leaf node.

func (*Node) Max

func (n *Node) Max() ([]byte, interface{})

Max returns the key and value of the maximum item in the subtree of the current node.

func (*Node) Min

func (n *Node) Min() ([]byte, interface{})

Min returns the key and value of the minimum item in the subtree of the current node.

func (*Node) Path

func (n *Node) Path(key []byte, f Walker)

Path is used to recurse over the tree only visiting nodes which are above this node in the tree.

func (*Node) Subs

func (n *Node) Subs(key []byte, f Walker)

Subs is used to recurse over the tree only visiting nodes which are directly under this node in the tree.

func (*Node) Walk

func (n *Node) Walk(key []byte, f Walker)

Walk is used to recurse over the tree only visiting nodes which are under this node in the tree.

type Tree

type Tree struct {
	// contains filtered or unexported fields
}

Tree represents an immutable radix tree.

func New

func New() *Tree

New returns an empty Tree

func (*Tree) Copy

func (t *Tree) Copy() *Copy

Copy starts a new transaction that can be used to mutate the tree.

func (*Tree) Size

func (t *Tree) Size() int

Size is used to return the total number of elements in the tree.

type Walker

type Walker func(key []byte, val interface{}) (exit bool)

Walker represents a callback function which is to be used when iterating through the tree using Path, Subs, or Walk. It will be populated with the key and value of the current item, and returns a bool signifying if the iteration should be terminated.

Jump to

Keyboard shortcuts

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