public Three(Measured <T, M> m, T v1, T v2, T v3) : base(m, m.Append(m.Measure(v1), m.Append(m.Measure(v2), m.Measure(v3)))) { _v1 = v1; _v2 = v2; _v3 = v3; }
public Node3(Measured <T, M> m, Node3 <T, M> other) : base(m, m.Append(m.Measure(other.V1), m.Append(m.Measure(other.V2), m.Measure(other.V3)))) { _v1 = other.V1; _v2 = other.V2; _v3 = other.V3; }
public Four(Measured <T, M> m, T v1, T v2, T v3, T v4) : base(m, m.Append(m.Measure(v1), m.Append(m.Measure(v2), m.Append(m.Measure(v3), m.Measure(v4))))) { _v1 = v1; _v4 = v4; _v2 = v2; _v3 = v3; }
public override FingerTree <T, M> AddRight(T a) { Measured <T, M> m = Measured; M measure = m.Append(m.Measure(a), Size); return(_suffix.Match(x1 => new Deep <T, M>(m, measure, _prefix, _middle, _mk.Two(x1.V, a)), x2 => new Deep <T, M>(m, measure, _prefix, _middle, _mk.Three(x2.V1, x2.V2, a)), x3 => new Deep <T, M>(m, measure, _prefix, _middle, _mk.Four(x3.V1, x3.V2, x3.V3, a)), x4 => new Deep <T, M>(m, measure, _prefix, _middle.AddRight(_mk.Node3(x4.V1, x4.V2, x4.V3)), _mk.Two(x4.V4, a)))); }
public override FingerTree <T, M> AddLeft(T a) { Measured <T, M> m = Measured; M size = m.Append(m.Measure(a), Size); return(_prefix.Match(x1 => new Deep <T, M>(m, size, _mk.Two(a, x1.V), _middle, _suffix), x2 => new Deep <T, M>(m, size, _mk.Three(a, x2.V1, x2.V2), _middle, _suffix), x3 => new Deep <T, M>(m, size, _mk.Four(a, x3.V1, x3.V2, x3.V3), _middle, _suffix), x4 => new Deep <T, M>(m, size, _mk.Two(a, x4.V1), _middle.AddLeft(_mk.Node3(x4.V2, x4.V3, x4.V4)), _suffix))); }
public Node2(Measured <T, M> m, Node2 <T, M> other) : base(m, m.Append(m.Measure(other.V1), m.Measure(other.V2))) { _v1 = other.V1; _v2 = other.V2; }
public Node2(Measured <T, M> m, T v1, T v2) : base(m, m.Append(m.Measure(v1), m.Measure(v2))) { _v1 = v1; _v2 = v2; }
public M Measure() { return(FoldLeft(x => t => _m.Append(x, _m.Measure(t)), _m.Identity)); }
public Single(Measured <T, M> m, T item) : base(m, m.Measure(item)) { _item = item; _mk = new MakeTree <T, M>(m); }
public One(Measured <T, M> m, T v) : base(m, m.Measure(v)) { _v = v; }