diff --git a/node.go b/node.go index 8055ae9..269a689 100644 --- a/node.go +++ b/node.go @@ -67,6 +67,11 @@ func newNode[V any]() *node[V] { } } +// isEmpty returns true if node has neither prefixes nor children. +func (n *node[V]) isEmpty() bool { + return len(n.prefixes.values) == 0 && len(n.children.nodes) == 0 +} + // ################## prefixes ################################## // rank is the key of the popcount compression algorithm, diff --git a/table.go b/table.go index 8543640..b060030 100644 --- a/table.go +++ b/table.go @@ -160,10 +160,9 @@ func (t *Table[V]) Delete(pfx netip.Prefix) { break } - // is this an empty node? - if len(n.prefixes.values) == 0 && len(n.children.nodes) == 0 { - - // purge this node from parents childs + // an empty node? + if n.isEmpty() { + // purge this node from parents children parent := pathStack[depth-1] parent.children.delete(uint(bs[depth-1])) }