예제 #1
0
 private static WBT <Pair <k, v> > .N Alter(Func <k, Ord> p, k key, Func <Opt <v>, Opt <v> > f, WBT <Pair <k, v> > .N t) =>
 WBT <Pair <k, v> > .Tip(t)
         ? (f(Ctors.None())).Case(_ => WBT <Pair <k, v> > .Tip(), (v vv) => WBT <Pair <k, v> > .Singleton(Ctors.Pair(key, vv)))
         : (p(t.v.Left()).Case(
                _ => WBT <Pair <k, v> > .Balance(t.v, Alter(p, key, f, t.l), t.r),
                _ => f(Ctors.Some(t.v.Right())).Case(
                    __ => WBT <Pair <k, v> > .Glue(t.l, t.r),
                    vv => WBT <Pair <k, v> > .Bin(t.s, Ctors.Pair(key, vv), t.l, t.r)),
                _ => WBT <Pair <k, v> > .Balance(t.v, t.l, Alter(p, key, f, t.r))));
예제 #2
0
 public int Size() => WBT <v> .Size(_tree);
예제 #3
0
 public TreeSet <v> Delete(v value) => New(_ord, WBT <v> .Delete(WBT <v> .MkComp(_ord, value), _tree));
예제 #4
0
 public TreeSet <v> Insert(v value) => New(_ord, WBT <v> .Insert(WBT <v> .MkComp(_ord, value), value, _tree));
예제 #5
0
 public bool Contains(v value) => WBT <v> .Lookup(WBT <v> .MkComp(_ord, value), _tree).IsSome();
예제 #6
0
 public TreeSet <v> Singleton(v value, ROrder <v, Unit> ord = null) => New(ord, WBT <v> .Singleton(value));
예제 #7
0
 private static TreeSet <v> New(ROrder <v, Unit> ord, WBT <v> .N t) => new TreeSet <v>
 {
     _ord = ord, _tree = t
 };
예제 #8
0
 public int Size() => WBT <Pair <k, v> > .Size(_tree);
예제 #9
0
 public TreeMap <k, v> Alter(k key, Func <Opt <v>, Opt <v> > f) => New(_ord, Alter(WBT <k> .MkComp(_ord, key), key, f, _tree));
예제 #10
0
 public Opt <v> Lookup(k key) => WBT <Pair <k, v> > .Lookup(WBT <k> .MkComp(_ord, key).CoMap <Pair <k, v>, k, Ord>(Dtors.Left), _tree).Map(kv => kv.Right());
예제 #11
0
 public TreeMap <k, v> Singleton(k key, v value, ROrder <k, Unit> ord = null) => New(ord, WBT <Pair <k, v> > .Singleton(Ctors.Pair(key, value)));
예제 #12
0
 private static WBT <Pair <k, v> > .N Map(Func <k, v, v> f, WBT <Pair <k, v> > .N t) =>
 WBT <Pair <k, v> > .Tip(t) ? t : WBT <Pair <k, v> > .Bin(t.s, Ctors.Pair(t.v.Left(), t.v.Case(f)), Map(f, t.l), Map(f, t.r));
예제 #13
0
 private static TreeMap <k, v> New(ROrder <k, Unit> ord, WBT <Pair <k, v> > .N t) => new TreeMap <k, v>
 {
     _ord = ord, _tree = t
 };