nodes

package
v3.3.1 Latest Latest
Warning

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

Go to latest
Published: Oct 23, 2019 License: GPL-3.0 Imports: 10 Imported by: 12

Documentation

Index

Constants

View Source
const (
	// IterAny is a native iteration order of the tree. It's the fastest iteration order that lists all nodes in the tree.
	// The iteration order is not guaranteed to be the same for consecutive iterations over the same tree.
	// This order is more suitable for searching for nodes in the fastest way possible.
	IterAny = IterOrder(iota)
	// PreOrder is a pre-order depth-first search.
	PreOrder
	// PostOrder is a post-order depth-first search.
	PostOrder
	// LevelOrder is a breadth-first search.
	LevelOrder
	// ChildrenOrder is similar to LevelOrder, but list only the first level.
	ChildrenOrder
)
View Source
const (
	KindNil = Kind(1 << iota)
	KindObject
	KindArray
	KindString
	KindInt
	KindUint
	KindFloat
	KindBool
)
View Source
const (
	KindsValues    = KindString | KindInt | KindUint | KindFloat | KindBool
	KindsComposite = KindObject | KindArray
	KindsNotNil    = KindsComposite | KindsValues
	KindsAny       = KindNil | KindsNotNil
)
View Source
const HashSize = sha256.Size

HashSize is the size of hash used for nodes.

Variables

View Source
var DefaultHasher = NewHasher()

Functions

func ChildrenCount

func ChildrenCount(n Node) int

ChildrenCount reports the number of immediate children of n. If n is an Array this is the length of the array. If n is an Object, each object in a field of n counts as one child and each array is counted as its length.

func Count

func Count(root External, kinds Kind) int

Count returns a number of nodes with given kinds.

func Equal

func Equal(n1, n2 External) bool

Equal compares two subtrees. Equality is checked by value (deep), not by reference.

func NodeEqual

func NodeEqual(n1, n2 Node) bool

NodeEqual compares two subtrees. Equality is checked by value (deep), not by reference.

func Same

func Same(n1, n2 External) bool

Same check if two nodes represent exactly the same node. This usually means compare nodes by pointers.

func ToString

func ToString(v Value) string

ToString converts a value to a string.

func WalkPreOrder

func WalkPreOrder(root Node, walk func(Node) bool)

WalkPreOrder visits all nodes of the tree in pre-order.

func WalkPreOrderExt

func WalkPreOrderExt(root External, walk func(External) bool)

WalkPreOrderExt visits all nodes of the tree in pre-order.

Types

type Array

type Array []Node

Array is an ordered list of nodes.

func (Array) Clone

func (m Array) Clone() Node

Clone returns a deep copy of an Array.

func (Array) CloneList

func (m Array) CloneList() Array

CloneList creates a copy of an Array without copying it's elements.

func (Array) Equal

func (m Array) Equal(n External) bool

func (Array) EqualArray

func (m Array) EqualArray(m2 Array) bool

func (Array) Kind

func (Array) Kind() Kind

func (Array) Native

func (m Array) Native() interface{}

Native converts an array to a generic Go slice type ([]interface{}).

func (Array) SameAs

func (m Array) SameAs(n External) bool

func (*Array) SetNode

func (m *Array) SetNode(n Node) error

func (Array) Size

func (m Array) Size() int

func (Array) Value

func (Array) Value() Value

func (Array) ValueAt

func (m Array) ValueAt(i int) External

type Bool

type Bool bool

Bool is a boolean value used in tree fields.

func (Bool) Clone

func (v Bool) Clone() Node

Clone returns a copy of the value.

func (Bool) Equal

func (v Bool) Equal(n External) bool

func (Bool) Kind

func (Bool) Kind() Kind

func (Bool) Native

func (v Bool) Native() interface{}

Native converts the value to a bool.

func (Bool) SameAs

func (v Bool) SameAs(n External) bool

func (*Bool) SetNode

func (v *Bool) SetNode(n Node) error

func (Bool) Value

