Skip to content

Commit 0b69539

Browse files
committed
deriving abstract free in belt
1 parent fe9078b commit 0b69539

28 files changed

+455
-456
lines changed

jscomp/others/belt_MapDict.ml

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,12 @@ let rec set (t : _ t) newK newD ~cmp =
8080
match N.toOpt t with
8181
| None -> N.singleton newK newD
8282
| Some n ->
83-
let k= N.keyGet n in
83+
let k= n.N.key in
8484
let c = (Belt_Id.getCmpInternal cmp) newK k [@bs] in
8585
if c = 0 then
8686
N.return (N.updateValue n newD)
8787
else
88-
let l,r,v = N.leftGet n, N.rightGet n, N.valueGet n in
88+
let l,r,v = n.N.left, n.N.right, n.N.value in
8989
if c < 0 then (* Worth optimize for reference equality? *)
9090
N.bal (set ~cmp l newK newD ) k v r
9191
else
@@ -99,23 +99,23 @@ let rec updateU (t : _ t) newK f ~cmp : _ t =
9999
| Some newD -> N.singleton newK newD
100100
end
101101
| Some n ->
102-
let k= N.keyGet n in
102+
let k= n.N.key in
103103
let c = (Belt_Id.getCmpInternal cmp) newK k [@bs] in
104104
if c = 0 then
105-
match f (Some (N.valueGet n)) [@bs] with
105+
match f (Some (n.N.value)) [@bs] with
106106
| None ->
107-
let l, r = N.leftGet n , N.rightGet n in
107+
let l, r = n.N.left , n.N.right in
108108
begin match N.toOpt l, N.toOpt r with
109109
| None, _ -> r
110110
| _, None -> l
111111
| _, Some rn ->
112-
let kr, vr = ref (N.keyGet rn), ref (N.valueGet rn) in
112+
let kr, vr = ref rn.key, ref rn.value in
113113
let r = N.removeMinAuxWithRef rn kr vr in
114114
N.bal l kr.contents vr.contents r
115115
end
116116
| Some newD -> N.return (N.updateValue n newD)
117117
else
118-
let l,r,v = N.leftGet n, N.rightGet n, N.valueGet n in
118+
let l,r,v = n.N.left, n.N.right, n.N.value in
119119
if c < 0 then
120120
let ll = (updateU ~cmp l newK f ) in
121121
if l == ll then
@@ -147,14 +147,14 @@ let update t newK f ~cmp =
147147

148148

149149
let rec removeAux0 n x ~cmp =
150-
let l,v,r = N.(leftGet n, keyGet n, rightGet n ) in
150+
let {N.left = l; key = v; right = r} = n in
151151
let c = (Belt_Id.getCmpInternal cmp) x v [@bs] in
152152
if c = 0 then
153153
match N.toOpt l, N.toOpt r with
154154
| None, _ -> r
155155
| _, None -> l
156156
| _, Some rn ->
157-
let kr, vr = ref (N.keyGet rn), ref (N.valueGet rn) in
157+
let kr, vr = ref rn.key, ref rn.value in
158158
let r = N.removeMinAuxWithRef rn kr vr in
159159
N.bal l kr.contents vr.contents r
160160
else if c < 0 then
@@ -163,14 +163,14 @@ let rec removeAux0 n x ~cmp =
163163
| Some left ->
164164
let ll = removeAux0 left x ~cmp in
165165
if ll == l then (N.return n)
166-
else N.bal ll v (N.valueGet n) r
166+
else N.bal ll v (n.N.value) r
167167
else
168168
match N.toOpt r with
169169
| None -> N.return n (* Nothing to remove *)
170170
| Some right ->
171171
let rr = removeAux0 ~cmp right x in
172172
if rr == r then N.return n
173-
else N.bal l v (N.valueGet n) rr
173+
else N.bal l v (n.N.value) rr
174174

175175

176176
let remove n x ~cmp =
@@ -188,7 +188,7 @@ let mergeMany h arr ~cmp =
188188
v.contents
189189

