coredns/plugin/file/tree/walk.go
Miek Gieben 1d5095cf67
plugin/file: Rename do to walk and cleanup and document (#2987)
* plugin/file: Rename do to walk, cleanup and document

* This renames Do to Walk to be more inline with Go standards. Also make
  it return an error instead of a bool.
  Also give give walk access to rrs. Alternatively e.m could be
  exported, but just access the map of rrs should work as well. Another
  alternative would be adding a whole bunch of helper functions, but
  those need grab and return the data. Just having access to the rrs
  should be easiest for most Walks.
* It adds Type and TypeForWildcard to show the different functions
* *Removes* the identical RR check when inserting; this was only done
  for A, AAAA and MX and not finished; removed under the mantra garbage
  in garbage out.
* Reuses Types to return all the types in an *tree.Elem

Signed-off-by: Miek Gieben <miek@miek.nl>

* better comments

Signed-off-by: Miek Gieben <miek@miek.nl>
2019-07-18 17:44:47 +00:00

30 lines
748 B
Go

package tree
import "github.com/miekg/dns"
// Walk performs fn on all values stored in the tree. If a non-nil error is returned the
// Walk was interrupted by an fn returning that error. If fn alters stored values' sort
// relationships, future tree operation behaviors are undefined.
func (t *Tree) Walk(fn func(e *Elem, rrs map[uint16][]dns.RR) error) error {
if t.Root == nil {
return nil
}
return t.Root.walk(fn)
}
func (n *Node) walk(fn func(e *Elem, rrs map[uint16][]dns.RR) error) error {
if n.Left != nil {
if err := n.Left.walk(fn); err != nil {
return err
}
}
if err := fn(n.Elem, n.Elem.m); err != nil {
return err
}
if n.Right != nil {
if err := n.Right.walk(fn); err != nil {
return err
}
}
return nil
}