func NewStandardTree() *Tree {
	return NewTree("/", "+", "#")
}
NewStandardTree returns a new Tree using the standard MQTT separator and
wildcards.
package topic
import (
	"fmt"
	"strings"
	"sync"
)
type node struct {
	children map[string]*node
	values   []interface{}
}
func newNode() *node {
	return &node{
		children: make(map[string]*node),
	}
}
func (n *node) removeValue(value interface{}) {
	for i, v := range n.values {
		if v == value {
			n.values[i] = n.values[len(n.values)-1]
			n.values[len(n.values)-1] = nil
			n.values = n.values[:len(n.values)-1]
			break
		}
	}
}
func (n *node) clearValues() {
	n.values = []interface{}{}
}
func (n *node) string(level int) string {
	str := ""
	if level != 0 {
		str = fmt.Sprintf("%d", len(n.values))
	}
	for key, node := range n.children {
		str += fmt.Sprintf("\n| %s'%s' => %s", strings.Repeat(" ", level*2), key, node.string(level+1))
	}
	return str
}
type Tree struct {
	separator    string
	wildcardOne  string
	wildcardSome string
	root         *node
	mutex        sync.RWMutex
}
func NewTree(separator, wildcardOne, wildcardSome string) *Tree {
	return &Tree{
		separator:    separator,
		wildcardOne:  wildcardOne,
		wildcardSome: wildcardSome,
		root:         newNode(),
	}
}