/
combo.go
73 lines (66 loc) · 1.78 KB
/
combo.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
package graph
import "github.com/3th1nk/easygo/util/mapUtil"
// Combo 组合
type Combo struct {
Id string `json:"id,omitempty"` // 组合 ID,在一个图中唯一
Type string `json:"type,omitempty"` // 组合类型(可选,可以用于指示 Data 的结构)
ComboId string `json:"combo_id,omitempty"` // 父级 Combo 的 ID
Data mapUtil.StringObjectMap `json:"data,omitempty"` // 节点数据
}
type comboWrap struct {
*Combo
nodes map[string]*nodeWrap
combos map[string]*comboWrap
}
// GetNodes 获取组合下的节点(不含子组合下的节点)
func (this *comboWrap) GetNodes() []*Node {
if n := len(this.nodes); n == 0 {
return nil
} else {
arr := make([]*Node, 0, n)
for _, v := range this.nodes {
arr = append(arr, v.Node)
}
return arr
}
}
// GetAllNodes 获取 组合 及 子组合 下所有的节点
func (this *comboWrap) GetAllNodes() []*Node {
if n := len(this.nodes); n == 0 {
return nil
} else {
arr := make([]*Node, 0, n)
for _, v := range this.nodes {
arr = append(arr, v.Node)
}
for _, v := range this.combos {
arr = append(arr, v.GetAllNodes()...)
}
return arr
}
}
// GetCombos 获取组合下直接嵌套的组合
func (this *comboWrap) GetCombos() []*Combo {
if n := len(this.combos); n == 0 {
return nil
} else {
arr := make([]*Combo, 0, n)
for _, v := range this.combos {
arr = append(arr, v.Combo)
}
return arr
}
}
// GetAllCombos 获取组合 及 子组合 下所有的组合
func (this *comboWrap) GetAllCombos() []*Combo {
if n := len(this.combos); n == 0 {
return nil
} else {
arr := make([]*Combo, 0, n)
for _, v := range this.combos {
arr = append(arr, v.Combo)
arr = append(arr, v.GetAllCombos()...)
}
return arr
}
}