func (v Bool) Value() Value

type Comparable

type Comparable interface {
	// contains filtered or unexported methods
}

Comparable is an interface for comparable values that are guaranteed to be safely used as map keys.

func UniqueKey

func UniqueKey(n Node) Comparable

UniqueKey returns a unique key of the node in the current tree. The key can be used in maps.

type Empty

type Empty struct{}

Empty is an empty iterator.

func (Empty) Next

func (Empty) Next() bool

Next implements Iterator.

func (Empty) Node

func (Empty) Node() External

Node implements Iterator.

type External

type External interface {
	// Kind returns a node kind.
	Kind() Kind
	// Value returns a primitive value of the node or nil if node is not a value.
	Value() Value
	// SameAs check if the node is exactly the same node as n2. This usually means checking node pointers.
	SameAs(n2 External) bool
}

External is a node interface that can be implemented by other packages.

type ExternalArray

type ExternalArray interface {
	External
	// Size returns the number of child nodes.
	Size() int
	// ValueAt returns a array value by an index.
	ValueAt(i int) External
}

ExternalArray is an analog of Array type.

type ExternalObject

type ExternalObject interface {
	External
	// Size returns the number of fields in an object.
	Size() int
	// Keys returns a sorted list of keys (object field names).
	Keys() []string
	// ValueAt returns an object field by key. It returns false if key does not exist.
	ValueAt(key string) (External, bool)
}

ExternalObject is an analog of Object type.

type Float

type Float float64

Float is a floating point value used in tree fields.

func (Float) Clone

func (v Float) Clone() Node

Clone returns a copy of the value.

func (Float) Equal

func (v Float) Equal(n External) bool

func (Float) Kind

func (Float) Kind() Kind

func (Float) Native

func (v Float) Native() interface{}

Native converts the value to a float64.

func (Float) SameAs

func (v Float) SameAs(n External) bool

func (*Float) SetNode

func (v *Float) SetNode(n Node) error

func (Float) Value

func (v Float) Value() Value

type Hash

type Hash [HashSize]byte

func HashOf

func HashOf(n External) Hash

HashOf computes a hash of a node with all it's children. Shorthand for DefaultHasher.HashOf with default settings.

type Hasher

type Hasher struct {
	// KeyFilter allows to skip field in objects by returning false from the function.
	// Hash will still reflect the presence or absence of these key, but it won't hash a value of that field.
	KeyFilter func(key string) bool
}

Hasher allows to configure node hashing.

func NewHasher

func NewHasher() *Hasher

NewHasher creates a new hashing config with default options.

func (*Hasher) HashOf

func (h *Hasher) HashOf(n External) Hash

HashOf computes a hash of a node with all it's children. Caller should not rely on a specific hash value, since the hash size and the algorithm might change.

func (*Hasher) HashTo

func (h *Hasher) HashTo(hash hash.Hash, n External) error

HashTo hashes the node with a custom hash function. See HashOf for details.

type Int

type Int int64

Int is a integer value used in tree fields.

func (Int) Clone

func (v Int) Clone() Node

Clone returns a copy of the value.

func (Int) Equal

func (v Int) Equal(n External) bool

func (Int) Kind

func (Int) Kind() Kind

func (Int) Native

func (v Int) Native() interface{}

Native converts the value to an int64.

func (Int) SameAs

func (v Int) SameAs(n External) bool

func (*Int) SetNode

func (v *Int) SetNode(n Node) error

func (Int) Value

func (v Int) Value() Value

type IterOrder

type IterOrder int

IterOrder is a tree iteration order.

type Iterator

type Iterator interface {
	// Next advances an iterator.
	Next() bool
	// Node returns a current node.
	Node() External
}

Iterator over nodes.

func NewIterator

func NewIterator(root External, order IterOrder) Iterator

NewIterator creates a new iterator with a given order.

type Kind

type Kind int

Kind is a node kind.

func KindOf

func KindOf(n External) Kind

KindOf returns a kind of the node.

