Changeset 11619 for branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Individuals/MultiEncodingIndividual.cs
- Timestamp:
- 12/02/14 11:44:18 (9 years ago)
- Location:
- branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Individuals
- Files:
-
- 1 added
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Individuals/MultiEncodingIndividual.cs
r11599 r11619 23 23 using System.Collections.Generic; 24 24 using System.Linq; 25 using System.Text;26 using HeuristicLab.Common;27 25 using HeuristicLab.Core; 28 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;29 26 30 namespace HeuristicLab.Problems.Programmable .Encodings{27 namespace HeuristicLab.Problems.Programmable { 31 28 public sealed class MultiEncodingIndividual : Individual { 32 29 public new MultiEncoding Encoding { … … 34 31 } 35 32 36 public MultiEncodingIndividual(IEncoding encoding, IScope scope) 33 private readonly IEnumerable<Individual> individuals; 34 public MultiEncodingIndividual(MultiEncoding encoding, IScope scope) 37 35 : base(encoding, scope) { 38 if (encoding.GetType() != typeof(MultiEncoding)) 39 throw new ArgumentException("Encoding must be of type MultiEncoding.k"); 36 individuals = encoding.Encodings.Select(e => e.GetIndividual(scope)).ToArray(); 40 37 } 41 38 42 [StorableConstructor] 43 private MultiEncodingIndividual(bool deserializing) : base(deserializing) { } 39 private MultiEncodingIndividual(MultiEncoding encoding, IScope scope, IEnumerable<Individual> individuals) 40 : base(encoding, scope) { 41 this.individuals = individuals; 42 } 44 43 45 public override IDeepCloneable Clone(Cloner cloner) { return new MultiEncodingIndividual(this, cloner); }46 private MultiEncodingIndividual(Individual original, Cloner cloner) : base(original, cloner) { }47 44 48 45 public override IItem this[string name] { 49 46 get { 50 var encoding = Encoding.Encodings.FirstOrDefault(e => e.Name == name);51 if ( encoding== null) throw new ArgumentException(string.Format("{0} is not part of the specified encoding.", name));52 return ExtractScopeValue(name, encoding.Name, Scope);47 var individual = individuals.FirstOrDefault(i => i.Name == name); 48 if (individual == null) throw new ArgumentException(string.Format("{0} is not part of the specified encoding.", name)); 49 return individual[name]; 53 50 } 54 51 set { 55 var encoding = Encoding.Encodings.FirstOrDefault(e => e.Name == name);56 if ( encoding== null) throw new ArgumentException(string.Format("{0} is not part of the specified encoding.", name));57 SetScopeValue(name, encoding.Name, Scope, value);52 var individual = individuals.FirstOrDefault(i => i.Name == name); 53 if (individual == null) throw new ArgumentException(string.Format("{0} is not part of the specified encoding.", name)); 54 individual[name] = value; 58 55 } 59 56 } 60 57 61 58 internal override Individual Copy(IScope scope) { 62 var individual = Encoding.CreateIndividual(scope); 63 foreach (var encoding in Encoding.Encodings) 64 individual[encoding.Name] = this[encoding.Name]; 65 return individual; 59 var copies = individuals.Select(i => i.Copy(scope)).ToArray(); 60 return new MultiEncodingIndividual(Encoding, scope, copies); 66 61 } 67 62 }
Note: See TracChangeset
for help on using the changeset viewer.