public void Add(Node node, bool isOutput = false, bool isInput = false) { if (isOutput && !Outputs.Contains(node)) { Outputs.Add(node); } if (isInput && !Inputs.Contains(node)) { Inputs.Add(node); } if (graph.ContainsVertex(node)) { return; } if (!NodeIndex.ContainsKey(node.Value)) { NodeIndex[node.Value] = node; } else if (NodeIndex[node.Value] != node) { NodeIndex[node.Value] = node; //TODO: this could be really bad!!! //throw new InvalidOperationException($"a node with the value '{node.Value}' already exists!"); } graph.AddVertex(node); node.OnAdd(this); }
public virtual Node Node(object value) { if (value is Node n && NodeIndex.ContainsKey(n.Value)) { return(NodeIndex[n.Value]); } if (NodeIndex.ContainsKey(value)) { return(NodeIndex[value]); } var node = DefaultInput == null?NewNode(value) : DynamicNode(DefaultInput)(value); NodeIndex[node.Value] = node; return(node); }
public Node Node(object subject, string predicate, params string[] objs) { if (NodeIndex.ContainsKey(subject)) { Node node = NodeIndex[subject]; node.Edges.Clear(); foreach (var obj in objs) { node.AddEdge(Node(predicate), Node(obj)); } return(node); } else { var node = NewNode(subject); foreach (var obj in objs) { node.AddEdge(Node(predicate), Node(obj)); } NodeIndex[node.Value] = node; return(node); } }