public void LinkNode(INode node) { var latestNode = KeyNodes.Last().Key; if (latestNode == null) { return; } if (latestNode is ArrayNode) { var arrayNode = latestNode as ArrayNode; //arrayNode.Values } else if (latestNode is KeyArrayNode) { var keyArrayNode = latestNode as KeyArrayNode; //keyArrayNode.Values } else if (latestNode is KeyValueNode) { var keyValueNode = latestNode as KeyValueNode; if (keyValueNode.Value == null) { keyValueNode.Value = node; } } else if (latestNode is ListKeyValueNode) { var listKeyValueNode = latestNode as ListKeyValueNode; if (listKeyValueNode.Values == null) { } } }
// topologically sort the graph to work out calculation order public Dictionary <string, int> CalculateWeights() { var remainingNodes = new SortedSet <int>(Nodes.Select(n => n.ID).Union(KeyNodes.Select(k => k.Value.ID))); var markedNodes = new SortedSet <int>(); var processors = Nodes.ToDictionary(n => n.ID, n => RFGraphDefinition.GetFullName(n.GraphName, n.Label)); var visitOrder = new List <int>(); while (remainingNodes.Any()) { var remainingNode = remainingNodes.First(); Visit(remainingNode, markedNodes, remainingNodes, visitOrder); } var weights = new Dictionary <string, int>(); int idx = 1; visitOrder.Reverse(); foreach (var node in visitOrder) { if (processors.ContainsKey(node)) { weights.Add(processors[node], idx++); } } return(weights); }
public void ToggleSwitch(string name, bool on) { if (KeyNodes.ContainsKey(name)) { Log.Info("{0} toggled as {1}", name, on); KeyNodes[name].SetActive(on); } }