namespace HeuristicLab.Problems.ProgramSynthesis.Base.Erc.String { using System.Collections.Generic; using HeuristicLab.Common; using HeuristicLab.Core; using HeuristicLab.Data; using HeuristicLab.Parameters; using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; [StorableClass] public class StringConstantErcValue : WeightedErcValueItem { private const string ConstantsParameterName = "Constants"; private readonly StringArray array; // perf opt: reduce parameter getter usage public StringConstantErcValue() : this(new string[0]) { } public StringConstantErcValue(params string[] constants) { array = new StringArray(constants); Parameters.Add(new FixedValueParameter(ConstantsParameterName, array)); } [StorableConstructor] public StringConstantErcValue(bool deserializing) : base(deserializing) { } public StringConstantErcValue(StringConstantErcValue origin, Cloner cloner) : base(origin, cloner) { } public IValueParameter ConstantsParameter { get { return (IValueParameter)Parameters[ConstantsParameterName]; } } public IEnumerable Constants { get { return ConstantsParameter.Value; } } public override IDeepCloneable Clone(Cloner cloner) { return new StringConstantErcValue(this, cloner); } public override string GetErcValue(IRandom random) { var x = random.Next(array.Length); return array[x]; } } }