Пример #1
0
        // Find (strict) predecessor of y in coll, or return false

        public static bool Predecessor <T>(ISorted <T> coll, T y, out T yPred)
            where T : IComparable <T>
        {
            coll.Cut(y, out yPred, out var hasPred, out _, out _);

            return(hasPred);
        }
Пример #2
0
        public void KeysISortedPred()
        {
            ISorted <string> keys = dict.Keys;
            String           res;

            Assert.IsTrue(keys.TryPredecessor("S", out res));
            Assert.AreEqual("R", res);
            Assert.IsTrue(keys.TryWeakPredecessor("R", out res));
            Assert.AreEqual("R", res);
            Assert.IsTrue(keys.TrySuccessor("S", out res));
            Assert.AreEqual("T", res);
            Assert.IsTrue(keys.TryWeakSuccessor("T", out res));
            Assert.AreEqual("T", res);
            Assert.IsFalse(keys.TryPredecessor("R", out res));
            Assert.AreEqual(null, res);
            Assert.IsFalse(keys.TryWeakPredecessor("P", out res));
            Assert.AreEqual(null, res);
            Assert.IsFalse(keys.TrySuccessor("T", out res));
            Assert.AreEqual(null, res);
            Assert.IsFalse(keys.TryWeakSuccessor("U", out res));
            Assert.AreEqual(null, res);

            Assert.AreEqual("R", keys.Predecessor("S"));
            Assert.AreEqual("R", keys.WeakPredecessor("R"));
            Assert.AreEqual("T", keys.Successor("S"));
            Assert.AreEqual("T", keys.WeakSuccessor("T"));
        }
Пример #3
0
 internal SortedKeysCollection(ISortedDictionary <K, V> sorteddict, ISorted <KeyValuePair <K, V> > sortedpairs, SCG.IComparer <K> comparer, SCG.IEqualityComparer <K> itemequalityComparer)
     : base(itemequalityComparer)
 {
     this.sorteddict  = sorteddict;
     this.sortedpairs = sortedpairs;
     this.comparer    = comparer;
 }
Пример #4
0
        // Find (strict) successor of y in coll, or return false

        public static bool Successor <T>(ISorted <T> coll, T y, out T ySucc)
            where T : IComparable <T>
        {
            coll.Cut(y, out _, out _, out ySucc, out var hasSucc);

            return(hasSucc);
        }
Пример #5
0
        public void KeysISorted()
        {
            ISorted <string> keys = dict.Keys;

            Assert.IsTrue(keys.IsReadOnly);
            Assert.AreEqual("R", keys.FindMin());
            Assert.AreEqual("T", keys.FindMax());
            Assert.IsTrue(keys.Contains("S"));
            Assert.AreEqual(3, keys.Count);
            // This doesn't hold, maybe because the dict uses a special key comparer?
            // Assert.IsTrue(keys.SequencedEquals(new WrappedArray<string>(new string[] { "R", "S", "T" })));
            Assert.IsTrue(keys.UniqueItems().All(delegate(String s) {
                return(s == "R" || s == "S" || s == "T");
            }));
            Assert.IsTrue(keys.All(delegate(String s) {
                return(s == "R" || s == "S" || s == "T");
            }));
            Assert.IsFalse(keys.Exists(delegate(String s) {
                return(s != "R" && s != "S" && s != "T");
            }));
            String res;

            Assert.IsTrue(keys.Find(delegate(String s) {
                return(s == "R");
            }, out res));
            Assert.AreEqual("R", res);
            Assert.IsFalse(keys.Find(delegate(String s) {
                return(s == "Q");
            }, out res));
            Assert.AreEqual(null, res);
        }
Пример #6
0
        // Iterate over ]x1...x2[
        public static void IterExcExc <T>(ISorted <T> coll, T x1, T x2)
            where T : IComparable <T>
        {
            bool x1HasSucc = Successor(coll, x1, out T x1Succ);
            IDirectedEnumerable <T> range = x1HasSucc ? coll.RangeFromTo(x1Succ, x2) : new ArrayList <T>();

            Print(range);
        }
Пример #7
0
        // Iterate over ]x1...]
        public static void IterExcEnd <T>(ISorted <T> coll, T x1)
            where T : IComparable <T>
        {
            var x1HasSucc = Successor(coll, x1, out var x1Succ);
            IDirectedEnumerable <T> range = x1HasSucc ? coll.RangeFrom(x1Succ) : new ArrayList <T>();

            Print(range);
        }
        // Iterate over [...x2[

        public static void IterBeginExc <T>(ISorted <T> coll, T x2)
        {
            foreach (T x in coll.RangeTo(x2))
            {
                Console.Write("{0} ", x);
            }
            Console.WriteLine();
        }
        // Iterate over [x1...]

        public static void IterIncEnd <T>(ISorted <T> coll, T x1)
        {
            foreach (T x in coll.RangeFrom(x1))
            {
                Console.Write("{0} ", x);
            }
            Console.WriteLine();
        }
Пример #10
0
        // Iterate over [x1,x2[, backwards

        public static void IterIncExcBackwards <T>(ISorted <T> coll, T x1, T x2)
        {
            foreach (T x in coll.RangeFromTo(x1, x2).Backwards())
            {
                Console.Write("{0} ", x);
            }
            Console.WriteLine();
        }
