Skip to content

Commit 5cc0a37

Browse files
author
mobus
committed
add patricia datastructure
1 parent 0f70a24 commit 5cc0a37

File tree

6 files changed

+2176
-0
lines changed

6 files changed

+2176
-0
lines changed

examples/paricia/main.go

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/sunvim/utils/patricia"
7+
)
8+
9+
func main() {
10+
// Create a new tree.
11+
trie := patricia.NewTrie()
12+
13+
// Insert some items.
14+
trie.Insert(patricia.Prefix("Pepa Novak"), 1)
15+
trie.Insert(patricia.Prefix("Pepa Sindelar"), 2)
16+
trie.Insert(patricia.Prefix("Karel Macha"), 3)
17+
trie.Insert(patricia.Prefix("Karel Hynek Macha"), 4)
18+
19+
// Just check if some things are present in the tree.
20+
key := patricia.Prefix("Pepa Novak")
21+
fmt.Printf("%q present? %v\n", key, trie.Match(key))
22+
key = patricia.Prefix("Karel")
23+
fmt.Printf("Anybody called %q here? %v\n", key, trie.MatchSubtree(key))
24+
25+
// Walk the tree.
26+
trie.Visit(printItem)
27+
// "Karel Hynek Macha": 4
28+
// "Karel Macha": 3
29+
// "Pepa Novak": 1
30+
// "Pepa Sindelar": 2
31+
32+
// Walk a subtree.
33+
trie.VisitSubtree(patricia.Prefix("Pepa"), printItem)
34+
// "Pepa Novak": 1
35+
// "Pepa Sindelar": 2
36+
37+
// Modify an item, then fetch it from the tree.
38+
trie.Set(patricia.Prefix("Karel Hynek Macha"), 10)
39+
key = patricia.Prefix("Karel Hynek Macha")
40+
fmt.Printf("%q: %v\n", key, trie.Get(key))
41+
// "Karel Hynek Macha": 10
42+
43+
// Walk prefixes.
44+
prefix := patricia.Prefix("Karel Hynek Macha je kouzelnik")
45+
trie.VisitPrefixes(prefix, printItem)
46+
// "Karel Hynek Macha": 10
47+
48+
// Delete some items.
49+
trie.Delete(patricia.Prefix("Pepa Novak"))
50+
trie.Delete(patricia.Prefix("Karel Macha"))
51+
52+
// Walk again.
53+
trie.Visit(printItem)
54+
// "Karel Hynek Macha": 10
55+
// "Pepa Sindelar": 2
56+
57+
// Delete a subtree.
58+
trie.DeleteSubtree(patricia.Prefix("Pepa"))
59+
60+
// Print what is left.
61+
trie.Visit(printItem)
62+
// "Karel Hynek Macha": 10
63+
64+
}
65+
66+
func printItem(prefix patricia.Prefix, item patricia.Item) error {
67+
fmt.Printf("%s %v\n", prefix, item)
68+
return nil
69+
}

0 commit comments

Comments
 (0)