using HeuristicLab.Common; using HeuristicLab.Core; using HeuristicLab.Data.MoveVectorData.Interfaces; using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; namespace HeuristicLab.Data.MoveVectorData { [Item("MoveValue", "Represents a move value.")] [StorableClass] public class MoveValue : ValueTypeValue, IStringConvertibleValue where T : struct, IMove { #region Cloning [StorableConstructor] protected MoveValue(bool deserializing) : base(deserializing) { } protected MoveValue(MoveValue original, Cloner cloner) : base(original, cloner) { } public override IDeepCloneable Clone(Cloner cloner) { return new MoveValue(this, cloner); } #endregion public MoveValue() : base() { } public MoveValue(T value) : base(value) { } protected virtual bool Validate(string value, out string errorMessage) { T val = new T(); bool valid = val.TryParse(value); errorMessage = string.Empty; if (!valid) { errorMessage = "Invalid TwoPointMove Format"; } return valid; } protected virtual string GetValue() { return Value.ToString(); } protected virtual bool SetValue(string value) { T val = new T(); if (val.TryParse(value)) { Value = val; return true; } else { return false; } } #region IStringConvertibleValue Members bool IStringConvertibleValue.Validate(string value, out string errorMessage) { return Validate(value, out errorMessage); } string IStringConvertibleValue.GetValue() { return GetValue(); } bool IStringConvertibleValue.SetValue(string value) { return SetValue(value); } #endregion } }