190190
let rec splitAuxPivot n x pres ~cmp =
191-
let l,v,d,r = N.(leftGet n , keyGet n, valueGet n, rightGet n) in
191+
let {N.left = l; key = v; value = d; right = r} = n in
192192
let c = (Belt_Id.getCmpInternal cmp) x v [@bs] in
193193
if c = 0 then begin
194194
pres .contents<- Some d;
@@ -235,8 +235,8 @@ let rec mergeU s1 s2 f ~cmp =
235235
f k None (Some v) [@bs]
236236
)
237237
| Some s1n , Some s2n ->
238-
if N.heightGet s1n >= N.heightGet s2n then
239-
let l1, v1, d1, r1 = N.(leftGet s1n, keyGet s1n, valueGet s1n, rightGet s1n) in
238+
if s1n.height >= s2n.height then
239+
let {N.left = l1; key = v1; value = d1; right = r1} = s1n in
240240
let d2 = ref None in
241241
let (l2, r2) = splitAuxPivot ~cmp s2n v1 d2 in
242242
let d2 = d2.contents in
@@ -245,7 +245,7 @@ let rec mergeU s1 s2 f ~cmp =
245245
let newRight = mergeU ~cmp r1 r2 f in
246246
N.concatOrJoin newLeft v1 newD newRight
247247
else
248-
let l2,v2,d2,r2 = N.(leftGet s2n, keyGet s2n, valueGet s2n, rightGet s2n) in
248+
let {N.left = l2; key = v2; value = d2; right = r2 } = s2n in
249249
let d1 = ref None in
250250
let (l1, r1) = splitAuxPivot ~cmp s1n v2 d1 in
251251
let d1 = d1.contents in

jscomp/others/belt_MapInt.ml

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,15 @@ let rec set t (newK : key) (newD : _) =
4848
| None ->
4949
N.singleton newK newD
5050
| Some n ->
51-
let k = N.keyGet n in
51+
let k = n.N.key in
5252
if newK = k then
5353
N.return (N.updateValue n newD)
5454
else
55-
let v = N.valueGet n in
55+
let v = n.N.value in
5656
if newK < k then
57-
N.bal (set (N.leftGet n) newK newD) k v (N.rightGet n)
57+
N.bal (set n.N.left newK newD) k v n.N.right
5858
else
59-
N.bal (N.leftGet n) k v (set (N.rightGet n) newK newD)
59+
N.bal n.N.left k v (set n.N.right newK newD)
6060

6161
let rec updateU t (x : key) f =
6262
match N.toOpt t with
@@ -67,23 +67,23 @@ let rec updateU t (x : key) f =
6767
N.singleton x data
6868
end
6969
| Some n ->
70-
let k = N.keyGet n in
70+
let k = n.N.key in
7171
if x = k then
72-
begin match f (Some (N.valueGet n)) [@bs] with
72+
begin match f (Some n.N.value) [@bs] with
7373
| None ->
74-
let l, r = N.leftGet n, N.rightGet n in
74+
let {N.left = l; right = r } = n in
7575
begin match N.toOpt l, N.toOpt r with
7676
| None, _ -> r
7777
| _, None -> l
7878
| _, Some rn ->
79-
let kr, vr = ref (N.keyGet rn), ref (N.valueGet rn) in
79+
let kr, vr = ref rn.N.key, ref rn.N.value in
8080
let r = N.removeMinAuxWithRef rn kr vr in
8181
N.bal l kr.contents vr.contents r
8282
end
8383
| Some data -> N.return (N.updateValue n data )
8484
end
8585
else
86-
let l,r,v = N.leftGet n, N.rightGet n , N.valueGet n in
86+
let {N.left = l; right = r; value = v} = n in
8787
if x < k then
8888
let ll = (updateU l x f) in
8989
if l == ll then t
@@ -96,13 +96,13 @@ let rec updateU t (x : key) f =
9696
let update t x f = updateU t x (fun[@bs] a -> f a)
9797

