@@ -84,35 +84,35 @@ let remove h (key : key)=
84
84
85
85
86
86
87
- let rec addBucket h (key : key ) cell =
88
- if (N. key cell) = key
89
- then
90
- N. keySet cell key
91
- else
87
+ let rec addBucket h buckets_len (key : key ) cell =
88
+ if N. key cell <> key then
92
89
let n = N. next cell in
93
90
match C. toOpt n with
94
91
| None ->
95
92
C. sizeSet h (C. size h + 1 );
96
- N. nextSet cell (C. return @@ N. bucket ~key ~next: n)
97
- | Some n -> addBucket h key n
93
+ N. nextSet cell (C. return @@ N. bucket ~key ~next: n);
94
+ if C. size h > buckets_len lsl 1 then resize h
95
+ | Some n -> addBucket h buckets_len key n
98
96
99
97
let add h key =
100
98
let h_buckets = C. buckets h in
101
- let i = hash key land (Array. length h_buckets - 1 ) in
99
+ let buckets_len = Array. length h_buckets in
100
+ let i = hash key land (buckets_len - 1 ) in
102
101
let l = Array. unsafe_get h_buckets i in
103
- (match C. toOpt l with
104
- | None ->
105
- C. sizeSet h (C. size h + 1 );
106
- Bs_Array. unsafe_set h_buckets i
107
- (C. return @@ N. bucket ~key ~next: C. emptyOpt)
108
- | Some cell ->
109
- addBucket h key cell);
110
- if C. size h > Array. length (C. buckets h) lsl 1 then resize h
102
+ match C. toOpt l with
103
+ | None ->
104
+ Bs_Array. unsafe_set h_buckets i
105
+ (C. return @@ N. bucket ~key ~next: C. emptyOpt);
106
+ C. sizeSet h (C. size h + 1 );
107
+ if C. size h > buckets_len lsl 1 then resize h
108
+ | Some cell ->
109
+ addBucket h buckets_len key cell
110
+
111
111
112
112
113
113
let rec mem_in_bucket (key : key ) cell =
114
-
115
- (N. key cell) = key ||
114
+
115
+ (N. key cell) = key ||
116
116
(match C. toOpt (N. next cell) with
117
117
| None -> false
118
118
| Some nextCell ->
@@ -134,4 +134,13 @@ let reset = C.reset0
134
134
let length = C. length0
135
135
let iter = N. iter0
136
136
let fold = N. fold0
137
- let logStats = N. logStats0
137
+ let logStats = N. logStats0
138
+ let toArray = N. toArray0
139
+
140
+ let ofArray arr =
141
+ let len = Bs.Array. length arr in
142
+ let v = create len in
143
+ for i = 0 to len - 1 do
144
+ add v (Bs.Array. unsafe_get arr i)
145
+ done ;
146
+ v
0 commit comments