String implements proto.Message and output human readable multiline representation. A node is in form of -> + * = E.g.: 000->#000+4*3 001->#001+4*2 003->#004+8=0 006->#007+4=1 004->#005+1=2 006->#008+4=3 002->#002+4=4 006->#006+4=5 006->#009+8=6 003->#
()
| 28 | // |
| 29 | // Since 0.4.3 |
| 30 | func (st *SlimTrie) String() string { |
| 31 | |
| 32 | // empty SlimTrie |
| 33 | if st.inner.NodeTypeBM == nil { |
| 34 | return "" |
| 35 | } |
| 36 | |
| 37 | s := &slimTrieStringly{ |
| 38 | st: st, |
| 39 | inners: bitmap.ToArray(st.inner.NodeTypeBM.Words), |
| 40 | labels: make(map[int32]map[string]int32), |
| 41 | } |
| 42 | |
| 43 | ch := st.inner |
| 44 | n := &querySession{} |
| 45 | emp := querySession{} |
| 46 | |
| 47 | for _, nid := range s.inners { |
| 48 | *n = emp |
| 49 | |
| 50 | s.labels[nid] = make(map[string]int32) |
| 51 | |
| 52 | st.getNode(nid, n) |
| 53 | |
| 54 | paths := st.getLabels(n) |
| 55 | |
| 56 | leftChildId, _ := bitmap.Rank128(ch.Inners.Words, ch.Inners.RankIndex, n.from) |
| 57 | |
| 58 | for i, l := range paths { |
| 59 | lstr := bmtree.PathStr(l) |
| 60 | s.labels[nid][lstr] = leftChildId + 1 + int32(i) |
| 61 | } |
| 62 | } |
| 63 | |
| 64 | return tree.String(s) |
| 65 | } |
| 66 | |
| 67 | // slimTrieStringly is a wrapper that implements tree.Tree . |
| 68 | // It is a helper to convert SlimTrie to string. |