Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/02/08 14:13:06 (15 years ago)
Author:
gkronber
Message:

Refactored cloning in HL.Core, HL.Data and HL.Constraints

#285 (Cloning could be improved by creating objects at the bottom of the cloning chain with 'new' instead of the top with Activator.CreateInstance())

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/CloningRefactorBranch/HeuristicLab.Core/OperatorGraph.cs

    r776 r885  
    6060
    6161    /// <summary>
     62    /// Copy constructor to create a deep clone of an OperatorGraph instance.
     63    /// </summary>
     64    /// <param name="original">The original instance to be cloned.</param>
     65    public OperatorGraph(OperatorGraph original) : this(original, new Dictionary<Guid, object>()) { }
     66
     67    /// <summary>
     68    /// Copy constructor to create a deep clone of an OperatorGraph instance
     69    /// reusing already cloned objects.
     70    /// </summary>
     71    /// <param name="original">The original instance to be cloned</param>
     72    /// <param name="clonedObjects">Already cloned objects (for referential integrity).</param>
     73    protected OperatorGraph(OperatorGraph original, IDictionary<Guid, object> clonedObjects)
     74      : base(original, clonedObjects) {
     75      foreach (IOperator op in original.Operators)
     76        this.AddOperator((IOperator)Auxiliary.Clone(op, clonedObjects));
     77      if (original.InitialOperator != null)
     78        this.myInitialOperator = (IOperator)Auxiliary.Clone(original.InitialOperator, clonedObjects);
     79    }
     80
     81    /// <summary>
    6282    /// Creates a new instance of <see cref="OperatorGraphView"/> to represent the current instance
    6383    /// visually.
     
    7191    /// Clones the current instance (deep clone).
    7292    /// </summary>
    73     /// <remarks>Deep clone through <see cref="Auxiliary.Clone"/> method of helper class
    74     /// <see cref="Auxiliary"/>.</remarks>
     93    /// <remarks>Deep clone using the copy constructor.</remarks>
    7594    /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
    7695    /// <returns>The cloned object as <see cref="OperatorGraph"/>.</returns>
    7796    public override object Clone(IDictionary<Guid, object> clonedObjects) {
    78       OperatorGraph clone = new OperatorGraph();
    79       clonedObjects.Add(Guid, clone);
    80       foreach (IOperator op in Operators)
    81         clone.AddOperator((IOperator)Auxiliary.Clone(op, clonedObjects));
    82       if (InitialOperator != null)
    83         clone.myInitialOperator = (IOperator)Auxiliary.Clone(InitialOperator, clonedObjects);
    84       return clone;
     97      return new OperatorGraph(this, clonedObjects);
    8598    }
    8699
     
    179192    /// (Needed to avoid cycles.)</param>
    180193    /// <returns>The saved <see cref="XmlNode"/>.</returns>
    181     public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
     194    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
    182195      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
    183196      XmlNode ops = document.CreateNode(XmlNodeType.Element, "Operators", null);
     
    197210    /// <param name="restoredObjects">The dictionary of all already restored objects.
    198211    /// (Needed to avoid cycles.)</param>
    199     public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
     212    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
    200213      base.Populate(node, restoredObjects);
    201214
Note: See TracChangeset for help on using the changeset viewer.