Changeset 11058
- Timestamp:
- 06/30/14 14:42:38 (10 years ago)
- Location:
- trunk/sources/HeuristicLab.Scripting/3.3
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Scripting/3.3/CSharpScript.cs
r11056 r11058 21 21 22 22 using System; 23 using System.IO;24 23 using System.Linq; 25 24 using System.Reflection; … … 27 26 using HeuristicLab.Common; 28 27 using HeuristicLab.Core; 29 using HeuristicLab.Persistence.Core;30 28 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 31 using HeuristicLab.Persistence.Default.Xml;32 29 33 30 namespace HeuristicLab.Scripting { … … 81 78 protected CSharpScript(CSharpScript original, Cloner cloner) 82 79 : base(original, cloner) { 83 try { 84 using (var serializerStream = new MemoryStream()) { 85 XmlGenerator.Serialize(original.variableStore, serializerStream); 86 var bytes = serializerStream.GetBuffer(); 87 using (var deserializerStream = new MemoryStream(bytes)) { 88 variableStore = XmlParser.Deserialize<VariableStore>(deserializerStream); 89 } 90 } 91 } catch (PersistenceException pe) { 92 throw new NotSupportedException("Could not clone the script because some of its variables could not be cloned.", pe); 93 } 80 variableStore = cloner.Clone(original.variableStore); 94 81 } 95 82 public CSharpScript() { -
trunk/sources/HeuristicLab.Scripting/3.3/VariableStore.cs
r10506 r11058 20 20 #endregion 21 21 22 using System; 23 using System.IO; 22 24 using HeuristicLab.Collections; 23 25 using HeuristicLab.Common; 24 26 using HeuristicLab.Core; 27 using HeuristicLab.Persistence.Core; 25 28 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 29 using HeuristicLab.Persistence.Default.Xml; 26 30 27 31 namespace HeuristicLab.Scripting { 28 32 [Item("VariableStore", "Represents a variable store.")] 29 33 [StorableClass] 30 public class VariableStore : ObservableDictionary<string, object>, IContent {34 public class VariableStore : ObservableDictionary<string, object>, IContent, IDeepCloneable { 31 35 [StorableConstructor] 32 36 protected VariableStore(bool deserializing) : base(deserializing) { } 37 protected VariableStore(VariableStore original, Cloner cloner) { 38 cloner.RegisterClonedObject(original, this); 39 foreach (var kvp in original.dict) { 40 var clonedValue = kvp.Value as IDeepCloneable; 41 if (clonedValue != null) { 42 dict[kvp.Key] = cloner.Clone(clonedValue); 43 } else { 44 try { 45 dict[kvp.Key] = CloneByPersistence(kvp.Value); 46 } catch (PersistenceException pe) { 47 throw new NotSupportedException("VariableStore: Variable " + kvp.Key + " could not be cloned.", pe); 48 } 49 } 50 } 51 } 33 52 public VariableStore() : base() { } 53 54 public object Clone() { 55 return Clone(new Cloner()); 56 } 57 public IDeepCloneable Clone(Cloner cloner) { 58 return new VariableStore(this, cloner); 59 } 60 61 protected object CloneByPersistence(object value) { 62 using (var serializerStream = new MemoryStream()) { 63 XmlGenerator.Serialize(value, serializerStream); 64 var bytes = serializerStream.GetBuffer(); 65 using (var deserializerStream = new MemoryStream(bytes)) { 66 return XmlParser.Deserialize<VariableStore>(deserializerStream); 67 } 68 } 69 } 34 70 } 35 71 }
Note: See TracChangeset
for help on using the changeset viewer.