diff --git a/src/PersistentOrderedMap.mo b/src/PersistentOrderedMap.mo index 62f55b7a..86742066 100644 --- a/src/PersistentOrderedMap.mo +++ b/src/PersistentOrderedMap.mo @@ -501,13 +501,13 @@ module { /// where `n` denotes the number of key-value entries stored in the tree. public func size(t : Map) : Nat { switch t { - case (#leaf) { 0 }; case (#red(l, _, r)) { size(l) + size(r) + 1 }; case (#black(l, _, r)) { size(l) + size(r) + 1 - } + }; + case (#leaf) { 0 } } }; @@ -593,7 +593,6 @@ module { ) : Accum { switch (rbMap) { - case (#leaf) { base }; case (#red(l, (k, v), r)) { let right = foldRight(r, base, combine); let middle = combine(k, v, right); @@ -603,7 +602,8 @@ module { let right = foldRight(r, base, combine); let middle = combine(k, v, right); foldRight(l, middle, combine) - } + }; + case (#leaf) { base } } }; @@ -633,7 +633,6 @@ module { public func get(t : Map, compare : (K, K) -> O.Order, x : K) : ?V { switch t { - case (#leaf) { null }; case (#red(l, xy, r)) { switch (compare(x, xy.0)) { case (#less) { get(l, compare, x) }; @@ -647,7 +646,8 @@ module { case (#equal) { ?xy.1 }; case (#greater) { get(r, compare, x) } } - } + }; + case (#leaf) { null } } }; @@ -714,9 +714,6 @@ module { : Map{ func ins(tree : Map) : Map { switch tree { - case (#leaf) { - #red(#leaf, (key,val), #leaf) - }; case (#black(left, xy, right)) { switch (compare (key, xy.0)) { case (#less) { @@ -744,6 +741,9 @@ module { #red(left, (key,newVal), right) } } + }; + case (#leaf) { + #red(#leaf, (key,val), #leaf) } }; }; @@ -903,14 +903,14 @@ module { }; func del(tree : Map) : Map { switch tree { - case (#leaf) { - tree - }; case (#red(left, xy, right)) { delNode(left, xy, right) }; case (#black(left, xy, right)) { delNode(left, xy, right) + }; + case (#leaf) { + tree } }; };