commit 3dfc7e093f515d02124c56f3b0a69bbbeb98ccd2 Author: Vincent Batts Date: Sun Apr 13 10:18:11 2014 -0400 initial commit diff --git a/huffman.go b/huffman.go new file mode 100644 index 0000000..38c0bea --- /dev/null +++ b/huffman.go @@ -0,0 +1,52 @@ +package huff + +import ( + "container/heap" +) + +type Node struct { + Weight int64 + Value interface{} + Left *Node + Right *Node +} + +func (n Node) Lookup(value interface{}) *Node { + return nil +} + +func NewPathTree(paths []string) *Node { + nodes := []Node{} + for i := range paths { + node := Node{Weight: int64(i + 1), Value: paths[i]} + nodes = append(nodes, node) + } + + nodeHeap := nodeInterface(nodes) + heap.Init(nodeHeap) + + return &Node{} +} + +func Combine(left *Node, right *Node) *Node { + var weight int64 + if left != nil { + weight = weight + left.Weight + } + if right != nil { + weight = weight + right.Weight + } + return &Node{ + Weight: weight, + Left: left, + Right: right, + } +} + +type nodeInterface []Node + +func (ni nodeInterface) Push(x interface{}) {} +func (ni nodeInterface) Pop() interface{} { return Node{} } +func (ni nodeInterface) Len() int { return len(ni) } +func (ni nodeInterface) Less(i, j int) bool { return ni[i].Weight < ni[j].Weight } +func (ni nodeInterface) Swap(i, j int) { ni[i], ni[j] = ni[j], ni[i] } diff --git a/huffman_test.go b/huffman_test.go new file mode 100644 index 0000000..582aad6 --- /dev/null +++ b/huffman_test.go @@ -0,0 +1,20 @@ +package huff + +import ( + "fmt" + "testing" +) + +func TestNode(t *testing.T) { + paths := []string{ + "/content/dist/rhel/server/6/$releasever/$relarch/os", + "/content/dist/rhui/server/6/$releasever/$relarch/os", + "/content/beta/rhel/server/6/$releasever/$relarch/os", + "/content/beta/rhel/server/7/$releasever/$relarch/os", + "/content/beta/rhui/server/6/$releasever/$relarch/os", + "/content/beta/rhui/server/7/$releasever/$relarch/os", + } + + pt := NewPathTree(paths) + fmt.Printf("%#v\n", pt) +}