9898
let rec removeAux n (x : key) =
99-
let l,v,r = N.(leftGet n, keyGet n, rightGet n) in
99+
let {N.left = l; key = v; right = r} = n in
100100
if x = v then
101101
match N.toOpt l, N.toOpt r with
102102
| None, _ -> r
103103
| _, None -> l
104104
| _, Some rn ->
105-
let kr, vr = ref (N.keyGet rn), ref (N.valueGet rn) in
105+
let kr, vr = ref rn.N.key, ref rn.N.value in
106106
let r = N.removeMinAuxWithRef rn kr vr in
107107
N.bal l kr.contents vr.contents r
108108
else if x < v then
@@ -111,13 +111,13 @@ let rec removeAux n (x : key) =
111111
| Some left ->
112112
let ll = removeAux left x in
113113
if ll == l then N.return n
114-
else N.(bal ll v (valueGet n) r)
114+
else N.(bal ll v n.value r)
115115
else
116116
match N.toOpt r with
117117
| None -> N.return n
118118
| Some right ->
119119
let rr = removeAux right x in
120-
N.bal l v (N.valueGet n) rr
120+
N.bal l v n.N.value rr
121121

122122
let remove n x =
123123
match N.toOpt n with

jscomp/others/belt_MapString.ml

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,15 @@ let rec set t (newK : key) (newD : _) =
4848
| None ->
4949
N.singleton newK newD
5050
| Some n ->
51-
let k = N.keyGet n in
51+
let k = n.N.key in
5252
if newK = k then
5353
N.return (N.updateValue n newD)
5454
else
55-
let v = N.valueGet n in
55+
let v = n.N.value in
5656
if newK < k then
57-
N.bal (set (N.leftGet n) newK newD) k v (N.rightGet n)
57+
N.bal (set n.N.left newK newD) k v n.N.right
5858
else
59-
N.bal (N.leftGet n) k v (set (N.rightGet n) newK newD)
59+
N.bal n.N.left k v (set n.N.right newK newD)
6060

6161
let rec updateU t (x : key) f =
6262
match N.toOpt t with
@@ -67,23 +67,23 @@ let rec updateU t (x : key) f =
6767
N.singleton x data
6868
end
6969
| Some n ->
70-
let k = N.keyGet n in
70+
let k = n.N.key in
7171
if x = k then
72-
begin match f (Some (N.valueGet n)) [@bs] with
72+
begin match f (Some n.N.value) [@bs] with
7373
| None ->
74-
let l, r = N.leftGet n, N.rightGet n in
74+
let {N.left = l; right = r } = n in
7575
begin match N.toOpt l, N.toOpt r with
7676
| None, _ -> r
7777
| _, None -> l
7878
| _, Some rn ->
79-
let kr, vr = ref (N.keyGet rn), ref (N.valueGet rn) in
79+
let kr, vr = ref rn.N.key, ref rn.N.value in
8080
let r = N.removeMinAuxWithRef rn kr vr in
8181
N.bal l kr.contents vr.contents r
8282
end
8383
| Some data -> N.return (N.updateValue n data )
8484
end
8585
else
86-
let l,r,v = N.leftGet n, N.rightGet n , N.valueGet n in
86+
let {N.left = l; right = r; value = v} = n in
8787
if x < k then
8888
let ll = (updateU l x f) in
8989
if l == ll then t
@@ -96,13 +96,13 @@ let rec updateU t (x : key) f =
9696
let update t x f = updateU t x (fun[@bs] a -> f a)
9797

