public void Add(int nodeId, LogicNode newNode)
 {
     LogicNode c;
     if (Nodes.TryGetValue(nodeId, out c))
         Nodes[nodeId] = newNode;
     else
         Nodes.Add(nodeId, newNode);
 }
        public void ParseXml(XElement data)
        {
            var logicNodes = data.Elements("logicNode").ToList();
            for (var i = 0; i < logicNodes.Count; i++)
            {
                try
                {
                    int id;
                    var idTest = Input.GetAttribute(logicNodes[i], "id");
                    if (string.IsNullOrWhiteSpace(idTest)) id = i; //if no id is supplied use the index
                    else
                    {
                        idTest = idTest.ToUpper();
                        if (idTest[0] >= 'A' && idTest[0] <= 'Z')  //preferred format is A, B, C, etc. to match equation
                            id = idTest[0] - 'A';
                        else if (!int.TryParse(idTest, out id)) //numerical ids are also accepted where 0 = A
                        {
                            if (BoostLog.Instance != null)
                                BoostLog.Instance.WriteEntry(EventLogEntryType.Error,
                                    string.Format("Illegal LogicNode id {0}", idTest), "", Alias);
                            id = i; //in case of error, use index
                        }
                    }
                    var lNode = new LogicNode(Alias, logicNodes[i]);
                    Add(id, lNode);
                }
                catch
                {
                    continue;
                }
            }

            var equation = data.Element("logicEquation");
            Logic = new LogicEquation(Alias, equation, _maxNodeId);
        }
 public bool Equals(LogicNode testNode)
 {
     //only compare names if one is provided
     if (!string.IsNullOrEmpty(Name) && !string.IsNullOrEmpty(testNode.Name) && !Name.Equals(testNode.Name)) return false;
     if (!Op.Equals(testNode.Op)) return false;
     if (!Nodes[0].Equals(testNode.Nodes[0])) return false;
     return Nodes[1].Equals(testNode.Nodes[1]);
 }