func (p *Trie) outputDot(vec *vector.StringVector, rune int, serial int64, rgen *rand.Rand) { this := make([]byte, 10) child := make([]byte, 10) utf8.EncodeRune(this, rune) thisChar := string(this[0]) if serial == -1 { thisChar = "root" } for childRune, childNode := range p.children { utf8.EncodeRune(child, childRune) childSerial := rgen.Int63() childNodeStr := fmt.Sprintf("\"%s(%d)\"", string(child[0]), childSerial) var notation string if string(child[0]) == "/" { notation = fmt.Sprintf("[label=\"%s\" shape=box color=red]", string(child[0])) } else { notation = fmt.Sprintf("[label=\"%s\"]", string(child[0])) } vec.Push(fmt.Sprintf("\t%s %s\n\t\"%s(%d)\" -> \"%s(%d)\"", childNodeStr, notation, thisChar, serial, string(child[0]), childSerial)) childNode.outputDot(vec, childRune, childSerial, rgen) } }
// randInt64 returns a random integer taking half the range of an int64. func randInt64(rand *rand.Rand) int64 { return rand.Int63() - 1<<62 }