Пример #11
0
        // Iterate over all items, backwards

        public static void IterBeginEndBackwards <T>(ISorted <T> coll)
        {
            foreach (T x in coll.Backwards())
            {
                Console.Write("{0} ", x);
            }
            Console.WriteLine();
        }
Пример #12
0
        // Iterate over [...x2]
        public static void IterBeginInc <T>(ISorted <T> coll, T x2)
            where T : IComparable <T>
        {
            var x2HasSucc = Successor(coll, x2, out var x2Succ);
            IDirectedEnumerable <T> range = x2HasSucc ? coll.RangeTo(x2Succ) : coll.RangeAll();

            Print(range);
        }
Пример #13
0
        // Find (strict) predecessor of y in coll, or return false

        public static bool Predecessor <T>(ISorted <T> coll, T y, out T yPred)
            where T : IComparable <T>
        {
            bool hasPred, hasSucc;
            T    ySucc;

            coll.Cut(y, out yPred, out hasPred, out ySucc, out hasSucc);
            return(hasPred);
        }
Пример #14
0
        // Find weak predecessor of y in coll, or return false

        public static bool WeakPredecessor <T>(ISorted <T> coll, T y, out T yPred)
            where T : IComparable <T>
        {
            bool hasPred, hasY = coll.Cut(y, out yPred, out hasPred, out _, out _);

            if (hasY)
            {
                yPred = y;
            }
            return(hasY || hasPred);
        }
Пример #15
0
        // --- Predecessor and successor patterns --------------------

        // Find weak successor of y in coll, or return false

        public static bool WeakSuccessor <T>(ISorted <T> coll, T y, out T ySucc)
            where T : IComparable <T>
        {
            var hasY = coll.Cut(y, out _, out _, out ySucc, out var hasSucc);

            if (hasY)
            {
                ySucc = y;
            }

            return(hasY || hasSucc);
        }
Пример #16
0
        // Iterate over [...x2]

        public static void IterBeginInc <T>(ISorted <T> coll, T x2)
            where T : IComparable <T>
        {
            bool x2HasSucc = Successor(coll, x2, out T x2Succ);
            IDirectedEnumerable <T> range =
                x2HasSucc ? coll.RangeTo(x2Succ) : coll.RangeAll();

            foreach (T x in range)
            {
                Console.Write("{0} ", x);
            }
            Console.WriteLine();
        }
Пример #17
0
        // --- Predecessor and successor patterns --------------------

        // Find weak successor of y in coll, or return false

        public static bool WeakSuccessor <T>(ISorted <T> coll, T y, out T ySucc)
            where T : IComparable <T>
        {
            T    yPred;
            bool hasPred, hasSucc,
                 hasY = coll.Cut(y, out yPred, out hasPred, out ySucc, out hasSucc);

            if (hasY)
            {
                ySucc = y;
            }
            return(hasY || hasSucc);
        }
Пример #18
0
        // Iterate over ]x1...]

        public static void IterExcEnd <T>(ISorted <T> coll, T x1)
            where T : IComparable <T>
        {
            bool x1HasSucc = Successor(coll, x1, out T x1Succ);
            IDirectedEnumerable <T> range =
                x1HasSucc ? coll.RangeFrom(x1Succ) : new ArrayList <T>();

            foreach (T x in range)
            {
                Console.Write("{0} ", x);
            }
            Console.WriteLine();
        }
Пример #19
0
        // Iterate over [x1...x2]

        public static void IterIncInc <T>(ISorted <T> coll, T x1, T x2)
            where T : IComparable <T>
        {
            T    x2Succ;
            bool x2HasSucc = Successor(coll, x2, out x2Succ);
            IDirectedEnumerable <T> range =
                x2HasSucc ? coll.RangeFromTo(x1, x2Succ) : coll.RangeFrom(x1);

            foreach (T x in range)
            {
                Console.Write("{0} ", x);
            }
            Console.WriteLine();
        }
Пример #20
0
        // --- Sorted iteration patterns -----------------------------

        // Iterate over all items
        public static void IterBeginEnd <T>(ISorted <T> coll)
        {
            Print(coll);
        }
 public void Test(ISorted <int> sorted)
 {
     sorted.AddSorted(new int[] { 31, 62, 63, 93 });
 }
Пример #22
0
 /// <summary>
 /// Wrap a sorted collection in a read-only wrapper
 /// </summary>
 /// <param name="sorted"></param>
 public GuardedSorted(ISorted <T> sorted) : base(sorted)
 {
     this.sorted = sorted;
 }
Пример #23
0
        // Iterate over all items, backwards
        public static void IterBeginEndBackwards <T>(ISorted <T> coll)
        {
            var range = coll.Backwards();

            Print(range);
        }
Пример #24
0
        // Iterate over [x1,x2[, backwards
        public static void IterIncExcBackwards <T>(ISorted <T> coll, T x1, T x2)
        {
            var range = coll.RangeFromTo(x1, x2).Backwards();

            Print(range);
        }
Пример #25
0
        // Iterate over [x1...]
        public static void IterIncEnd <T>(ISorted <T> coll, T x1)
        {
            var range = coll.RangeFrom(x1);

            Print(range);
        }
Пример #26
0
        // Iterate over [...x2[
        public static void IterBeginExc <T>(ISorted <T> coll, T x2)
        {
            var range = coll.RangeTo(x2);

            Print(range);
        }