lang: Move the Edge struct into the interfaces package
This makes it consumable from more than one package and avoids future cycles.
This commit is contained in:
@@ -5508,7 +5508,7 @@ func (obj *ExprList) Graph() (*pgraph.Graph, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fieldName := fmt.Sprintf("%d", index) // argNames as integers!
|
fieldName := fmt.Sprintf("%d", index) // argNames as integers!
|
||||||
edge := &funcs.Edge{Args: []string{fieldName}}
|
edge := &interfaces.FuncEdge{Args: []string{fieldName}}
|
||||||
|
|
||||||
var once bool
|
var once bool
|
||||||
edgeGenFn := func(v1, v2 pgraph.Vertex) pgraph.Edge {
|
edgeGenFn := func(v1, v2 pgraph.Vertex) pgraph.Edge {
|
||||||
@@ -5984,7 +5984,7 @@ func (obj *ExprMap) Graph() (*pgraph.Graph, error) {
|
|||||||
}
|
}
|
||||||
// do the key names ever change? -- yes
|
// do the key names ever change? -- yes
|
||||||
fieldName := fmt.Sprintf("key:%d", index) // stringify map key
|
fieldName := fmt.Sprintf("key:%d", index) // stringify map key
|
||||||
edge := &funcs.Edge{Args: []string{fieldName}}
|
edge := &interfaces.FuncEdge{Args: []string{fieldName}}
|
||||||
|
|
||||||
var once bool
|
var once bool
|
||||||
edgeGenFn := func(v1, v2 pgraph.Vertex) pgraph.Edge {
|
edgeGenFn := func(v1, v2 pgraph.Vertex) pgraph.Edge {
|
||||||
@@ -6004,7 +6004,7 @@ func (obj *ExprMap) Graph() (*pgraph.Graph, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
fieldName := fmt.Sprintf("val:%d", index) // stringify map val
|
fieldName := fmt.Sprintf("val:%d", index) // stringify map val
|
||||||
edge := &funcs.Edge{Args: []string{fieldName}}
|
edge := &interfaces.FuncEdge{Args: []string{fieldName}}
|
||||||
|
|
||||||
var once bool
|
var once bool
|
||||||
edgeGenFn := func(v1, v2 pgraph.Vertex) pgraph.Edge {
|
edgeGenFn := func(v1, v2 pgraph.Vertex) pgraph.Edge {
|
||||||
@@ -6396,7 +6396,7 @@ func (obj *ExprStruct) Graph() (*pgraph.Graph, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fieldName := x.Name
|
fieldName := x.Name
|
||||||
edge := &funcs.Edge{Args: []string{fieldName}}
|
edge := &interfaces.FuncEdge{Args: []string{fieldName}}
|
||||||
|
|
||||||
var once bool
|
var once bool
|
||||||
edgeGenFn := func(v1, v2 pgraph.Vertex) pgraph.Edge {
|
edgeGenFn := func(v1, v2 pgraph.Vertex) pgraph.Edge {
|
||||||
@@ -7209,7 +7209,7 @@ func (obj *ExprFunc) Graph() (*pgraph.Graph, error) {
|
|||||||
// when we add an edge from this, then we'll get two because the
|
// when we add an edge from this, then we'll get two because the
|
||||||
// contents aren't linked.
|
// contents aren't linked.
|
||||||
name := "body" // TODO: what should we name this?
|
name := "body" // TODO: what should we name this?
|
||||||
edge := &funcs.Edge{Args: []string{name}}
|
edge := &interfaces.FuncEdge{Args: []string{name}}
|
||||||
|
|
||||||
var once bool
|
var once bool
|
||||||
edgeGenFn := func(v1, v2 pgraph.Vertex) pgraph.Edge {
|
edgeGenFn := func(v1, v2 pgraph.Vertex) pgraph.Edge {
|
||||||
@@ -8221,9 +8221,9 @@ func (obj *ExprCall) Graph() (*pgraph.Graph, error) {
|
|||||||
|
|
||||||
//argName := fmt.Sprintf("%d", pos) // indexed!
|
//argName := fmt.Sprintf("%d", pos) // indexed!
|
||||||
argName := argNames[pos]
|
argName := argNames[pos]
|
||||||
edge := &funcs.Edge{Args: []string{argName}}
|
edge := &interfaces.FuncEdge{Args: []string{argName}}
|
||||||
// TODO: replace with:
|
// TODO: replace with:
|
||||||
//edge := &funcs.Edge{Args: []string{fmt.Sprintf("arg:%s", argName)}}
|
//edge := &interfaces.FuncEdge{Args: []string{fmt.Sprintf("arg:%s", argName)}}
|
||||||
|
|
||||||
var once bool
|
var once bool
|
||||||
edgeGenFn := func(v1, v2 pgraph.Vertex) pgraph.Edge {
|
edgeGenFn := func(v1, v2 pgraph.Vertex) pgraph.Edge {
|
||||||
@@ -8253,7 +8253,7 @@ func (obj *ExprCall) Graph() (*pgraph.Graph, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
edge := &funcs.Edge{Args: []string{fmt.Sprintf("call:%s", obj.Name)}}
|
edge := &interfaces.FuncEdge{Args: []string{fmt.Sprintf("call:%s", obj.Name)}}
|
||||||
|
|
||||||
var once bool
|
var once bool
|
||||||
edgeGenFn := func(v1, v2 pgraph.Vertex) pgraph.Edge {
|
edgeGenFn := func(v1, v2 pgraph.Vertex) pgraph.Edge {
|
||||||
@@ -8536,7 +8536,7 @@ func (obj *ExprVar) Graph() (*pgraph.Graph, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
edge := &funcs.Edge{Args: []string{fmt.Sprintf("var:%s", obj.Name)}}
|
edge := &interfaces.FuncEdge{Args: []string{fmt.Sprintf("var:%s", obj.Name)}}
|
||||||
|
|
||||||
var once bool
|
var once bool
|
||||||
edgeGenFn := func(v1, v2 pgraph.Vertex) pgraph.Edge {
|
edgeGenFn := func(v1, v2 pgraph.Vertex) pgraph.Edge {
|
||||||
@@ -8949,7 +8949,7 @@ func (obj *ExprIf) Graph() (*pgraph.Graph, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
edge := &funcs.Edge{Args: []string{argName}}
|
edge := &interfaces.FuncEdge{Args: []string{argName}}
|
||||||
|
|
||||||
var once bool
|
var once bool
|
||||||
edgeGenFn := func(v1, v2 pgraph.Vertex) pgraph.Edge {
|
edgeGenFn := func(v1, v2 pgraph.Vertex) pgraph.Edge {
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ package funcs
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/purpleidea/mgmt/engine"
|
"github.com/purpleidea/mgmt/engine"
|
||||||
@@ -86,17 +85,6 @@ func (obj *State) String() string {
|
|||||||
return obj.Expr.String()
|
return obj.Expr.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Edge links an output vertex (value) to an input vertex with a named argument.
|
|
||||||
type Edge struct {
|
|
||||||
Args []string // list of named args that this edge sends to
|
|
||||||
}
|
|
||||||
|
|
||||||
// String displays the list of arguments this edge satisfies. It is a required
|
|
||||||
// property to be a valid pgraph.Edge.
|
|
||||||
func (obj *Edge) String() string {
|
|
||||||
return strings.Join(obj.Args, ", ")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Engine represents the running time varying directed acyclic function graph.
|
// Engine represents the running time varying directed acyclic function graph.
|
||||||
type Engine struct {
|
type Engine struct {
|
||||||
Graph *pgraph.Graph
|
Graph *pgraph.Graph
|
||||||
@@ -205,7 +193,7 @@ func (obj *Engine) Validate() error {
|
|||||||
ptrs = append(ptrs, node.handle)
|
ptrs = append(ptrs, node.handle)
|
||||||
}
|
}
|
||||||
for _, edge := range obj.Graph.Edges() {
|
for _, edge := range obj.Graph.Edges() {
|
||||||
if _, ok := edge.(*Edge); !ok {
|
if _, ok := edge.(*interfaces.FuncEdge); !ok {
|
||||||
e := fmt.Errorf("edge `%s` was not the correct type", edge)
|
e := fmt.Errorf("edge `%s` was not the correct type", edge)
|
||||||
err = errwrap.Append(err, e)
|
err = errwrap.Append(err, e)
|
||||||
}
|
}
|
||||||
@@ -250,7 +238,7 @@ func (obj *Engine) Validate() error {
|
|||||||
node1 := obj.state[vertex1]
|
node1 := obj.state[vertex1]
|
||||||
for vertex2, edge := range obj.Graph.Adjacency()[vertex1] {
|
for vertex2, edge := range obj.Graph.Adjacency()[vertex1] {
|
||||||
node2 := obj.state[vertex2]
|
node2 := obj.state[vertex2]
|
||||||
edge := edge.(*Edge)
|
edge := edge.(*interfaces.FuncEdge)
|
||||||
// check vertex1 -> vertex2 (with e) is valid
|
// check vertex1 -> vertex2 (with e) is valid
|
||||||
|
|
||||||
for _, arg := range edge.Args { // loop over each arg
|
for _, arg := range edge.Args { // loop over each arg
|
||||||
@@ -378,7 +366,7 @@ func (obj *Engine) Run() error {
|
|||||||
}
|
}
|
||||||
st := types.NewStruct(si)
|
st := types.NewStruct(si)
|
||||||
for _, v := range incoming {
|
for _, v := range incoming {
|
||||||
args := obj.Graph.Adjacency()[v][vertex].(*Edge).Args
|
args := obj.Graph.Adjacency()[v][vertex].(*interfaces.FuncEdge).Args
|
||||||
from := obj.state[v]
|
from := obj.state[v]
|
||||||
obj.mutex.RLock()
|
obj.mutex.RLock()
|
||||||
value, exists := obj.table[v]
|
value, exists := obj.table[v]
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
package interfaces
|
package interfaces
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/purpleidea/mgmt/engine"
|
"github.com/purpleidea/mgmt/engine"
|
||||||
"github.com/purpleidea/mgmt/lang/types"
|
"github.com/purpleidea/mgmt/lang/types"
|
||||||
)
|
)
|
||||||
@@ -187,3 +189,15 @@ type DataFunc interface {
|
|||||||
// context.
|
// context.
|
||||||
SetData(*FuncData)
|
SetData(*FuncData)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FuncEdge links an output vertex (value) to an input vertex with a named
|
||||||
|
// argument.
|
||||||
|
type FuncEdge struct {
|
||||||
|
Args []string // list of named args that this edge sends to
|
||||||
|
}
|
||||||
|
|
||||||
|
// String displays the list of arguments this edge satisfies. It is a required
|
||||||
|
// property to be a valid pgraph.Edge.
|
||||||
|
func (obj *FuncEdge) String() string {
|
||||||
|
return strings.Join(obj.Args, ", ")
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user