Example #1
0
// 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
}