Changeset 2787
- Timestamp:
- 02/12/10 14:03:47 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/sources/HeuristicLab.GP/3.3/GeneticProgrammingModel.cs ¶
r2328 r2787 60 60 public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) { 61 61 XmlNode node = base.GetXmlNode(name, document, persistedObjects); 62 // persist the tree in linear form 62 63 PersistTree(node, document, persistedObjects, FunctionTree); 63 64 return node; … … 66 67 private void PersistTree(XmlNode node, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects, IFunctionTree tree) { 67 68 XmlNode fNode = PersistenceManager.Persist(tree.Function, document, persistedObjects); 69 // save the number of sub-trees 68 70 XmlAttribute subTreesAttr = document.CreateAttribute("Args"); 69 71 subTreesAttr.Value = XmlConvert.ToString(tree.SubTrees.Count); 70 72 fNode.Attributes.Append(subTreesAttr); 73 // save the function symbol 71 74 node.AppendChild(fNode); 75 // if the tree node has local data save it into a child element called "data" 72 76 XmlNode treeNode = tree.GetXmlNode("Data", document, persistedObjects); 73 77 if (treeNode != null) fNode.AppendChild(treeNode); 78 // recursivly store the children into the same linear form 74 79 foreach (IFunctionTree subTree in tree.SubTrees) { 75 80 PersistTree(node, document, persistedObjects, subTree); … … 80 85 base.Populate(node, restoredObjects); 81 86 int nodeIndex = 0; 87 // restore linear form back into tree form 82 88 FunctionTree = RestoreTree(node, ref nodeIndex, restoredObjects); 83 89 } … … 85 91 private IFunctionTree RestoreTree(XmlNode node, ref int nodeIndex, IDictionary<Guid, IStorable> restoredObjects) { 86 92 XmlNode fNode = node.ChildNodes[nodeIndex]; 93 // restore the number of child nodes 87 94 int subTrees = XmlConvert.ToInt32(fNode.Attributes["Args"].Value); 95 // restore the function symbol 88 96 IFunction f = (IFunction)PersistenceManager.Restore(fNode, restoredObjects); 97 // create a tree node from the function 89 98 IFunctionTree tree = f.GetTreeNode(); 90 if (fNode.ChildNodes.Count > 0) tree.Populate(fNode.ChildNodes[0], restoredObjects); 99 // check if there is data for the tree node that needs to be restored and restore the data if needed 100 var dataNode = fNode.SelectSingleNode("Data"); 101 if (dataNode!=null) tree.Populate(dataNode, restoredObjects); 91 102 nodeIndex++; 92 103 for (int i = 0; i < subTrees; i++) { 104 // recursively read children from linear representation 93 105 tree.AddSubTree(RestoreTree(node, ref nodeIndex, restoredObjects)); 94 106 }
Note: See TracChangeset
for help on using the changeset viewer.