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); }
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); }
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); } }
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); } }