Exemple #1
0
        private static void DontModifyInner()
        {
            Console.WriteLine("\nMake a snapshot and add it to outer");
            ICollection <ISequenced <int> > outer = new HashSet <ISequenced <int> >();

            for (int i = 0; i < 100; i++)
            {
                ISequenced <int> inner = new TreeSet <int>();
                inner.Add(i); inner.Add(i + 1);
                outer.Add(inner);
            }
            IPersistentSorted <int>
            inner1     = new TreeSet <int>(),
                inner2 = new TreeSet <int>(),
                inner3 = new TreeSet <int>();

            inner1.AddAll(new[] { 2, 3, 5, 7, 11 });
            inner2.AddAll(inner1); inner2.Add(13);
            inner3.AddAll(inner1);
            // Take a snapshot and add it to outer:
            outer.Add(inner1.Snapshot());
            Console.WriteLine("inner1 in outer: {0}", outer.Contains(inner1));
            Console.WriteLine("inner2 in outer: {0}", outer.Contains(inner2));
            Console.WriteLine("inner3 in outer: {0}", outer.Contains(inner3));
            inner1.Add(13);
            Console.WriteLine("inner1 equals inner2: {0}",
                              outer.EqualityComparer.Equals(inner1, inner2));
            Console.WriteLine("inner1 equals inner3: {0}",
                              outer.EqualityComparer.Equals(inner1, inner3));
            Console.WriteLine("inner1 in outer: {0}", outer.Contains(inner1));
            Console.WriteLine("inner2 in outer: {0}", outer.Contains(inner2));
            Console.WriteLine("inner3 in outer: {0}", outer.Contains(inner3));
            Console.WriteLine("outer.Count: {0}", outer.Count);
        }
Exemple #2
0
 private static void DontModifyInner()
 {
     Console.WriteLine("\nMake a snapshot and add it to outer");
     ICollection<ISequenced<int>> outer = new HashSet<ISequenced<int>>();
     for (int i = 0; i < 100; i++)
     {
         ISequenced<int> inner = new TreeSet<int>();
         inner.Add(i); inner.Add(i + 1);
         outer.Add(inner);
     }
     IPersistentSorted<int>
       inner1 = new TreeSet<int>(),
       inner2 = new TreeSet<int>(),
       inner3 = new TreeSet<int>();
     inner1.AddAll(new[] { 2, 3, 5, 7, 11 });
     inner2.AddAll(inner1); inner2.Add(13);
     inner3.AddAll(inner1);
     // Take a snapshot and add it to outer:
     outer.Add(inner1.Snapshot());
     Console.WriteLine("inner1 in outer: {0}", outer.Contains(inner1));
     Console.WriteLine("inner2 in outer: {0}", outer.Contains(inner2));
     Console.WriteLine("inner3 in outer: {0}", outer.Contains(inner3));
     inner1.Add(13);
     Console.WriteLine("inner1 equals inner2: {0}",
                       outer.EqualityComparer.Equals(inner1, inner2));
     Console.WriteLine("inner1 equals inner3: {0}",
                       outer.EqualityComparer.Equals(inner1, inner3));
     Console.WriteLine("inner1 in outer: {0}", outer.Contains(inner1));
     Console.WriteLine("inner2 in outer: {0}", outer.Contains(inner2));
     Console.WriteLine("inner3 in outer: {0}", outer.Contains(inner3));
     Console.WriteLine("outer.Count: {0}", outer.Count);
 }
Exemple #3
0
        public void Build()
        {
            //htree.Clear();
            htree = new TreeDictionary <double, ISorted <Edge <T> > >(dc);

            TreeSet <Edge <T> > vtree = new TreeSet <Edge <T> >(lc);
            double lastx = Double.NegativeInfinity;

            foreach (KeyValuePair <EndPoint, Edge <T> > p in endpoints)
            {
                if (dc.Compare(p.Key.x, lastx) > 0)
                {
                    //Put an empty snapshot at -infinity!
                    htree[lastx]      = (ISorted <Edge <T> >)(vtree.Snapshot());
                    lc.X              = lastx = p.Key.x;
                    lc.compareToRight = false;
                }

                if (p.Key.start)
                {
                    if (!lc.compareToRight)
                    {
                        lc.compareToRight = true;
                    }
                    Debug.Assert(vtree.Check());
                    bool chk = vtree.Add(p.Value);
                    Debug.Assert(vtree.Check());

                    Debug.Assert(chk, "edge was not added!", "" + p.Value);
                }
                else
                {
                    Debug.Assert(!lc.compareToRight);

                    Debug.Assert(vtree.Check("C"));

                    bool chk = vtree.Remove(p.Value);
                    Debug.Assert(vtree.Check("D"));

                    Debug.Assert(chk, "edge was not removed!", "" + p.Value);
                }
            }
            lc.compareToRight = true;

            htree[lastx] = (TreeSet <Edge <T> >)(vtree.Snapshot());
            built        = true;
        }
        private static ISorted <SCG.KeyValuePair <K, V> > ClonePairs(TreeDictionary <K, V> template, bool isSnapshot)
        {
            TreeSet <SCG.KeyValuePair <K, V> > originalPairs = (TreeSet <SCG.KeyValuePair <K, V> >)template.Pairs;

            return(isSnapshot
                ? originalPairs.Snapshot()
                : (ISorted <SCG.KeyValuePair <K, V> >)originalPairs.Clone());
        }
        public static void IntSetSet()
        {
            ICollection <ISequenced <int> > outer = new HashSet <ISequenced <int> >();

            int[]         ss    = { 2, 3, 5, 7 };
            TreeSet <int> inner = new TreeSet <int>();

            outer.Add(inner.Snapshot());
            foreach (int i in ss)
            {
                inner.Add(i);
                outer.Add(inner.Snapshot());
            }
            foreach (ISequenced <int> s in outer)
            {
                int sum = 0;
                s.Apply(delegate(int x) { sum += x; });
                Console.WriteLine("Set has {0} elements and sum {1}", s.Count, sum);
            }
        }
Exemple #6
0
 public static void IntSetSet()
 {
     ICollection<ISequenced<int>> outer = new HashSet<ISequenced<int>>();
     int[] ss = { 2, 3, 5, 7 };
     TreeSet<int> inner = new TreeSet<int>();
     outer.Add(inner.Snapshot());
     foreach (int i in ss)
     {
         inner.Add(i);
         outer.Add(inner.Snapshot());
     }
     foreach (ISequenced<int> s in outer)
     {
         int sum = 0;
         s.Apply(delegate(int x) { sum += x; });
         Console.WriteLine("Set has {0} elements and sum {1}", s.Count, sum);
     }
 }