Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/10/14 11:30:14 (11 years ago)
Author:
mkommend
Message:

#2135: Added possibility to restrict PercentValue objects to [0,1].

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2135-PercentValue/3.3/PercentValue.cs

    r9456 r10327  
    2020#endregion
    2121
     22using System;
    2223using HeuristicLab.Common;
    2324using HeuristicLab.Core;
     
    2829  [StorableClass]
    2930  public class PercentValue : DoubleValue {
     31    [Storable(DefaultValue = false)]
     32    private bool restrictToUnitInterval = false;
     33    public bool RestrictToUnitInterval {
     34      get { return restrictToUnitInterval; }
     35    }
     36
     37    public override double Value {
     38      get { return base.Value; }
     39      set {
     40        if (restrictToUnitInterval && (value < 0 || value > 1))
     41          throw new ArgumentException(string.Format("The provided value {0} lies not in the interval [0,1].", value));
     42        base.Value = value;
     43      }
     44    }
     45
    3046    [StorableConstructor]
    3147    protected PercentValue(bool deserializing) : base(deserializing) { }
    3248    protected PercentValue(PercentValue original, Cloner cloner)
    3349      : base(original, cloner) {
     50      restrictToUnitInterval = original.restrictToUnitInterval;
    3451    }
    3552    public PercentValue() : base() { }
    3653    public PercentValue(double value) : base(value) { }
     54
     55    public PercentValue(double value, bool restrictToUnitInterval)
     56      : base() {
     57      this.restrictToUnitInterval = restrictToUnitInterval;
     58      if (restrictToUnitInterval && (value < 0 || value > 1))
     59        throw new ArgumentException(string.Format("The provided value {0} lies not in the interval [0,1].", value));
     60      this.value = value;
     61    }
    3762
    3863    public override IDeepCloneable Clone(Cloner cloner) {
     
    4671    protected override bool Validate(string value, out string errorMessage) {
    4772      value = value.Replace("%", " ");
    48       return base.Validate(value, out errorMessage);
     73      bool valid = base.Validate(value, out errorMessage);
     74      if (!restrictToUnitInterval || !valid) return valid;
     75
     76      double val = double.Parse(value);
     77      if (val < 0 || val > 1) {
     78        errorMessage = "Value must lie in the interval [0,1].";
     79        return false;
     80      }
     81      return true;
    4982    }
     83
    5084    protected override string GetValue() {
    5185      return Value.ToString("#0.#################### %");  // percent format
Note: See TracChangeset for help on using the changeset viewer.