9898
let rec removeAux n (x : key) =
99-
let l,v,r = N.(leftGet n, keyGet n, rightGet n) in
99+
let {N.left = l; key = v; right = r} = n in
100100
if x = v then
101101
match N.toOpt l, N.toOpt r with
102102
| None, _ -> r
103103
| _, None -> l
104104
| _, Some rn ->
105-
let kr, vr = ref (N.keyGet rn), ref (N.valueGet rn) in
105+
let kr, vr = ref rn.N.key, ref rn.N.value in
106106
let r = N.removeMinAuxWithRef rn kr vr in
107107
N.bal l kr.contents vr.contents r
108108
else if x < v then
@@ -111,13 +111,13 @@ let rec removeAux n (x : key) =
111111
| Some left ->
112112
let ll = removeAux left x in
113113
if ll == l then N.return n
114-
else N.(bal ll v (valueGet n) r)
114+
else N.(bal ll v n.value r)
115115
else
116116
match N.toOpt r with
117117
| None -> N.return n
118118
| Some right ->
119119
let rr = removeAux right x in
120-
N.bal l v (N.valueGet n) rr
120+
N.bal l v n.N.value rr
121121

122122
let remove n x =
123123
match N.toOpt n with

jscomp/others/belt_MutableMap.ml

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,30 +42,30 @@ type ('k, 'v, 'id) t = {
4242

4343

4444
let rec removeMutateAux nt x ~cmp =
45-
let k = N.keyGet nt in
45+
let k = nt.N.key in
4646
let c = (Belt_Id.getCmpInternal cmp) x k [@bs] in
4747
if c = 0 then
48-
let l,r = N.(leftGet nt, rightGet nt) in
48+
let {N.left = l; right = r} = nt in
4949
match N.(toOpt l, toOpt r) with
5050
| Some _, Some nr ->
51-
N.rightSet nt (N.removeMinAuxWithRootMutate nt nr);
51+
nt.right <- (N.removeMinAuxWithRootMutate nt nr);
5252
N.return (N.balMutate nt)
5353
| None, Some _ ->
5454
r
5555
| (Some _ | None ), None -> l
5656
else
5757
begin
5858
if c < 0 then
59-
match N.toOpt (N.leftGet nt) with
59+
match N.toOpt nt.N.left with
6060
| None -> N.return nt
6161
| Some l ->
62-
N.leftSet nt (removeMutateAux ~cmp l x );
62+
nt.left <- (removeMutateAux ~cmp l x );
6363
N.return (N.balMutate nt)
6464
else
65-
match N.toOpt (N.rightGet nt) with
65+
match N.toOpt nt.right with
6666
| None -> N.return nt
6767
| Some r ->
68-
N.rightSet nt (removeMutateAux ~cmp r x);
68+
nt.right <- (removeMutateAux ~cmp r x);
6969
N.return (N.balMutate nt)
7070
end
7171

@@ -106,31 +106,31 @@ let rec updateDone t x f ~cmp =
106106
| Some data -> N.singleton x data
107107
| None -> t)
108108
| Some nt ->
109-
let k = N.keyGet nt in
109+
let k = nt.N.key in
110110
let c = (Belt_Id.getCmpInternal cmp) x k [@bs] in
111111
if c = 0 then begin
112-
match f (Some (N.valueGet nt)) [@bs] with
112+
match f (Some nt.value) [@bs] with
113113
| None ->
114-
let l,r = N.leftGet nt, N.rightGet nt in
114+
let {N.left = l; right = r} = nt in
115115
begin match N.toOpt l, N.toOpt r with
116116
| Some _, Some nr ->
117-
N.rightSet nt (N.removeMinAuxWithRootMutate nt nr);
117+
nt.right <- (N.removeMinAuxWithRootMutate nt nr);
118118
N.return (N.balMutate nt)
119119
| None, Some _ ->
120120
r
121121
| (Some _ | None), None -> l
122122
end
123123
| Some data ->
124-
N.valueSet nt data;
124+
nt.value <- data;
125125
N.return nt
126126
end
127127
else
128-
let l, r = N.(leftGet nt, rightGet nt) in
128+
let {N.left = l; right = r} = nt in
129129
(if c < 0 then
130130
let ll = updateDone l x f ~cmp in
131-
N.leftSet nt ll
131+
nt.left <- ll
132132
else
133-
N.rightSet nt (updateDone r x f ~cmp);
133+
nt.right <- (updateDone r x f ~cmp);
134134
);
135135
N.return (N.balMutate nt)
136136

0 commit comments

Comments
 (0)