using System; using HeuristicLab.Common; using HeuristicLab.Core; using HeuristicLab.Encodings.BinaryVectorEncoding; using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; namespace HeuristicLab.Problems.NK { [Item("Lexicographic Binary Vector Comparer", "Compares two binary vectors lexicographically")] [StorableClass] public sealed class LexicographicBinaryVectorComparer : BinaryVectorComparer { [StorableConstructor] private LexicographicBinaryVectorComparer(bool deserializing) : base(deserializing) { } private LexicographicBinaryVectorComparer(LexicographicBinaryVectorComparer original, Cloner cloner) : base(original, cloner) { } public LexicographicBinaryVectorComparer() { } public override IDeepCloneable Clone(Cloner cloner) { return new LexicographicBinaryVectorComparer(this, cloner); } public override int Compare(BinaryVector x, BinaryVector y) { for (int i = 0; i < Math.Min(x.Length, y.Length); i++) { if (!x[i] && y[i]) return -1; if (x[i] && !y[i]) return 1; } if (x.Length > y.Length) return 1; if (x.Length < y.Length) return -1; return 0; } } }