Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/23/09 16:43:34 (15 years ago)
Author:
swagner
Message:

Refactored cloning (#806)

Location:
trunk/sources/HeuristicLab.Data/3.3
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Data/3.3/BoolData.cs

    r2520 r2526  
    6363    /// <param name="clonedObjects">Dictionary of all already cloned objects.</param>
    6464    /// <returns>The cloned instance as <see cref="BoolData"/>.</returns>
    65     public override object Clone(IDictionary<Guid, object> clonedObjects) {
     65    public override IItem Clone(ICloner cloner) {
    6666      BoolData clone = new BoolData();
    67       clonedObjects.Add(Guid, clone);
     67      cloner.RegisterClonedObject(this, clone);
    6868      clone.Data = Data;
    6969      return clone;
  • trunk/sources/HeuristicLab.Data/3.3/DoubleData.cs

    r2520 r2526  
    6464    /// <param name="clonedObjects">Dictionary of all already cloned objects.</param>
    6565    /// <returns>The cloned instance as <see cref="DoubleData"/>.</returns>
    66     public override object Clone(IDictionary<Guid, object> clonedObjects) {
     66    public override IItem Clone(ICloner cloner) {
    6767      DoubleData clone = new DoubleData();
    68       clonedObjects.Add(Guid, clone);
     68      cloner.RegisterClonedObject(this, clone);
    6969      clone.Data = Data;
    7070      return clone;
  • trunk/sources/HeuristicLab.Data/3.3/IntData.cs

    r2520 r2526  
    6464    /// <param name="clonedObjects">Dictionary of all already cloned objects.</param>
    6565    /// <returns>The cloned instance as <see cref="IntData"/>.</returns>
    66     public override object Clone(IDictionary<Guid, object> clonedObjects) {
     66    public override IItem Clone(ICloner cloner) {
    6767      IntData clone = new IntData();
    68       clonedObjects.Add(Guid, clone);
     68      cloner.RegisterClonedObject(this, clone);
    6969      clone.Data = Data;
    7070      return clone;
  • trunk/sources/HeuristicLab.Data/3.3/ItemDictionary_T.cs

    r2520 r2526  
    4646    /// <param name="clonedObjects">A dictionary of all already cloned objects.</param>
    4747    /// <returns>The cloned instance as <see cref="ItemDictionary&lt;K,V&gt;"/>.</returns>
    48     public override object Clone(IDictionary<Guid, object> clonedObjects) {
     48    public override IItem Clone(ICloner cloner) {
    4949      ItemDictionary<K,V> clone = new ItemDictionary<K,V>();
    50       clonedObjects.Add(Guid, clone);
     50      cloner.RegisterClonedObject(this, clone);
    5151      foreach (KeyValuePair<K, V> item in dict) {
    52         clone.dict.Add((K) Auxiliary.Clone(item.Key, clonedObjects), (V) Auxiliary.Clone(item.Value, clonedObjects));
     52        clone.dict.Add((K) cloner.Clone(item.Key), (V) cloner.Clone(item.Value));
    5353      }
    5454      return clone;
     
    300300          return ((IObjectData) obj).Data.GetHashCode();
    301301        }
    302         return obj.Guid.GetHashCode();
     302        return obj.GetHashCode();
    303303      }
    304304    }
  • trunk/sources/HeuristicLab.Data/3.3/ItemList.cs

    r1529 r2526  
    3737    /// <param name="clonedObjects">A dictionary of all already cloned objects.</param>
    3838    /// <returns>The cloned instance as <see cref="ItemList"/>.</returns>
    39     public override object Clone(IDictionary<Guid, object> clonedObjects) {
     39    public override IItem Clone(ICloner cloner) {
    4040      ItemList clone = new ItemList();
    41       clonedObjects.Add(Guid, clone);
    42       base.CloneElements(clone, clonedObjects);
     41      cloner.RegisterClonedObject(this, clone);
     42      base.CloneElements(cloner, clone);
    4343      return clone;
    4444    }
  • trunk/sources/HeuristicLab.Data/3.3/ItemList_T.cs

    r2520 r2526  
    5252    /// <param name="clonedObjects">A dictionary of all already cloned objects.</param>
    5353    /// <returns>The cloned instance as <see cref="ItemList&lt;T&gt;"/>.</returns>
    54     public override object Clone(IDictionary<Guid, object> clonedObjects) {
     54    public override IItem Clone(ICloner cloner) {
    5555      ItemList<T> clone = new ItemList<T>();
    56       clonedObjects.Add(Guid, clone);
    57       CloneElements(clone, clonedObjects);
     56      cloner.RegisterClonedObject(this, clone);
     57      CloneElements(cloner, clone);
    5858      return clone;
    5959    }
     
    6666    /// <param name="destination">The <see cref="ItemList&lt;T&gt;"/> where to save the cloned objects.</param>
    6767    /// <param name="clonedObjects">A dictionary of all already cloned objects.</param>
    68     protected void CloneElements(ItemList<T> destination, IDictionary<Guid, object> clonedObjects) {
     68    protected void CloneElements(ICloner cloner, ItemList<T> destination) {
    6969      for (int i = 0; i < list.Count; i++)
    70         destination.list.Add((T) Auxiliary.Clone(list[i], clonedObjects));
     70        destination.list.Add((T)cloner.Clone(list[i]));
    7171    }
    7272
  • trunk/sources/HeuristicLab.Data/3.3/NullData.cs

    r1853 r2526  
    5555    /// <param name="clonedObjects">All already cloned objects.</param>
    5656    /// <returns>The cloned instance as <see cref="NullData"/>.</returns>
    57     public override object Clone(IDictionary<Guid, object> clonedObjects) {
     57    public override IItem Clone(ICloner cloner) {
    5858      NullData clone = new NullData();
    59       clonedObjects.Add(Guid, clone);
     59      cloner.RegisterClonedObject(this, clone);
    6060      return clone;
    6161    }
  • trunk/sources/HeuristicLab.Data/3.3/ObjectData.cs

    r1842 r2526  
    5252    /// Clones the current instance.
    5353    /// </summary>
    54     /// <remarks>HeuristicLab data items are cloned with the <see cref="HeuristicLab.Core.Auxiliary.Clone"/> method of
     54    /// <remarks>HeuristicLab data items are cloned with the <see cref="HeuristicLab.Core.cloner.Clone"/> method of
    5555    /// class <see cref="Auxiliary"/> (deep copy), all other items (like basic data types)
    5656    /// are cloned with their own <c>Clone</c> methods (shadow copy).</remarks>
     
    5858    /// <param name="clonedObjects">A dictionary of all already cloned objects.</param>
    5959    /// <returns>The clone instance.</returns>
    60     public override object Clone(IDictionary<Guid, object> clonedObjects) {
    61       ObjectData clone = (ObjectData)base.Clone(clonedObjects);
    62       if (Data is IStorable)
    63         clone.myData = Auxiliary.Clone((IStorable)Data, clonedObjects);
     60    public override IItem Clone(ICloner cloner) {
     61      ObjectData clone = (ObjectData)base.Clone(cloner);
     62      if (Data is IItem)
     63        clone.myData = cloner.Clone((IItem)Data);
    6464      else if (Data is ICloneable)
    6565        clone.myData = ((ICloneable)Data).Clone();
  • trunk/sources/HeuristicLab.Data/3.3/StringData.cs

    r2520 r2526  
    6464    /// <param name="clonedObjects">A dictionary of all already cloned objects.</param>
    6565    /// <returns>The coned instance as <see cref="StringData"/>.</returns>
    66     public override object Clone(IDictionary<Guid, object> clonedObjects) {
     66    public override IItem Clone(ICloner cloner) {
    6767      StringData clone = new StringData();
    68       clonedObjects.Add(Guid, clone);
     68      cloner.RegisterClonedObject(this, clone);
    6969      clone.Data = Data;
    7070      return clone;
Note: See TracChangeset for help on using the changeset viewer.