Changeset 4106 for trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/SymbolicExpressionTreeNode.cs
- Timestamp:
- 07/26/10 16:18:45 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/SymbolicExpressionTreeNode.cs
r4068 r4106 51 51 } 52 52 53 publicSymbolicExpressionTreeNode() {53 internal SymbolicExpressionTreeNode() { 54 54 // don't allocate subtrees list here! 55 55 // because we don't want to allocate it in terminal nodes … … 85 85 } 86 86 87 internalvirtual ISymbolicExpressionGrammar Grammar {87 public virtual ISymbolicExpressionGrammar Grammar { 88 88 get { return parent.Grammar; } 89 89 set { throw new NotSupportedException("Grammar can be set only for SymbolicExpressionTreeTopLevelNodes."); } … … 94 94 else { 95 95 size = 1; 96 for (int i = 0; i < SubTrees.Count; i++) size += (short)SubTrees[i].GetSize(); 96 if (SubTrees != null) { 97 for (int i = 0; i < SubTrees.Count; i++) size += (short)SubTrees[i].GetSize(); 98 } 97 99 return size; 98 100 } … … 102 104 if (height > 0) return height; 103 105 else { 104 for (int i = 0; i < SubTrees.Count; i++) height = Math.Max(height, (short)SubTrees[i].GetHeight()); 106 if (SubTrees != null) { 107 for (int i = 0; i < SubTrees.Count; i++) height = Math.Max(height, (short)SubTrees[i].GetHeight()); 108 } 105 109 height++; 106 110 return height; … … 112 116 113 117 public virtual void AddSubTree(SymbolicExpressionTreeNode tree) { 114 subTrees.Add(tree);118 SubTrees.Add(tree); 115 119 tree.Parent = this; 116 120 ResetCachedValues(); … … 118 122 119 123 public virtual void InsertSubTree(int index, SymbolicExpressionTreeNode tree) { 120 subTrees.Insert(index, tree);124 SubTrees.Insert(index, tree); 121 125 tree.Parent = this; 122 126 ResetCachedValues(); … … 124 128 125 129 public virtual void RemoveSubTree(int index) { 126 subTrees[index].Parent = null;127 subTrees.RemoveAt(index);130 SubTrees[index].Parent = null; 131 SubTrees.RemoveAt(index); 128 132 ResetCachedValues(); 129 133 } … … 137 141 public void ForEachNodePrefix(Action<SymbolicExpressionTreeNode> a) { 138 142 a(this); 139 for (int i = 0; i < SubTrees.Count; i++) { 140 SubTrees[i].ForEachNodePrefix(a); 143 if (SubTrees != null) { 144 for (int i = 0; i < SubTrees.Count; i++) { 145 SubTrees[i].ForEachNodePrefix(a); 146 } 141 147 } 142 148 } … … 149 155 150 156 public void ForEachNodePostfix(Action<SymbolicExpressionTreeNode> a) { 151 for (int i = 0; i < SubTrees.Count; i++) { 152 SubTrees[i].ForEachNodePrefix(a); 157 if (SubTrees != null) { 158 for (int i = 0; i < SubTrees.Count; i++) { 159 SubTrees[i].ForEachNodePostfix(a); 160 } 153 161 } 154 162 a(this);
Note: See TracChangeset
for help on using the changeset viewer.