Changeset 13359 for branches/ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingOperator.cs
- Timestamp:
- 11/24/15 15:24:12 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingOperator.cs
r13356 r13359 21 21 22 22 using System; 23 using System.Collections.Generic;24 23 using System.Linq; 25 using HeuristicLab.Collections;26 24 using HeuristicLab.Common; 27 25 using HeuristicLab.Core; … … 32 30 namespace HeuristicLab.Optimization { 33 31 [StorableClass] 34 public abstract class MultiEncodingOperator<T> : InstrumentedOperator, IMultiEncodingOperator where T : class, IOperator { 35 [Storable] 36 private MultiEncoding encoding; 37 public MultiEncoding Encoding { 38 get { return encoding; } 39 set { 40 if (value == null) throw new ArgumentNullException("Encoding must not be null."); 41 if (value == encoding) return; 42 if (encoding != null) DeregisterEventHandlers(); 43 encoding = value; 44 CombinedSolutionParameter.ActualName = encoding.Name; 45 RegisterEventHandlers(); 46 } 32 public abstract class MultiEncodingOperator<T> : InstrumentedOperator, IEncodingOperator<CombinedSolution>, IMultiEncodingOperator where T : class, IOperator { 33 public ILookupParameter<CombinedSolution> SolutionParameter { 34 get { return (ILookupParameter<CombinedSolution>)Parameters["Solution"]; } 47 35 } 48 36 49 public ILookupParameter< CombinedSolution> CombinedSolutionParameter {50 get { return (ILookupParameter< CombinedSolution>)Parameters["CombinedSolution"]; }37 public ILookupParameter<IEncoding<CombinedSolution>> EncodingParameter { 38 get { return (ILookupParameter<IEncoding<CombinedSolution>>)Parameters["Encoding"]; } 51 39 } 52 40 53 41 [StorableConstructor] 54 42 protected MultiEncodingOperator(bool deserializing) : base(deserializing) { } 55 protected MultiEncodingOperator(MultiEncodingOperator<T> original, Cloner cloner) 56 : base(original, cloner) { 57 encoding = cloner.Clone(original.encoding); 58 RegisterEventHandlers(); 59 } 43 protected MultiEncodingOperator(MultiEncodingOperator<T> original, Cloner cloner) : base(original, cloner) { } 60 44 protected MultiEncodingOperator() 61 45 : base() { 62 Parameters.Add(new LookupParameter<CombinedSolution>("CombinedSolution", "The combined solution that gets created.")); 63 } 64 65 [StorableHook(HookType.AfterDeserialization)] 66 private void AfterDeserialization() { 67 RegisterEventHandlers(); 68 } 69 70 private void RegisterEventHandlers() { 71 encoding.Encodings.ItemsAdded += EncodingsOnItemsChanged; 72 encoding.Encodings.CollectionReset += EncodingsOnItemsChanged; 73 encoding.Encodings.ItemsRemoved += EncodingsOnItemsRemoved; 74 foreach (var enc in encoding.Encodings) 75 enc.OperatorsChanged += Encoding_OperatorsChanged; 76 } 77 78 private void DeregisterEventHandlers() { 79 encoding.Encodings.ItemsAdded -= EncodingsOnItemsChanged; 80 encoding.Encodings.CollectionReset -= EncodingsOnItemsChanged; 81 encoding.Encodings.ItemsRemoved -= EncodingsOnItemsRemoved; 82 foreach (var enc in encoding.Encodings) 83 enc.OperatorsChanged -= Encoding_OperatorsChanged; 84 } 85 86 private void EncodingsOnItemsChanged(object sender, CollectionItemsChangedEventArgs<IEncoding> e) { 87 foreach (var enc in e.Items) 88 AddEncoding(enc); 89 foreach (var enc in e.OldItems) 90 RemoveEncoding(enc); 91 } 92 93 private void EncodingsOnItemsRemoved(object sender, CollectionItemsChangedEventArgs<IEncoding> e) { 94 foreach (var enc in e.Items) 95 RemoveEncoding(enc); 46 Parameters.Add(new LookupParameter<CombinedSolution>("Solution", "The solution that gets created.")); 47 Parameters.Add(new LookupParameter<IEncoding<CombinedSolution>>("Encoding", "The encoding.")); 96 48 } 97 49 … … 101 53 } 102 54 103 p rotectedvirtual void AddEncoding(IEncoding encoding) {55 public virtual void AddEncoding(IEncoding encoding) { 104 56 if (Parameters.ContainsKey(encoding.Name)) throw new ArgumentException(string.Format("Encoding {0} was already added.", encoding.Name)); 105 57 … … 111 63 } 112 64 113 p rotectedvirtual bool RemoveEncoding(IEncoding encoding) {65 public virtual bool RemoveEncoding(IEncoding encoding) { 114 66 if (!Parameters.ContainsKey(encoding.Name)) throw new ArgumentException(string.Format("Encoding {0} was not added to the MultiEncoding.", encoding.Name)); 115 67 encoding.OperatorsChanged -= Encoding_OperatorsChanged;
Note: See TracChangeset
for help on using the changeset viewer.