public void GrowGraph(IEnumerable <double> Instructions) { List <DirectedNode> leafs = this.GetLeafs(); int num = 0; int num1 = 1; int num2 = checked (Instructions.Count <double>() - 1); for (int i = 0; i <= num2; i = checked (i + 1)) { double num3 = Instructions.ElementAtOrDefault <double>(i); double num4 = num3; if (num4 == 0) { leafs.Clear(); leafs = this.GetLeafs(); num = 0; } else if (num4 >= 1) { leafs.Clear(); leafs = this.GetLeafs(); num = checked ((int)Math.Round(((double)num + num3 + (double)leafs.Count) % (double)leafs.Count)); } else { DirectedNode item = leafs[num]; item.AddChild(new DirectedNode(num1, num3 * item.Value)); num1 = checked (num1 + 1); item.AddChild(new DirectedNode(num1, (1 - num3) * item.Value)); num1 = checked (num1 + 1); num = checked (num + 1); } if (num > checked (leafs.Count - 1)) { leafs.Clear(); leafs = this.GetLeafs(); num = 0; } } }
public bool CollapseGraph(DirectedNode.CollapseMethod Collapse = 0, double[] CollapseValues = null) { if (CollapseValues != null) { DirectedNode.CollapseMethod collapse = Collapse; if (collapse == DirectedNode.CollapseMethod.LowestHighest || collapse == DirectedNode.CollapseMethod.LowestLowest) { List <DirectedNode> leafs = this.GetLeafs(); int num = -1; while (leafs.Count > 1) { int[] numArray = new int[checked (checked (leafs.Count - 1) + 1)]; double[] collapseValues = new double[checked (checked (leafs.Count - 1) + 1)]; int count = checked (leafs.Count - 1); for (int i = 0; i <= count; i = checked (i + 1)) { numArray[i] = i; collapseValues[i] = CollapseValues[i]; } Array.Sort <double, int>(collapseValues, numArray); DirectedNode item = leafs[numArray[0]]; DirectedNode directedNode = null; if (Collapse == DirectedNode.CollapseMethod.LowestLowest) { directedNode = leafs[numArray[1]]; } else if (Collapse == DirectedNode.CollapseMethod.LowestHighest) { directedNode = leafs[numArray[checked ((int)numArray.Length - 1)]]; } DirectedNode directedNode1 = new DirectedNode(num, item.Value + directedNode.Value); num = checked (num - 1); item.AddChild(directedNode1); directedNode.AddChild(directedNode1); leafs.Clear(); leafs = this.GetLeafs(); List <DirectedNode> directedNodes = new List <DirectedNode>(); HashSet <int> nums = new HashSet <int>(); int count1 = checked (leafs.Count - 1); for (int j = 0; j <= count1; j = checked (j + 1)) { if (!nums.Contains(leafs[j].ID)) { directedNodes.Add(leafs[j]); nums.Add(leafs[j].ID); } } leafs = directedNodes; } } } else { DirectedNode.CollapseMethod collapseMethod = Collapse; if (collapseMethod == DirectedNode.CollapseMethod.LowestHighest || collapseMethod == DirectedNode.CollapseMethod.LowestLowest) { List <DirectedNode> leafs1 = this.GetLeafs(); int num1 = -1; while (leafs1.Count > 1) { int[] numArray1 = new int[checked (checked (leafs1.Count - 1) + 1)]; double[] value = new double[checked (checked (leafs1.Count - 1) + 1)]; int count2 = checked (leafs1.Count - 1); for (int k = 0; k <= count2; k = checked (k + 1)) { numArray1[k] = k; value[k] = leafs1[k].Value; } Array.Sort <double, int>(value, numArray1); DirectedNode item1 = leafs1[numArray1[0]]; DirectedNode item2 = null; if (Collapse == DirectedNode.CollapseMethod.LowestLowest) { item2 = leafs1[numArray1[1]]; } else if (Collapse == DirectedNode.CollapseMethod.LowestHighest) { item2 = leafs1[numArray1[checked ((int)numArray1.Length - 1)]]; } DirectedNode directedNode2 = new DirectedNode(num1, item1.Value + item2.Value); num1 = checked (num1 - 1); item1.AddChild(directedNode2); item2.AddChild(directedNode2); leafs1.Clear(); leafs1 = this.GetLeafs(); List <DirectedNode> directedNodes1 = new List <DirectedNode>(); HashSet <int> nums1 = new HashSet <int>(); int num2 = checked (leafs1.Count - 1); for (int l = 0; l <= num2; l = checked (l + 1)) { if (!nums1.Contains(leafs1[l].ID)) { directedNodes1.Add(leafs1[l]); nums1.Add(leafs1[l].ID); } } leafs1 = directedNodes1; } } } return(true); }