func (Kind) In

func (k Kind) In(k2 Kind) bool

func (Kind) Split

func (k Kind) Split() []Kind

func (Kind) String

func (k Kind) String() string

type Node

type Node interface {
	External
	// Clone creates a deep copy of the node.
	Clone() Node
	// Native returns a native Go type for this node.
	Native() interface{}
	// Equal checks if the node is equal to another node.
	// Equality is checked by value (deep), not by reference.
	Equal(n2 External) bool
	// contains filtered or unexported methods
}

Node is a generic interface for a tree structure.

Can be one of:

  • Object
  • Array
  • Value

func Apply

func Apply(root Node, apply func(n Node) (Node, bool)) (Node, bool)

Apply takes a root node and applies callback to each node of the tree recursively. Apply returns an old or a new node and a flag that indicates if node was changed or not. If callback returns true and a new node, Apply will make a copy of parent node and will replace an old value with a new one. It will make a copy of all parent nodes recursively in this case.

func ToNode

func ToNode(o interface{}, fallback ToNodeFunc) (Node, error)

ToNode converts objects returned by schema-less encodings such as JSON to Node objects.

type NodePtr

type NodePtr interface {
	Value
	SetNode(v Node) error
}

NodePtr is an assignable node pointer.

type Object

type Object map[string]Node

Object is a representation of generic node with fields.

func (Object) Clone

func (m Object) Clone() Node

Clone returns a deep copy of an Object.

func (Object) CloneObject

func (m Object) CloneObject() Object

CloneObject clones this node only, without deep copy of field values.

func (Object) Equal

func (m Object) Equal(n External) bool

func (Object) EqualObject

func (m Object) EqualObject(m2 Object) bool

func (Object) Keys

func (m Object) Keys() []string

Keys returns a sorted list of node keys.

func (Object) Kind

func (Object) Kind() Kind

func (Object) Native

func (m Object) Native() interface{}

Native converts an object to a generic Go map type (map[string]interface{}).

func (Object) SameAs

func (m Object) SameAs(n External) bool

func (Object) Set

func (m Object) Set(k string, v Node) Object

Set is a helper for setting node properties.

func (*Object) SetNode

func (m *Object) SetNode(n Node) error

func (Object) Size

func (m Object) Size() int

func (Object) Value

func (Object) Value() Value

func (Object) ValueAt

func (m Object) ValueAt(k string) (External, bool)

type String

type String string

String is a string value used in tree fields.

func (String) Clone

func (v String) Clone() Node

Clone returns a copy of the value.

func (String) Equal

func (v String) Equal(n External) bool

func (String) Kind

func (String) Kind() Kind

func (String) Native

func (v String) Native() interface{}

Native converts the value to a string.

func (String) SameAs

func (v String) SameAs(n External) bool

func (*String) SetNode

func (v *String) SetNode(n Node) error

func (String) Value

func (v String) Value() Value

type ToNodeFunc

type ToNodeFunc func(interface{}) (Node, error)

type Uint

type Uint uint64

Uint is a unsigned integer value used in tree fields.

func (Uint) Clone

func (v Uint) Clone() Node

Clone returns a copy of the value.

func (Uint) Equal

func (v Uint) Equal(n External) bool

func (Uint) Kind

func (Uint) Kind() Kind

func (Uint) Native

func (v Uint) Native() interface{}

Native converts the value to an int64.

func (Uint) SameAs

func (v Uint) SameAs(n External) bool

func (*Uint) SetNode

func (v *Uint) SetNode(n Node) error

func (Uint) Value

func (v Uint) Value() Value

type Value

type Value interface {
	Node
	Comparable
	// contains filtered or unexported methods
}

Value is a generic interface for primitive values.

Can be one of:

  • String
  • Int
  • Uint
  • Float
  • Bool

Directories

Path Synopsis
Package nodesproto is a generated protocol buffer package.
Package nodesproto is a generated protocol buffer package.
pio

Jump to

Keyboard shortcuts

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