Documentation ¶
Index ¶
- Constants
- Variables
- func AliaserAliasClashTest(require *require.Assertions, r AliaserReader, w AliaserWriter)
- func AliaserAliasesEmptyTest(require *require.Assertions, r AliaserReader, w AliaserWriter)
- func AliaserAliasesTest(require *require.Assertions, r AliaserReader, w AliaserWriter)
- func AliaserLookupErrorTest(require *require.Assertions, r AliaserReader, w AliaserWriter)
- func AliaserLookupTest(require *require.Assertions, r AliaserReader, w AliaserWriter)
- func AliaserPrimaryAliasTest(require *require.Assertions, r AliaserReader, w AliaserWriter)
- func AliaserRemoveAliasTest(require *require.Assertions, r AliaserReader, w AliaserWriter)
- func EqualSubset(start, stop int, id1, id2 ID) bool
- func Equals(a, b []ID) bool
- func FirstDifferenceSubset(start, stop int, id1, id2 ID) (int, bool)
- func GetRelevantAliases(aliaser Aliaser, ids []ID) (map[ID][]string, error)
- func IsSortedAndUniqueIDs(ids []ID) bool
- func IsSortedAndUniqueShortIDs(ids []ShortID) bool
- func IsUniqueShortIDs(ids []ShortID) bool
- func ShortIDsToStrings(ids []ShortID) []string
- func SortIDs(ids []ID)
- func SortNodeIDs(nodeIDs []NodeID)
- func SortShortIDs(ids []ShortID)
- func UnsortedEquals(a, b []ID) bool
- type Aliaser
- type AliaserReader
- type AliaserWriter
- type Bag
- func (b *Bag) Add(ids ...ID)
- func (b *Bag) AddCount(id ID, count int)
- func (b *Bag) Count(id ID) int
- func (b *Bag) Equals(oIDs Bag) bool
- func (b *Bag) Filter(start, end int, id ID) Bag
- func (b *Bag) Len() int
- func (b *Bag) List() []ID
- func (b *Bag) Mode() (ID, int)
- func (b *Bag) PrefixedString(prefix string) string
- func (b *Bag) SetThreshold(threshold int)
- func (b *Bag) Split(index uint) [2]Bag
- func (b *Bag) String() string
- func (b *Bag) Threshold() Set
- type BitSet
- func (bs *BitSet) Add(i uint)
- func (bs *BitSet) Clear()
- func (bs BitSet) Contains(i uint) bool
- func (bs *BitSet) Difference(s BitSet)
- func (bs *BitSet) Intersection(s BitSet)
- func (bs BitSet) Len() int
- func (bs *BitSet) Remove(i uint)
- func (bs BitSet) String() string
- func (bs *BitSet) Union(s BitSet)
- type ID
- func (id ID) Bit(i uint) int
- func (id ID) Hex() string
- func (id ID) MarshalJSON() ([]byte, error)
- func (id ID) MarshalText() ([]byte, error)
- func (id ID) Prefix(prefixes ...uint64) ID
- func (id ID) String() string
- func (id *ID) UnmarshalJSON(b []byte) error
- func (id *ID) UnmarshalText(text []byte) error
- type NodeID
- type NodeIDBag
- func (b *NodeIDBag) Add(ids ...NodeID)
- func (b *NodeIDBag) AddCount(id NodeID, count int)
- func (b *NodeIDBag) Count(id NodeID) int
- func (b *NodeIDBag) Equals(oIDs NodeIDBag) bool
- func (b *NodeIDBag) Len() int
- func (b *NodeIDBag) List() []NodeID
- func (b *NodeIDBag) PrefixedString(prefix string) string
- func (b *NodeIDBag) Remove(id NodeID)
- func (b *NodeIDBag) String() string
- type NodeIDSet
- func (ids *NodeIDSet) Add(idList ...NodeID)
- func (ids NodeIDSet) CappedList(size int) []NodeID
- func (ids *NodeIDSet) Clear()
- func (ids *NodeIDSet) Contains(id NodeID) bool
- func (ids *NodeIDSet) Difference(idSet NodeIDSet)
- func (ids NodeIDSet) Equals(oIDs NodeIDSet) bool
- func (ids NodeIDSet) Len() int
- func (ids NodeIDSet) List() []NodeID
- func (ids *NodeIDSet) Peek() (NodeID, bool)
- func (ids *NodeIDSet) Pop() (NodeID, bool)
- func (ids *NodeIDSet) Remove(idList ...NodeID)
- func (ids NodeIDSet) SortedList() []NodeID
- func (ids NodeIDSet) String() string
- func (ids *NodeIDSet) Union(idSet NodeIDSet)
- type Set
- func (ids *Set) Add(idList ...ID)
- func (ids Set) CappedList(size int) []ID
- func (ids *Set) Clear()
- func (ids *Set) Contains(id ID) bool
- func (ids *Set) Difference(set Set)
- func (ids Set) Equals(oIDs Set) bool
- func (ids Set) Len() int
- func (ids Set) List() []ID
- func (ids *Set) MarshalJSON() ([]byte, error)
- func (ids *Set) Overlaps(big Set) bool
- func (ids *Set) Pop() (ID, bool)
- func (ids *Set) Remove(idList ...ID)
- func (ids Set) SortedList() []ID
- func (ids Set) String() string
- func (ids *Set) Union(set Set)
- type ShortID
- func (id ShortID) Bytes() []byte
- func (id ShortID) Hex() string
- func (id ShortID) MarshalJSON() ([]byte, error)
- func (id ShortID) MarshalText() ([]byte, error)
- func (id ShortID) PrefixedString(prefix string) string
- func (id ShortID) String() string
- func (id *ShortID) UnmarshalJSON(b []byte) error
- func (id *ShortID) UnmarshalText(text []byte) error
- type ShortSet
- func (ids *ShortSet) Add(idList ...ShortID)
- func (ids ShortSet) CappedList(size int) []ShortID
- func (ids *ShortSet) Clear()
- func (ids *ShortSet) Contains(id ShortID) bool
- func (ids *ShortSet) Difference(idSet ShortSet)
- func (ids ShortSet) Equals(oIDs ShortSet) bool
- func (ids ShortSet) Len() int
- func (ids ShortSet) List() []ShortID
- func (ids *ShortSet) Peek() (ShortID, bool)
- func (ids *ShortSet) Pop() (ShortID, bool)
- func (ids *ShortSet) Remove(idList ...ShortID)
- func (ids ShortSet) SortedList() []ShortID
- func (ids ShortSet) String() string
- func (ids *ShortSet) Union(idSet ShortSet)
- type SliceStringer
- type UniqueBag
- func (b *UniqueBag) Add(setID uint, idSet ...ID)
- func (b *UniqueBag) Bag(alpha int) Bag
- func (b *UniqueBag) Clear()
- func (b *UniqueBag) Difference(diff *UniqueBag)
- func (b *UniqueBag) DifferenceSet(id ID, set BitSet)
- func (b *UniqueBag) GetSet(id ID) BitSet
- func (b *UniqueBag) List() []ID
- func (b *UniqueBag) PrefixedString(prefix string) string
- func (b *UniqueBag) RemoveSet(id ID)
- func (b *UniqueBag) String() string
- func (b *UniqueBag) UnionSet(id ID, set BitSet)
Constants ¶
const BitsPerByte = 8
BitsPerByte is the number of bits per byte
const NodeIDPrefix = "NodeID-"
const NumBits = 256
NumBits is the number of bits this patricia tree manages
Variables ¶
var AliasTests = []func(require *require.Assertions, r AliaserReader, w AliaserWriter){ AliaserLookupErrorTest, AliaserLookupTest, AliaserAliasesEmptyTest, AliaserAliasesTest, AliaserPrimaryAliasTest, AliaserAliasClashTest, AliaserRemoveAliasTest, }
var ( // Empty is a useful all zero value Empty = ID{} )
var EmptyNodeID = NodeID{}
var ShortEmpty = ShortID{}
ShortEmpty is a useful all zero value
Functions ¶
func AliaserAliasClashTest ¶
func AliaserAliasClashTest(require *require.Assertions, r AliaserReader, w AliaserWriter)
func AliaserAliasesEmptyTest ¶
func AliaserAliasesEmptyTest(require *require.Assertions, r AliaserReader, w AliaserWriter)
func AliaserAliasesTest ¶
func AliaserAliasesTest(require *require.Assertions, r AliaserReader, w AliaserWriter)
func AliaserLookupErrorTest ¶
func AliaserLookupErrorTest(require *require.Assertions, r AliaserReader, w AliaserWriter)
func AliaserLookupTest ¶
func AliaserLookupTest(require *require.Assertions, r AliaserReader, w AliaserWriter)
func AliaserPrimaryAliasTest ¶
func AliaserPrimaryAliasTest(require *require.Assertions, r AliaserReader, w AliaserWriter)
func AliaserRemoveAliasTest ¶
func AliaserRemoveAliasTest(require *require.Assertions, r AliaserReader, w AliaserWriter)
func EqualSubset ¶
EqualSubset takes in two indices and two ids and returns if the ids are equal from bit start to bit end (non-inclusive). Bit indices are defined as: [7 6 5 4 3 2 1 0] [15 14 13 12 11 10 9 8] ... [255 254 253 252 251 250 249 248] Where index 7 is the MSB of byte 0.
func FirstDifferenceSubset ¶
FirstDifferenceSubset takes in two indices and two ids and returns the index of the first difference between the ids inside bit start to bit end (non-inclusive). Bit indices are defined above
func GetRelevantAliases ¶
GetRelevantAliases returns the aliases with the redundant identity alias removed (each id is aliased to at least itself).
func IsSortedAndUniqueIDs ¶
IsSortedAndUniqueIDs returns true if the ids are sorted and unique
func IsSortedAndUniqueShortIDs ¶
IsSortedAndUniqueShortIDs returns true if the ids are sorted and unique
func IsUniqueShortIDs ¶
IsUniqueShortIDs returns true iff ids are unique
func ShortIDsToStrings ¶
ShortIDsToStrings converts an array of shortIDs to an array of their string representations
func SortNodeIDs ¶
func SortNodeIDs(nodeIDs []NodeID)
SortNodeIDs sorts the node IDs lexicographically
func UnsortedEquals ¶
UnsortedEquals returns true if the have the same number of each ID
Types ¶
type Aliaser ¶
type Aliaser interface { AliaserReader AliaserWriter PrimaryAliasOrDefault(id ID) string }
Aliaser allows one to give an ID aliases and lookup the aliases given to an ID.
func NewAliaser ¶
func NewAliaser() Aliaser
type AliaserReader ¶
type AliaserReader interface { Lookup(alias string) (ID, error) PrimaryAlias(id ID) (string, error) Aliases(id ID) ([]string, error) }
AliaserReader allows one to lookup the aliases given to an ID.
type AliaserWriter ¶
Aliaser allows one to give an ID aliases. An ID can have arbitrarily many aliases; two IDs may not have the same alias.
type Bag ¶
type Bag struct {
// contains filtered or unexported fields
}
Bag is a multiset of IDs.
A bag has the ability to split and filter on its bits for ease of use for binary voting.
func (*Bag) AddCount ¶
AddCount increases the number of times the id has been seen by count.
count must be >= 0
func (*Bag) Filter ¶
Filter returns the bag of ids with the same counts as this bag, except all the ids in the returned bag must have the same bits in the range [start, end) as id.
func (*Bag) Mode ¶
Mode returns the id that has been seen the most and the number of times it has been seen. Ties are broken by the first id to be seen the reported number of times.
func (*Bag) PrefixedString ¶
func (*Bag) SetThreshold ¶
SetThreshold sets the number of times an ID must be added to be contained in the threshold set.
type BitSet ¶
type BitSet uint64
BitSet is a set that can contain uints in the range [0, 64). All functions are O(1). The zero value is the empty set.
func (*BitSet) Difference ¶
Difference removes all the elements in [s] from this set
func (*BitSet) Intersection ¶
Intersection takes the intersection of [s] with this set
type ID ¶
type ID [32]byte
ID wraps a 32 byte hash used as an identifier
func FromString ¶
FromString is the inverse of ID.String()
func GenerateTestID ¶
func GenerateTestID() ID
GenerateTestID returns a new ID that should only be used for testing
func (ID) MarshalJSON ¶
func (ID) MarshalText ¶
func (ID) Prefix ¶
Prefix this id to create a more selective id. This can be used to store multiple values under the same key. For example: prefix1(id) -> confidence prefix2(id) -> vertex This will return a new id and not modify the original id.
func (*ID) UnmarshalJSON ¶
func (*ID) UnmarshalText ¶
type NodeID ¶
type NodeID ShortID
func GenerateTestNodeID ¶
func GenerateTestNodeID() NodeID
GenerateTestNodeID returns a new ID that should only be used for testing
func NodeIDFromCert ¶
func NodeIDFromCert(cert *x509.Certificate) NodeID
func NodeIDFromString ¶
NodeIDFromString is the inverse of NodeID.String()
func (NodeID) MarshalJSON ¶
func (NodeID) MarshalText ¶
func (*NodeID) UnmarshalJSON ¶
func (*NodeID) UnmarshalText ¶
type NodeIDBag ¶
type NodeIDBag struct {
// contains filtered or unexported fields
}
NodeIDBag is a multiset of NodeIDs.
func (*NodeIDBag) AddCount ¶
AddCount increases the nubmer of times the id has been seen by count.
count must be >= 0
func (*NodeIDBag) List ¶
List returns a list of all IDs that have been added, without duplicates. e.g. a bag with {ID1, ID1, ID2} returns ids.ShortID[]{ID1, ID2}
func (*NodeIDBag) PrefixedString ¶
type NodeIDSet ¶
type NodeIDSet map[NodeID]struct{}
NodeIDSet is a set of NodeIDs
func NewNodeIDSet ¶
Return a new NodeIDSet with initial capacity [size]. More or less than [size] elements can be added to this set. Using NewNodeIDSet() rather than ids.NodeIDSet{} is just an optimization that can be used if you know how many elements will be put in this set.
func (*NodeIDSet) Add ¶
Add all the ids to this set, if the id is already in the set, nothing happens
func (NodeIDSet) CappedList ¶
CappedList returns a list of length at most [size]. Size should be >= 0. If size < 0, returns nil.
func (*NodeIDSet) Difference ¶
Difference removes all the ids from the provided set to this set.
func (*NodeIDSet) Pop ¶
Removes and returns an element. If the set is empty, does nothing and returns false
func (*NodeIDSet) Remove ¶
Remove all the id from this set, if the id isn't in the set, nothing happens
func (NodeIDSet) SortedList ¶
SortedList returns this set as a sorted list
type Set ¶
type Set map[ID]struct{}
Set is a set of IDs
func NewSet ¶
Return a new set with initial capacity [size]. More or less than [size] elements can be added to this set. Using NewSet() rather than ids.Set{} is just an optimization that can be used if you know how many elements will be put in this set.
func (Set) CappedList ¶
CappedList returns a list of length at most [size]. Size should be >= 0. If size < 0, returns nil.
func (*Set) Difference ¶
Difference removes all the ids from the provided set to this set.
func (*Set) MarshalJSON ¶
func (*Set) Pop ¶
Removes and returns an element. If the set is empty, does nothing and returns false.
func (Set) SortedList ¶
SortedList returns this set as a sorted list
type ShortID ¶
type ShortID [20]byte
ShortID wraps a 20 byte hash as an identifier
func GenerateTestShortID ¶
func GenerateTestShortID() ShortID
GenerateTestShortID returns a new ID that should only be used for testing
func ShortFromPrefixedString ¶
ShortFromPrefixedString returns a ShortID assuming the cb58 format is prefixed
func ShortFromString ¶
ShortFromString is the inverse of ShortID.String()
func (ShortID) Bytes ¶
Bytes returns the 20 byte hash as a slice. It is assumed this slice is not modified.
func (ShortID) MarshalJSON ¶
func (ShortID) MarshalText ¶
func (ShortID) PrefixedString ¶
PrefixedString returns the String representation with a prefix added
func (*ShortID) UnmarshalJSON ¶
func (*ShortID) UnmarshalText ¶
type ShortSet ¶
type ShortSet map[ShortID]struct{}
ShortSet is a set of ShortIDs
func NewShortSet ¶
Return a new ShortSet with initial capacity [size]. More or less than [size] elements can be added to this set. Using NewShortSet() rather than ids.ShortSet{} is just an optimization that can be used if you know how many elements will be put in this set.
func (*ShortSet) Add ¶
Add all the ids to this set, if the id is already in the set, nothing happens
func (ShortSet) CappedList ¶
CappedList returns a list of length at most [size]. Size should be >= 0. If size < 0, returns nil.
func (*ShortSet) Difference ¶
Difference removes all the ids from the provided set to this set.
func (*ShortSet) Pop ¶
Removes and returns an element. If the set is empty, does nothing and returns false
func (*ShortSet) Remove ¶
Remove all the id from this set, if the id isn't in the set, nothing happens
func (ShortSet) SortedList ¶
SortedList returns this set as a sorted list
type SliceStringer ¶
type SliceStringer []ID
func (SliceStringer) String ¶
func (s SliceStringer) String() string