forked from cchamplin/gocrush
-
Notifications
You must be signed in to change notification settings - Fork 0
/
node.go
78 lines (63 loc) · 1.22 KB
/
node.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package gocrush
type Node interface {
GetChildren() []Node
GetType() int
GetWeight() int64
GetId() string
IsFailed() bool
GetSelector() Selector
SetSelector(Selector)
GetParent() Node
IsLeaf() bool
Select(input int64, round int64) Node
}
type Comparitor func(Node) bool
type CrushNode struct {
Selector Selector
}
type TestingNode struct {
Children []Node
CrushNode
Weight int64
Parent Node
Failed bool
Id string
Type int
}
func (n CrushNode) GetSelector() Selector {
return n.Selector
}
func (n CrushNode) SetSelector(Selector Selector) {
n.Selector = Selector
}
func (n CrushNode) Select(input int64, round int64) Node {
return n.GetSelector().Select(input, round)
}
func (n TestingNode) IsFailed() bool {
return n.Failed
}
func (n TestingNode) IsLeaf() bool {
return len(n.Children) == 0
}
func (n TestingNode) GetParent() Node {
return n.Parent
}
func (n TestingNode) GetId() string {
return n.Id
}
func (n TestingNode) GetWeight() int64 {
return n.Weight
}
func (n TestingNode) GetType() int {
return n.Type
}
func (n TestingNode) GetChildren() []Node {
return n.Children
}
func TestCompare(n Node) bool {
tNode, ok := n.(TestingNode)
if ok {
return len(tNode.Children) > 0
}
return false
}