예제 #1
0
 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);
 }
예제 #2
0
        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);
        }
예제 #3
0
 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);
     }
 }