namespace HeuristicLab.Problems.ProgramSynthesis.Base.Erc.Integer { using HeuristicLab.Common; using HeuristicLab.Core; using HeuristicLab.Data; using HeuristicLab.Parameters; using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; [StorableClass] public class IntegerRangeErc : WeightedErcItem { private const string RangeParameterName = "Range"; public IntegerRangeErc() : this(true, 0, 0) { } public IntegerRangeErc(int start, int end) : this(true, start, end) { } public IntegerRangeErc(bool isEnabled, int start, int end, double weight = 1d) : base(isEnabled, weight) { Parameters.Add(new FixedValueParameter(RangeParameterName, new IntRange(start, end))); RangeParameter.Value.ToStringChanged += (sender, args) => UpdateName(); UpdateName(); } private void UpdateName() { Name = RangeParameter.Value.ToString(); } [StorableConstructor] protected IntegerRangeErc(bool deseralizing) : base(deseralizing) { } public IntegerRangeErc(IntegerRangeErc origin, Cloner cloner) : base(origin, cloner) { } public IValueParameter RangeParameter { get { return (IValueParameter)Parameters[RangeParameterName]; } } public int Start { get { return RangeParameter.Value.Start; } set { RangeParameter.Value.Start = value; } } public int End { get { return RangeParameter.Value.End; } set { RangeParameter.Value.End = value; } } public override int GetErcValue(IRandom random) { return Start < End ? random.Next(Start, End) : 0; } public override IDeepCloneable Clone(Cloner cloner) { return new IntegerRangeErc(this, cloner); } } }