Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/02/08 21:10:17 (16 years ago)
Author:
gkronber
Message:

Refactored cloning in all plugins except: HL.Communication, HL.Hive, HL.GP, HL.Routing, HL.Scheduling, HL.SimOpt, HL.Visualization

#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.DataAnalysis/Dataset.cs

    r534 r887  
    105105    }
    106106
     107    /// <summary>
     108    /// Copy constructor to create deep clones.
     109    /// </summary>
     110    /// <param name="original">The instance to be cloned.</param>
     111    public Dataset(Dataset original) : this(original, new Dictionary<Guid, object>()) { }
     112    /// <summary>
     113    /// Copy constructor to create deep clones reusing already cloned object references.
     114    /// </summary>
     115    /// <param name="original">The instance to be cloned.</param>
     116    /// <param name="clonedObjects">Already cloned objects (for referential integrity).</param>
     117    protected Dataset(Dataset original, IDictionary<Guid, object> clonedObjects)
     118      : base(original, clonedObjects) {
     119      double[] cloneSamples = new double[original.rows * original.columns];
     120      Array.Copy(original.samples, cloneSamples, original.samples.Length);
     121      this.rows = original.rows;
     122      this.columns = original.columns;
     123      this.Samples = cloneSamples;
     124      this.Name = original.Name;
     125      this.VariableNames = new string[original.VariableNames.Length];
     126      Array.Copy(original.VariableNames, this.VariableNames, original.VariableNames.Length);
     127      Array.Copy(original.scalingFactor, this.scalingFactor, original.columns);
     128      Array.Copy(original.scalingOffset, this.scalingOffset, original.columns);
     129    }
     130
    107131    private void CreateDictionaries() {
    108132      // keep a means and ranges dictionary for each column (possible target variable) of the dataset.
     
    119143    }
    120144
     145    /// <summary>
     146    /// Creates a deep clone with the copy constructor reusing already cloned
     147    /// object references.
     148    /// </summary>
     149    /// <param name="clonedObjects">Already cloned objects (for referential integrity).</param>
     150    /// <returns>The cloned instance.</returns>
    121151    public override object Clone(IDictionary<Guid, object> clonedObjects) {
    122       Dataset clone = new Dataset();
    123       clonedObjects.Add(Guid, clone);
    124       double[] cloneSamples = new double[rows * columns];
    125       Array.Copy(samples, cloneSamples, samples.Length);
    126       clone.rows = rows;
    127       clone.columns = columns;
    128       clone.Samples = cloneSamples;
    129       clone.Name = Name;
    130       clone.VariableNames = new string[VariableNames.Length];
    131       Array.Copy(VariableNames, clone.VariableNames, VariableNames.Length);
    132       Array.Copy(scalingFactor, clone.scalingFactor, columns);
    133       Array.Copy(scalingOffset, clone.scalingOffset, columns);
    134       return clone;
     152      return new Dataset(this, clonedObjects);
    135153    }
    136154
Note: See TracChangeset for help on using the changeset viewer.