// Walks the tree and gets the flat Meta data func GetMeta(root *Node) (*horcrux.Meta, error) { var Meta *horcrux.Meta var queue [MIN_KIDS * MIN_KIDS]*Node if root == nil { log.Error("GetMeta: nil root") return nil, syscall.EINVAL } q := queue[0:0] Meta = new(horcrux.Meta) Meta.Entries = make([]horcrux.Entry, 0, MIN_KIDS*MIN_KIDS) node := root idx := 0 for node != nil { /* log.WithFields(log.Fields{ "Idx": idx, "Name": node.Entry.Name, "Prefix": node.Entry.Prefix, }).Debug("Getting Entry") */ Meta.Entries = append(Meta.Entries, node.Entry) idx++ for i := 0; i < node.numKids; i++ { name := node.kidsArr[i] n := node.kidsMap[name] /* log.WithFields(log.Fields{ "Entry Name": n.Entry.Name, "Entry Prefix": n.Entry.Prefix, }).Debug("Queuing node..") */ q = enqueue(q, n) } q, node = dequeue(q) } Meta.NumFiles = idx Meta.Entries = Meta.Entries[:idx] return Meta, nil }