diff options
Diffstat (limited to 'vendor/github.com/tchap/go-patricia/patricia/children.go')
-rw-r--r-- | vendor/github.com/tchap/go-patricia/patricia/children.go | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/vendor/github.com/tchap/go-patricia/patricia/children.go b/vendor/github.com/tchap/go-patricia/patricia/children.go index a5677c335..bcfd0a5dd 100644 --- a/vendor/github.com/tchap/go-patricia/patricia/children.go +++ b/vendor/github.com/tchap/go-patricia/patricia/children.go @@ -20,6 +20,7 @@ type childList interface { next(b byte) *Trie walk(prefix *Prefix, visitor VisitorFunc) error print(w io.Writer, indent int) + clone() childList total() int } @@ -143,6 +144,17 @@ func (list *sparseChildList) total() int { return tot } +func (list *sparseChildList) clone() childList { + clones := make(tries, len(list.children), cap(list.children)) + for i, child := range list.children { + clones[i] = child.Clone() + } + + return &sparseChildList{ + children: clones, + } +} + func (list *sparseChildList) print(w io.Writer, indent int) { for _, child := range list.children { if child != nil { @@ -314,6 +326,32 @@ func (list *denseChildList) print(w io.Writer, indent int) { } } +func (list *denseChildList) clone() childList { + clones := make(tries, cap(list.children)) + + if list.numChildren != 0 { + clonedCount := 0 + for i := list.headIndex; i < len(list.children); i++ { + child := list.children[i] + if child != nil { + clones[i] = child.Clone() + clonedCount++ + if clonedCount == list.numChildren { + break + } + } + } + } + + return &denseChildList{ + min: list.min, + max: list.max, + numChildren: list.numChildren, + headIndex: list.headIndex, + children: clones, + } +} + func (list *denseChildList) total() int { tot := 0 for _, child := range list.children { |