33 lines
578 B
Go
33 lines
578 B
Go
package cat
|
|
|
|
type entry struct {
|
|
name string
|
|
fqname string
|
|
content string
|
|
children []entry
|
|
}
|
|
|
|
func (e entry) filter(ok func(e entry) bool) entry {
|
|
children := make([]entry, 0, len(e.children))
|
|
for _, entry := range e.children {
|
|
if !ok(entry) {
|
|
continue
|
|
}
|
|
children = append(children, entry.filter(ok))
|
|
}
|
|
|
|
return entry{
|
|
name: e.name,
|
|
fqname: e.fqname,
|
|
content: e.content,
|
|
children: children,
|
|
}
|
|
}
|
|
|
|
func (e entry) traverse(lvl int, do func(e entry, lvl int)) {
|
|
do(e, lvl)
|
|
for _, entry := range e.children {
|
|
entry.traverse(lvl+1, do)
|
|
}
|
|
}
|