@tellahq/rescript 10.1.4-republish-1 → 10.1.4-republish-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/darwinarm64/ninja.exe +0 -0
- package/package.json +1 -1
- package/lib/ocaml/arg.cmi +0 -0
- package/lib/ocaml/arg.cmt +0 -0
- package/lib/ocaml/arg.cmti +0 -0
- package/lib/ocaml/arg.ml +0 -359
- package/lib/ocaml/arg.mli +0 -185
- package/lib/ocaml/array.cmi +0 -0
- package/lib/ocaml/array.cmt +0 -0
- package/lib/ocaml/array.cmti +0 -0
- package/lib/ocaml/array.ml +0 -307
- package/lib/ocaml/array.mli +0 -275
- package/lib/ocaml/arrayLabels.cmi +0 -0
- package/lib/ocaml/arrayLabels.cmt +0 -0
- package/lib/ocaml/arrayLabels.cmti +0 -0
- package/lib/ocaml/arrayLabels.ml +0 -307
- package/lib/ocaml/arrayLabels.mli +0 -276
- package/lib/ocaml/belt.cmi +0 -0
- package/lib/ocaml/belt.cmt +0 -0
- package/lib/ocaml/belt.ml +0 -352
- package/lib/ocaml/belt_Array.cmi +0 -0
- package/lib/ocaml/belt_Array.cmt +0 -0
- package/lib/ocaml/belt_Array.cmti +0 -0
- package/lib/ocaml/belt_Array.ml +0 -525
- package/lib/ocaml/belt_Array.mli +0 -707
- package/lib/ocaml/belt_Float.cmi +0 -0
- package/lib/ocaml/belt_Float.cmt +0 -0
- package/lib/ocaml/belt_Float.cmti +0 -0
- package/lib/ocaml/belt_Float.ml +0 -50
- package/lib/ocaml/belt_Float.mli +0 -106
- package/lib/ocaml/belt_HashMap.cmi +0 -0
- package/lib/ocaml/belt_HashMap.cmt +0 -0
- package/lib/ocaml/belt_HashMap.cmti +0 -0
- package/lib/ocaml/belt_HashMap.ml +0 -226
- package/lib/ocaml/belt_HashMap.mli +0 -436
- package/lib/ocaml/belt_HashMapInt.cmi +0 -0
- package/lib/ocaml/belt_HashMapInt.cmt +0 -0
- package/lib/ocaml/belt_HashMapInt.cmti +0 -0
- package/lib/ocaml/belt_HashMapInt.ml +0 -206
- package/lib/ocaml/belt_HashMapInt.mli +0 -50
- package/lib/ocaml/belt_HashMapString.cmi +0 -0
- package/lib/ocaml/belt_HashMapString.cmt +0 -0
- package/lib/ocaml/belt_HashMapString.cmti +0 -0
- package/lib/ocaml/belt_HashMapString.ml +0 -206
- package/lib/ocaml/belt_HashMapString.mli +0 -50
- package/lib/ocaml/belt_HashSet.cmi +0 -0
- package/lib/ocaml/belt_HashSet.cmt +0 -0
- package/lib/ocaml/belt_HashSet.cmti +0 -0
- package/lib/ocaml/belt_HashSet.ml +0 -196
- package/lib/ocaml/belt_HashSet.mli +0 -125
- package/lib/ocaml/belt_HashSetInt.cmi +0 -0
- package/lib/ocaml/belt_HashSetInt.cmt +0 -0
- package/lib/ocaml/belt_HashSetInt.cmti +0 -0
- package/lib/ocaml/belt_HashSetInt.ml +0 -155
- package/lib/ocaml/belt_HashSetInt.mli +0 -74
- package/lib/ocaml/belt_HashSetString.cmi +0 -0
- package/lib/ocaml/belt_HashSetString.cmt +0 -0
- package/lib/ocaml/belt_HashSetString.cmti +0 -0
- package/lib/ocaml/belt_HashSetString.ml +0 -156
- package/lib/ocaml/belt_HashSetString.mli +0 -74
- package/lib/ocaml/belt_Id.cmi +0 -0
- package/lib/ocaml/belt_Id.cmt +0 -0
- package/lib/ocaml/belt_Id.cmti +0 -0
- package/lib/ocaml/belt_Id.ml +0 -133
- package/lib/ocaml/belt_Id.mli +0 -171
- package/lib/ocaml/belt_Int.cmi +0 -0
- package/lib/ocaml/belt_Int.cmt +0 -0
- package/lib/ocaml/belt_Int.cmti +0 -0
- package/lib/ocaml/belt_Int.ml +0 -50
- package/lib/ocaml/belt_Int.mli +0 -103
- package/lib/ocaml/belt_List.cmi +0 -0
- package/lib/ocaml/belt_List.cmt +0 -0
- package/lib/ocaml/belt_List.cmti +0 -0
- package/lib/ocaml/belt_List.ml +0 -803
- package/lib/ocaml/belt_List.mli +0 -844
- package/lib/ocaml/belt_Map.cmi +0 -0
- package/lib/ocaml/belt_Map.cmt +0 -0
- package/lib/ocaml/belt_Map.cmti +0 -0
- package/lib/ocaml/belt_Map.ml +0 -170
- package/lib/ocaml/belt_Map.mli +0 -496
- package/lib/ocaml/belt_MapDict.cmi +0 -0
- package/lib/ocaml/belt_MapDict.cmt +0 -0
- package/lib/ocaml/belt_MapDict.cmti +0 -0
- package/lib/ocaml/belt_MapDict.ml +0 -278
- package/lib/ocaml/belt_MapDict.mli +0 -268
- package/lib/ocaml/belt_MapInt.cmi +0 -0
- package/lib/ocaml/belt_MapInt.cmt +0 -0
- package/lib/ocaml/belt_MapInt.cmti +0 -0
- package/lib/ocaml/belt_MapInt.ml +0 -169
- package/lib/ocaml/belt_MapInt.mli +0 -187
- package/lib/ocaml/belt_MapString.cmi +0 -0
- package/lib/ocaml/belt_MapString.cmt +0 -0
- package/lib/ocaml/belt_MapString.cmti +0 -0
- package/lib/ocaml/belt_MapString.ml +0 -169
- package/lib/ocaml/belt_MapString.mli +0 -187
- package/lib/ocaml/belt_MutableMap.cmi +0 -0
- package/lib/ocaml/belt_MutableMap.cmt +0 -0
- package/lib/ocaml/belt_MutableMap.cmti +0 -0
- package/lib/ocaml/belt_MutableMap.ml +0 -241
- package/lib/ocaml/belt_MutableMap.mli +0 -145
- package/lib/ocaml/belt_MutableMapInt.cmi +0 -0
- package/lib/ocaml/belt_MutableMapInt.cmt +0 -0
- package/lib/ocaml/belt_MutableMapInt.cmti +0 -0
- package/lib/ocaml/belt_MutableMapInt.ml +0 -172
- package/lib/ocaml/belt_MutableMapInt.mli +0 -135
- package/lib/ocaml/belt_MutableMapString.cmi +0 -0
- package/lib/ocaml/belt_MutableMapString.cmt +0 -0
- package/lib/ocaml/belt_MutableMapString.cmti +0 -0
- package/lib/ocaml/belt_MutableMapString.ml +0 -172
- package/lib/ocaml/belt_MutableMapString.mli +0 -135
- package/lib/ocaml/belt_MutableQueue.cmi +0 -0
- package/lib/ocaml/belt_MutableQueue.cmt +0 -0
- package/lib/ocaml/belt_MutableQueue.cmti +0 -0
- package/lib/ocaml/belt_MutableQueue.ml +0 -222
- package/lib/ocaml/belt_MutableQueue.mli +0 -116
- package/lib/ocaml/belt_MutableSet.cmi +0 -0
- package/lib/ocaml/belt_MutableSet.cmt +0 -0
- package/lib/ocaml/belt_MutableSet.cmti +0 -0
- package/lib/ocaml/belt_MutableSet.ml +0 -371
- package/lib/ocaml/belt_MutableSet.mli +0 -617
- package/lib/ocaml/belt_MutableSetInt.cmi +0 -0
- package/lib/ocaml/belt_MutableSetInt.cmt +0 -0
- package/lib/ocaml/belt_MutableSetInt.cmti +0 -0
- package/lib/ocaml/belt_MutableSetInt.ml +0 -342
- package/lib/ocaml/belt_MutableSetInt.mli +0 -124
- package/lib/ocaml/belt_MutableSetString.cmi +0 -0
- package/lib/ocaml/belt_MutableSetString.cmt +0 -0
- package/lib/ocaml/belt_MutableSetString.cmti +0 -0
- package/lib/ocaml/belt_MutableSetString.ml +0 -342
- package/lib/ocaml/belt_MutableSetString.mli +0 -124
- package/lib/ocaml/belt_MutableStack.cmi +0 -0
- package/lib/ocaml/belt_MutableStack.cmt +0 -0
- package/lib/ocaml/belt_MutableStack.cmti +0 -0
- package/lib/ocaml/belt_MutableStack.ml +0 -106
- package/lib/ocaml/belt_MutableStack.mli +0 -63
- package/lib/ocaml/belt_Option.cmi +0 -0
- package/lib/ocaml/belt_Option.cmt +0 -0
- package/lib/ocaml/belt_Option.cmti +0 -0
- package/lib/ocaml/belt_Option.ml +0 -93
- package/lib/ocaml/belt_Option.mli +0 -270
- package/lib/ocaml/belt_Range.cmi +0 -0
- package/lib/ocaml/belt_Range.cmt +0 -0
- package/lib/ocaml/belt_Range.cmti +0 -0
- package/lib/ocaml/belt_Range.ml +0 -76
- package/lib/ocaml/belt_Range.mli +0 -114
- package/lib/ocaml/belt_Result.cmi +0 -0
- package/lib/ocaml/belt_Result.cmt +0 -0
- package/lib/ocaml/belt_Result.cmti +0 -0
- package/lib/ocaml/belt_Result.ml +0 -75
- package/lib/ocaml/belt_Result.mli +0 -205
- package/lib/ocaml/belt_Set.cmi +0 -0
- package/lib/ocaml/belt_Set.cmt +0 -0
- package/lib/ocaml/belt_Set.cmti +0 -0
- package/lib/ocaml/belt_Set.cppo.ml +0 -205
- package/lib/ocaml/belt_Set.cppo.mli +0 -153
- package/lib/ocaml/belt_Set.ml +0 -164
- package/lib/ocaml/belt_Set.mli +0 -523
- package/lib/ocaml/belt_SetDict.cmi +0 -0
- package/lib/ocaml/belt_SetDict.cmt +0 -0
- package/lib/ocaml/belt_SetDict.cmti +0 -0
- package/lib/ocaml/belt_SetDict.ml +0 -237
- package/lib/ocaml/belt_SetDict.mli +0 -567
- package/lib/ocaml/belt_SetInt.cmi +0 -0
- package/lib/ocaml/belt_SetInt.cmt +0 -0
- package/lib/ocaml/belt_SetInt.cmti +0 -0
- package/lib/ocaml/belt_SetInt.ml +0 -201
- package/lib/ocaml/belt_SetInt.mli +0 -151
- package/lib/ocaml/belt_SetString.cmi +0 -0
- package/lib/ocaml/belt_SetString.cmt +0 -0
- package/lib/ocaml/belt_SetString.cmti +0 -0
- package/lib/ocaml/belt_SetString.ml +0 -201
- package/lib/ocaml/belt_SetString.mli +0 -151
- package/lib/ocaml/belt_SortArray.cmi +0 -0
- package/lib/ocaml/belt_SortArray.cmt +0 -0
- package/lib/ocaml/belt_SortArray.cmti +0 -0
- package/lib/ocaml/belt_SortArray.ml +0 -322
- package/lib/ocaml/belt_SortArray.mli +0 -146
- package/lib/ocaml/belt_SortArrayInt.cmi +0 -0
- package/lib/ocaml/belt_SortArrayInt.cmt +0 -0
- package/lib/ocaml/belt_SortArrayInt.cmti +0 -0
- package/lib/ocaml/belt_SortArrayInt.ml +0 -263
- package/lib/ocaml/belt_SortArrayInt.mli +0 -93
- package/lib/ocaml/belt_SortArrayString.cmi +0 -0
- package/lib/ocaml/belt_SortArrayString.cmt +0 -0
- package/lib/ocaml/belt_SortArrayString.cmti +0 -0
- package/lib/ocaml/belt_SortArrayString.ml +0 -263
- package/lib/ocaml/belt_SortArrayString.mli +0 -93
- package/lib/ocaml/belt_internalAVLset.cmt +0 -0
- package/lib/ocaml/belt_internalAVLset.cmti +0 -0
- package/lib/ocaml/belt_internalAVLset.ml +0 -665
- package/lib/ocaml/belt_internalAVLset.mli +0 -124
- package/lib/ocaml/belt_internalAVLtree.cmt +0 -0
- package/lib/ocaml/belt_internalAVLtree.cmti +0 -0
- package/lib/ocaml/belt_internalAVLtree.ml +0 -762
- package/lib/ocaml/belt_internalAVLtree.mli +0 -215
- package/lib/ocaml/belt_internalBuckets.cmt +0 -0
- package/lib/ocaml/belt_internalBuckets.cmti +0 -0
- package/lib/ocaml/belt_internalBuckets.ml +0 -218
- package/lib/ocaml/belt_internalBuckets.mli +0 -57
- package/lib/ocaml/belt_internalBucketsType.cmt +0 -0
- package/lib/ocaml/belt_internalBucketsType.cmti +0 -0
- package/lib/ocaml/belt_internalBucketsType.ml +0 -59
- package/lib/ocaml/belt_internalBucketsType.mli +0 -46
- package/lib/ocaml/belt_internalMapInt.cmt +0 -0
- package/lib/ocaml/belt_internalMapInt.ml +0 -227
- package/lib/ocaml/belt_internalMapString.cmt +0 -0
- package/lib/ocaml/belt_internalMapString.ml +0 -227
- package/lib/ocaml/belt_internalSetBuckets.cmt +0 -0
- package/lib/ocaml/belt_internalSetBuckets.cmti +0 -0
- package/lib/ocaml/belt_internalSetBuckets.ml +0 -157
- package/lib/ocaml/belt_internalSetBuckets.mli +0 -47
- package/lib/ocaml/belt_internalSetInt.cmt +0 -0
- package/lib/ocaml/belt_internalSetInt.ml +0 -129
- package/lib/ocaml/belt_internalSetString.cmt +0 -0
- package/lib/ocaml/belt_internalSetString.ml +0 -129
- package/lib/ocaml/belt_internals.cmti +0 -0
- package/lib/ocaml/belt_internals.mli +0 -79
- package/lib/ocaml/buffer.cmi +0 -0
- package/lib/ocaml/buffer.cmt +0 -0
- package/lib/ocaml/buffer.cmti +0 -0
- package/lib/ocaml/buffer.ml +0 -250
- package/lib/ocaml/buffer.mli +0 -149
- package/lib/ocaml/bytes.cmi +0 -0
- package/lib/ocaml/bytes.cmt +0 -0
- package/lib/ocaml/bytes.cmti +0 -0
- package/lib/ocaml/bytes.ml +0 -431
- package/lib/ocaml/bytes.mli +0 -430
- package/lib/ocaml/bytesLabels.cmi +0 -0
- package/lib/ocaml/bytesLabels.cmt +0 -0
- package/lib/ocaml/bytesLabels.cmti +0 -0
- package/lib/ocaml/bytesLabels.ml +0 -428
- package/lib/ocaml/bytesLabels.mli +0 -276
- package/lib/ocaml/callback.cmi +0 -0
- package/lib/ocaml/callback.cmt +0 -0
- package/lib/ocaml/callback.cmti +0 -0
- package/lib/ocaml/callback.ml +0 -20
- package/lib/ocaml/callback.mli +0 -34
- package/lib/ocaml/camlinternalLazy.cmi +0 -0
- package/lib/ocaml/camlinternalLazy.cmt +0 -0
- package/lib/ocaml/camlinternalLazy.cmti +0 -0
- package/lib/ocaml/camlinternalLazy.ml +0 -89
- package/lib/ocaml/camlinternalLazy.mli +0 -27
- package/lib/ocaml/camlinternalMod.cmi +0 -0
- package/lib/ocaml/camlinternalMod.cmt +0 -0
- package/lib/ocaml/camlinternalMod.cmti +0 -0
- package/lib/ocaml/camlinternalMod.ml +0 -21
- package/lib/ocaml/camlinternalMod.mli +0 -25
- package/lib/ocaml/char.cmi +0 -0
- package/lib/ocaml/char.cmt +0 -0
- package/lib/ocaml/char.cmti +0 -0
- package/lib/ocaml/char.ml +0 -76
- package/lib/ocaml/char.mli +0 -72
- package/lib/ocaml/complex.cmi +0 -0
- package/lib/ocaml/complex.cmt +0 -0
- package/lib/ocaml/complex.cmti +0 -0
- package/lib/ocaml/complex.ml +0 -87
- package/lib/ocaml/complex.mli +0 -86
- package/lib/ocaml/digest.cmi +0 -0
- package/lib/ocaml/digest.cmt +0 -0
- package/lib/ocaml/digest.cmti +0 -0
- package/lib/ocaml/digest.ml +0 -66
- package/lib/ocaml/digest.mli +0 -68
- package/lib/ocaml/dom.cmi +0 -0
- package/lib/ocaml/dom.cmt +0 -0
- package/lib/ocaml/dom.ml +0 -296
- package/lib/ocaml/dom_storage.cmi +0 -0
- package/lib/ocaml/dom_storage.cmt +0 -0
- package/lib/ocaml/dom_storage.ml +0 -22
- package/lib/ocaml/dom_storage2.cmi +0 -0
- package/lib/ocaml/dom_storage2.cmt +0 -0
- package/lib/ocaml/dom_storage2.ml +0 -11
- package/lib/ocaml/filename.cmi +0 -0
- package/lib/ocaml/filename.cmt +0 -0
- package/lib/ocaml/filename.cmti +0 -0
- package/lib/ocaml/filename.ml +0 -233
- package/lib/ocaml/filename.mli +0 -134
- package/lib/ocaml/genlex.cmi +0 -0
- package/lib/ocaml/genlex.cmt +0 -0
- package/lib/ocaml/genlex.cmti +0 -0
- package/lib/ocaml/genlex.ml +0 -201
- package/lib/ocaml/genlex.mli +0 -73
- package/lib/ocaml/hashmap.cppo.ml +0 -214
- package/lib/ocaml/hashmap.cppo.mli +0 -54
- package/lib/ocaml/hashset.cppo.ml +0 -165
- package/lib/ocaml/hashset.cppo.mli +0 -77
- package/lib/ocaml/hashtbl.cmi +0 -0
- package/lib/ocaml/hashtbl.cmt +0 -0
- package/lib/ocaml/hashtbl.cmti +0 -0
- package/lib/ocaml/hashtbl.ml +0 -541
- package/lib/ocaml/hashtbl.mli +0 -411
- package/lib/ocaml/hashtblLabels.cmi +0 -0
- package/lib/ocaml/hashtblLabels.cmt +0 -0
- package/lib/ocaml/hashtblLabels.ml +0 -130
- package/lib/ocaml/int32.cmi +0 -0
- package/lib/ocaml/int32.cmt +0 -0
- package/lib/ocaml/int32.cmti +0 -0
- package/lib/ocaml/int32.ml +0 -64
- package/lib/ocaml/int32.mli +0 -186
- package/lib/ocaml/int64.cmi +0 -0
- package/lib/ocaml/int64.cmt +0 -0
- package/lib/ocaml/int64.cmti +0 -0
- package/lib/ocaml/int64.ml +0 -72
- package/lib/ocaml/int64.mli +0 -197
- package/lib/ocaml/internal_map.cppo.ml +0 -230
- package/lib/ocaml/internal_set.cppo.ml +0 -134
- package/lib/ocaml/js.cmi +0 -0
- package/lib/ocaml/js.cmt +0 -0
- package/lib/ocaml/js.ml +0 -316
- package/lib/ocaml/js_OO.cmi +0 -0
- package/lib/ocaml/js_OO.cmt +0 -0
- package/lib/ocaml/js_OO.ml +0 -180
- package/lib/ocaml/js_array.cmi +0 -0
- package/lib/ocaml/js_array.cmt +0 -0
- package/lib/ocaml/js_array.ml +0 -970
- package/lib/ocaml/js_array2.cmi +0 -0
- package/lib/ocaml/js_array2.cmt +0 -0
- package/lib/ocaml/js_array2.ml +0 -1065
- package/lib/ocaml/js_bigint.cmi +0 -0
- package/lib/ocaml/js_bigint.cmt +0 -0
- package/lib/ocaml/js_bigint.ml +0 -3
- package/lib/ocaml/js_cast.cmi +0 -0
- package/lib/ocaml/js_cast.cmt +0 -0
- package/lib/ocaml/js_cast.cmti +0 -0
- package/lib/ocaml/js_cast.ml +0 -29
- package/lib/ocaml/js_cast.mli +0 -45
- package/lib/ocaml/js_console.cmi +0 -0
- package/lib/ocaml/js_console.cmt +0 -0
- package/lib/ocaml/js_console.ml +0 -51
- package/lib/ocaml/js_date.cmi +0 -0
- package/lib/ocaml/js_date.cmt +0 -0
- package/lib/ocaml/js_date.ml +0 -1263
- package/lib/ocaml/js_dict.cmi +0 -0
- package/lib/ocaml/js_dict.cmt +0 -0
- package/lib/ocaml/js_dict.cmti +0 -0
- package/lib/ocaml/js_dict.ml +0 -114
- package/lib/ocaml/js_dict.mli +0 -152
- package/lib/ocaml/js_exn.cmi +0 -0
- package/lib/ocaml/js_exn.cmt +0 -0
- package/lib/ocaml/js_exn.cmti +0 -0
- package/lib/ocaml/js_exn.ml +0 -102
- package/lib/ocaml/js_exn.mli +0 -79
- package/lib/ocaml/js_float.cmi +0 -0
- package/lib/ocaml/js_float.cmt +0 -0
- package/lib/ocaml/js_float.ml +0 -294
- package/lib/ocaml/js_global.cmi +0 -0
- package/lib/ocaml/js_global.cmt +0 -0
- package/lib/ocaml/js_global.ml +0 -185
- package/lib/ocaml/js_int.cmi +0 -0
- package/lib/ocaml/js_int.cmt +0 -0
- package/lib/ocaml/js_int.ml +0 -158
- package/lib/ocaml/js_json.cmi +0 -0
- package/lib/ocaml/js_json.cmt +0 -0
- package/lib/ocaml/js_json.cmti +0 -0
- package/lib/ocaml/js_json.ml +0 -195
- package/lib/ocaml/js_json.mli +0 -244
- package/lib/ocaml/js_list.cmi +0 -0
- package/lib/ocaml/js_list.cmt +0 -0
- package/lib/ocaml/js_list.cmti +0 -0
- package/lib/ocaml/js_list.ml +0 -174
- package/lib/ocaml/js_list.mli +0 -72
- package/lib/ocaml/js_map.cmi +0 -0
- package/lib/ocaml/js_map.cmt +0 -0
- package/lib/ocaml/js_map.ml +0 -3
- package/lib/ocaml/js_mapperRt.cmi +0 -0
- package/lib/ocaml/js_mapperRt.cmt +0 -0
- package/lib/ocaml/js_mapperRt.cmti +0 -0
- package/lib/ocaml/js_mapperRt.ml +0 -50
- package/lib/ocaml/js_mapperRt.mli +0 -44
- package/lib/ocaml/js_math.cmi +0 -0
- package/lib/ocaml/js_math.cmt +0 -0
- package/lib/ocaml/js_math.ml +0 -626
- package/lib/ocaml/js_null.cmi +0 -0
- package/lib/ocaml/js_null.cmt +0 -0
- package/lib/ocaml/js_null.cmti +0 -0
- package/lib/ocaml/js_null.ml +0 -57
- package/lib/ocaml/js_null.mli +0 -87
- package/lib/ocaml/js_null_undefined.cmi +0 -0
- package/lib/ocaml/js_null_undefined.cmt +0 -0
- package/lib/ocaml/js_null_undefined.cmti +0 -0
- package/lib/ocaml/js_null_undefined.ml +0 -50
- package/lib/ocaml/js_null_undefined.mli +0 -85
- package/lib/ocaml/js_obj.cmi +0 -0
- package/lib/ocaml/js_obj.cmt +0 -0
- package/lib/ocaml/js_obj.ml +0 -100
- package/lib/ocaml/js_option.cmi +0 -0
- package/lib/ocaml/js_option.cmt +0 -0
- package/lib/ocaml/js_option.cmti +0 -0
- package/lib/ocaml/js_option.ml +0 -203
- package/lib/ocaml/js_option.mli +0 -52
- package/lib/ocaml/js_promise.cmi +0 -0
- package/lib/ocaml/js_promise.cmt +0 -0
- package/lib/ocaml/js_promise.ml +0 -100
- package/lib/ocaml/js_promise2.cmi +0 -0
- package/lib/ocaml/js_promise2.cmt +0 -0
- package/lib/ocaml/js_promise2.res +0 -58
- package/lib/ocaml/js_re.cmi +0 -0
- package/lib/ocaml/js_re.cmt +0 -0
- package/lib/ocaml/js_re.ml +0 -184
- package/lib/ocaml/js_result.cmi +0 -0
- package/lib/ocaml/js_result.cmt +0 -0
- package/lib/ocaml/js_result.cmti +0 -0
- package/lib/ocaml/js_result.ml +0 -28
- package/lib/ocaml/js_result.mli +0 -28
- package/lib/ocaml/js_set.cmi +0 -0
- package/lib/ocaml/js_set.cmt +0 -0
- package/lib/ocaml/js_set.ml +0 -3
- package/lib/ocaml/js_string.cmi +0 -0
- package/lib/ocaml/js_string.cmt +0 -0
- package/lib/ocaml/js_string.ml +0 -914
- package/lib/ocaml/js_string2.cmi +0 -0
- package/lib/ocaml/js_string2.cmt +0 -0
- package/lib/ocaml/js_string2.ml +0 -912
- package/lib/ocaml/js_typed_array.cmi +0 -0
- package/lib/ocaml/js_typed_array.cmt +0 -0
- package/lib/ocaml/js_typed_array.cppo.ml +0 -429
- package/lib/ocaml/js_typed_array.ml +0 -1405
- package/lib/ocaml/js_typed_array2.cmi +0 -0
- package/lib/ocaml/js_typed_array2.cmt +0 -0
- package/lib/ocaml/js_typed_array2.cppo.ml +0 -296
- package/lib/ocaml/js_typed_array2.ml +0 -1269
- package/lib/ocaml/js_types.cmi +0 -0
- package/lib/ocaml/js_types.cmt +0 -0
- package/lib/ocaml/js_types.cmti +0 -0
- package/lib/ocaml/js_types.ml +0 -118
- package/lib/ocaml/js_types.mli +0 -78
- package/lib/ocaml/js_undefined.cmi +0 -0
- package/lib/ocaml/js_undefined.cmt +0 -0
- package/lib/ocaml/js_undefined.cmti +0 -0
- package/lib/ocaml/js_undefined.ml +0 -59
- package/lib/ocaml/js_undefined.mli +0 -92
- package/lib/ocaml/js_vector.cmi +0 -0
- package/lib/ocaml/js_vector.cmt +0 -0
- package/lib/ocaml/js_vector.cmti +0 -0
- package/lib/ocaml/js_vector.ml +0 -143
- package/lib/ocaml/js_vector.mli +0 -92
- package/lib/ocaml/js_weakmap.cmi +0 -0
- package/lib/ocaml/js_weakmap.cmt +0 -0
- package/lib/ocaml/js_weakmap.ml +0 -3
- package/lib/ocaml/js_weakset.cmi +0 -0
- package/lib/ocaml/js_weakset.cmt +0 -0
- package/lib/ocaml/js_weakset.ml +0 -3
- package/lib/ocaml/jsx.cmi +0 -0
- package/lib/ocaml/jsx.cmt +0 -0
- package/lib/ocaml/jsx.res +0 -40
- package/lib/ocaml/jsxDOM.cmi +0 -0
- package/lib/ocaml/jsxDOM.cmt +0 -0
- package/lib/ocaml/jsxDOM.res +0 -620
- package/lib/ocaml/jsxDOMStyle.cmi +0 -0
- package/lib/ocaml/jsxDOMStyle.cmt +0 -0
- package/lib/ocaml/jsxDOMStyle.ml +0 -781
- package/lib/ocaml/jsxEvent.cmi +0 -0
- package/lib/ocaml/jsxEvent.cmt +0 -0
- package/lib/ocaml/jsxEvent.ml +0 -358
- package/lib/ocaml/jsxPPXReactSupport.cmi +0 -0
- package/lib/ocaml/jsxPPXReactSupport.cmt +0 -0
- package/lib/ocaml/jsxPPXReactSupport.res +0 -48
- package/lib/ocaml/lazy.cmi +0 -0
- package/lib/ocaml/lazy.cmt +0 -0
- package/lib/ocaml/lazy.cmti +0 -0
- package/lib/ocaml/lazy.ml +0 -70
- package/lib/ocaml/lazy.mli +0 -95
- package/lib/ocaml/lexing.cmi +0 -0
- package/lib/ocaml/lexing.cmt +0 -0
- package/lib/ocaml/lexing.cmti +0 -0
- package/lib/ocaml/lexing.ml +0 -230
- package/lib/ocaml/lexing.mli +0 -172
- package/lib/ocaml/list.cmi +0 -0
- package/lib/ocaml/list.cmt +0 -0
- package/lib/ocaml/list.cmti +0 -0
- package/lib/ocaml/list.ml +0 -485
- package/lib/ocaml/list.mli +0 -347
- package/lib/ocaml/listLabels.cmi +0 -0
- package/lib/ocaml/listLabels.cmt +0 -0
- package/lib/ocaml/listLabels.cmti +0 -0
- package/lib/ocaml/listLabels.ml +0 -485
- package/lib/ocaml/listLabels.mli +0 -353
- package/lib/ocaml/map.cmi +0 -0
- package/lib/ocaml/map.cmt +0 -0
- package/lib/ocaml/map.cmti +0 -0
- package/lib/ocaml/map.cppo.ml +0 -174
- package/lib/ocaml/map.cppo.mli +0 -191
- package/lib/ocaml/map.ml +0 -480
- package/lib/ocaml/map.mli +0 -315
- package/lib/ocaml/mapLabels.cmi +0 -0
- package/lib/ocaml/mapLabels.cmt +0 -0
- package/lib/ocaml/mapLabels.ml +0 -480
- package/lib/ocaml/mapm.cppo.ml +0 -177
- package/lib/ocaml/mapm.cppo.mli +0 -138
- package/lib/ocaml/moreLabels.cmi +0 -0
- package/lib/ocaml/moreLabels.cmt +0 -0
- package/lib/ocaml/moreLabels.cmti +0 -0
- package/lib/ocaml/moreLabels.ml +0 -22
- package/lib/ocaml/moreLabels.mli +0 -198
- package/lib/ocaml/node.cmi +0 -0
- package/lib/ocaml/node.cmt +0 -0
- package/lib/ocaml/node.ml +0 -84
- package/lib/ocaml/node_buffer.cmi +0 -0
- package/lib/ocaml/node_buffer.cmt +0 -0
- package/lib/ocaml/node_buffer.ml +0 -47
- package/lib/ocaml/node_child_process.cmi +0 -0
- package/lib/ocaml/node_child_process.cmt +0 -0
- package/lib/ocaml/node_child_process.ml +0 -50
- package/lib/ocaml/node_fs.cmi +0 -0
- package/lib/ocaml/node_fs.cmt +0 -0
- package/lib/ocaml/node_fs.ml +0 -153
- package/lib/ocaml/node_module.cmi +0 -0
- package/lib/ocaml/node_module.cmt +0 -0
- package/lib/ocaml/node_module.ml +0 -29
- package/lib/ocaml/node_path.cmi +0 -0
- package/lib/ocaml/node_path.cmt +0 -0
- package/lib/ocaml/node_path.ml +0 -71
- package/lib/ocaml/node_process.cmi +0 -0
- package/lib/ocaml/node_process.cmt +0 -0
- package/lib/ocaml/node_process.cmti +0 -0
- package/lib/ocaml/node_process.ml +0 -59
- package/lib/ocaml/node_process.mli +0 -48
- package/lib/ocaml/obj.cmi +0 -0
- package/lib/ocaml/obj.cmt +0 -0
- package/lib/ocaml/obj.cmti +0 -0
- package/lib/ocaml/obj.ml +0 -29
- package/lib/ocaml/obj.mli +0 -62
- package/lib/ocaml/parsing.cmi +0 -0
- package/lib/ocaml/parsing.cmt +0 -0
- package/lib/ocaml/parsing.cmti +0 -0
- package/lib/ocaml/parsing.ml +0 -212
- package/lib/ocaml/parsing.mli +0 -105
- package/lib/ocaml/pervasives.cmi +0 -0
- package/lib/ocaml/pervasives.cmt +0 -0
- package/lib/ocaml/pervasives.cmti +0 -0
- package/lib/ocaml/pervasives.ml +0 -297
- package/lib/ocaml/pervasives.mli +0 -771
- package/lib/ocaml/printexc.cmi +0 -0
- package/lib/ocaml/printexc.cmt +0 -0
- package/lib/ocaml/printexc.cmti +0 -0
- package/lib/ocaml/printexc.ml +0 -75
- package/lib/ocaml/printexc.mli +0 -57
- package/lib/ocaml/queue.cmi +0 -0
- package/lib/ocaml/queue.cmt +0 -0
- package/lib/ocaml/queue.cmti +0 -0
- package/lib/ocaml/queue.ml +0 -132
- package/lib/ocaml/queue.mli +0 -82
- package/lib/ocaml/random.cmi +0 -0
- package/lib/ocaml/random.cmt +0 -0
- package/lib/ocaml/random.cmti +0 -0
- package/lib/ocaml/random.ml +0 -273
- package/lib/ocaml/random.mli +0 -102
- package/lib/ocaml/set.cmi +0 -0
- package/lib/ocaml/set.cmt +0 -0
- package/lib/ocaml/set.cmti +0 -0
- package/lib/ocaml/set.ml +0 -526
- package/lib/ocaml/set.mli +0 -266
- package/lib/ocaml/setLabels.cmi +0 -0
- package/lib/ocaml/setLabels.cmt +0 -0
- package/lib/ocaml/setLabels.ml +0 -526
- package/lib/ocaml/setm.cppo.ml +0 -346
- package/lib/ocaml/setm.cppo.mli +0 -126
- package/lib/ocaml/sort.cmi +0 -0
- package/lib/ocaml/sort.cmt +0 -0
- package/lib/ocaml/sort.cmti +0 -0
- package/lib/ocaml/sort.cppo.ml +0 -267
- package/lib/ocaml/sort.cppo.mli +0 -96
- package/lib/ocaml/sort.ml +0 -99
- package/lib/ocaml/sort.mli +0 -44
- package/lib/ocaml/stack.cmi +0 -0
- package/lib/ocaml/stack.cmt +0 -0
- package/lib/ocaml/stack.cmti +0 -0
- package/lib/ocaml/stack.ml +0 -44
- package/lib/ocaml/stack.mli +0 -63
- package/lib/ocaml/stdLabels.cmi +0 -0
- package/lib/ocaml/stdLabels.cmt +0 -0
- package/lib/ocaml/stdLabels.cmti +0 -0
- package/lib/ocaml/stdLabels.ml +0 -24
- package/lib/ocaml/stdLabels.mli +0 -29
- package/lib/ocaml/stream.cmi +0 -0
- package/lib/ocaml/stream.cmt +0 -0
- package/lib/ocaml/stream.cmti +0 -0
- package/lib/ocaml/stream.ml +0 -213
- package/lib/ocaml/stream.mli +0 -108
- package/lib/ocaml/string.cmi +0 -0
- package/lib/ocaml/string.cmt +0 -0
- package/lib/ocaml/string.cmti +0 -0
- package/lib/ocaml/string.ml +0 -190
- package/lib/ocaml/string.mli +0 -286
- package/lib/ocaml/stringLabels.cmi +0 -0
- package/lib/ocaml/stringLabels.cmt +0 -0
- package/lib/ocaml/stringLabels.cmti +0 -0
- package/lib/ocaml/stringLabels.ml +0 -190
- package/lib/ocaml/stringLabels.mli +0 -241
- package/lib/ocaml/sys.cmi +0 -0
- package/lib/ocaml/sys.cmt +0 -0
- package/lib/ocaml/sys.cmti +0 -0
- package/lib/ocaml/sys.ml +0 -135
- package/lib/ocaml/sys.mli +0 -333
- package/lib/ocaml/uchar.cmi +0 -0
- package/lib/ocaml/uchar.cmt +0 -0
- package/lib/ocaml/uchar.cmti +0 -0
- package/lib/ocaml/uchar.ml +0 -58
- package/lib/ocaml/uchar.mli +0 -98
|
@@ -1,762 +0,0 @@
|
|
|
1
|
-
(***********************************************************************)
|
|
2
|
-
(* *)
|
|
3
|
-
(* OCaml *)
|
|
4
|
-
(* *)
|
|
5
|
-
(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *)
|
|
6
|
-
(* *)
|
|
7
|
-
(* Copyright 1996 Institut National de Recherche en Informatique et *)
|
|
8
|
-
(* en Automatique. All rights reserved. This file is distributed *)
|
|
9
|
-
(* under the terms of the GNU Library General Public License, with *)
|
|
10
|
-
(* the special exception on linking described in file ../LICENSE. *)
|
|
11
|
-
(* *)
|
|
12
|
-
(***********************************************************************)
|
|
13
|
-
(** Almost rewritten by authors of ReScript *)
|
|
14
|
-
|
|
15
|
-
[@@@bs.config {flags = [|"-bs-noassertfalse" |] }]
|
|
16
|
-
type ('k, 'v) node = {
|
|
17
|
-
mutable key : 'k; [@bs.as "k"]
|
|
18
|
-
mutable value : 'v; [@bs.as "v"]
|
|
19
|
-
mutable height : int; [@bs.as "h"]
|
|
20
|
-
mutable left : ('k,'v) t; [@bs.as "l"]
|
|
21
|
-
mutable right : ('k,'v) t [@bs.as "r"]
|
|
22
|
-
}
|
|
23
|
-
and ('key, 'a) t = ('key, 'a) node option
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
type ('k, 'id) cmp = ('k, 'id) Belt_Id.cmp
|
|
27
|
-
|
|
28
|
-
module A = Belt_Array
|
|
29
|
-
module S = Belt_SortArray
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
let treeHeight (n : _ t) =
|
|
33
|
-
match n with
|
|
34
|
-
None -> 0
|
|
35
|
-
| Some n -> n.height
|
|
36
|
-
|
|
37
|
-
let rec copy n =
|
|
38
|
-
match n with
|
|
39
|
-
| None -> n
|
|
40
|
-
| Some n ->
|
|
41
|
-
Some { n with left = copy n.left; right = copy n.right}
|
|
42
|
-
|
|
43
|
-
let create l x d r =
|
|
44
|
-
let hl, hr = treeHeight l, treeHeight r in
|
|
45
|
-
Some { left = l ; key = x ; value = d ; right = r ; height = (if hl >= hr then hl + 1 else hr + 1)}
|
|
46
|
-
|
|
47
|
-
let singleton x d =
|
|
48
|
-
Some { left = None; key = x; value = d; right = None; height = 1}
|
|
49
|
-
|
|
50
|
-
let heightGe l r =
|
|
51
|
-
match l, r with
|
|
52
|
-
| _, None -> true
|
|
53
|
-
| Some hl, Some hr -> hl.height >= hr.height
|
|
54
|
-
| None, Some _ -> false
|
|
55
|
-
|
|
56
|
-
let updateValue n newValue =
|
|
57
|
-
if n.value == newValue then n
|
|
58
|
-
else
|
|
59
|
-
{ left = n.left;
|
|
60
|
-
right = n.right;
|
|
61
|
-
key = n.key;
|
|
62
|
-
value = newValue;
|
|
63
|
-
height = n.height }
|
|
64
|
-
|
|
65
|
-
let bal l x d r =
|
|
66
|
-
let hl = match l with None -> 0 | Some n -> n.height in
|
|
67
|
-
let hr = match r with None -> 0 | Some n -> n.height in
|
|
68
|
-
if hl > hr + 2 then
|
|
69
|
-
match l with None -> assert false | Some ({left = ll; right = lr} as l) ->
|
|
70
|
-
if treeHeight ll >= treeHeight lr then
|
|
71
|
-
create ll l.key l.value (create lr x d r)
|
|
72
|
-
else
|
|
73
|
-
match lr with None -> assert false | Some lr ->
|
|
74
|
-
create (create ll l.key l.value lr.left) lr.key lr.value (create lr.right x d r)
|
|
75
|
-
else if hr > hl + 2 then
|
|
76
|
-
match r with None -> assert false | Some ({left = rl; right = rr} as r) ->
|
|
77
|
-
if treeHeight rr >= treeHeight rl then
|
|
78
|
-
create (create l x d rl) r.key r.value rr
|
|
79
|
-
else
|
|
80
|
-
match rl with None -> assert false | Some rl ->
|
|
81
|
-
create (create l x d rl.left) rl.key rl.value (create rl.right r.key r.value rr)
|
|
82
|
-
else
|
|
83
|
-
Some { left = l; key = x ; value = d ; right = r ; height = (if hl >= hr then hl + 1 else hr + 1)}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
let rec minKey0Aux n =
|
|
87
|
-
match n.left with
|
|
88
|
-
| None -> n.key
|
|
89
|
-
| Some n -> minKey0Aux n
|
|
90
|
-
|
|
91
|
-
let minKey n =
|
|
92
|
-
match n with
|
|
93
|
-
| None -> None
|
|
94
|
-
| Some n -> Some (minKey0Aux n)
|
|
95
|
-
|
|
96
|
-
let minKeyUndefined n =
|
|
97
|
-
match n with
|
|
98
|
-
| None -> Js.undefined
|
|
99
|
-
| Some n -> Js.Undefined.return (minKey0Aux n)
|
|
100
|
-
|
|
101
|
-
let rec maxKey0Aux n =
|
|
102
|
-
match n.right with
|
|
103
|
-
| None -> n.key
|
|
104
|
-
| Some n -> maxKey0Aux n
|
|
105
|
-
|
|
106
|
-
let maxKey n =
|
|
107
|
-
match n with
|
|
108
|
-
| None -> None
|
|
109
|
-
| Some n -> Some (maxKey0Aux n)
|
|
110
|
-
|
|
111
|
-
let maxKeyUndefined n =
|
|
112
|
-
match n with
|
|
113
|
-
| None -> Js.undefined
|
|
114
|
-
| Some n -> Js.Undefined.return (maxKey0Aux n)
|
|
115
|
-
|
|
116
|
-
let rec minKV0Aux n =
|
|
117
|
-
match n.left with
|
|
118
|
-
| None -> n.key , n.value
|
|
119
|
-
| Some n -> minKV0Aux n
|
|
120
|
-
|
|
121
|
-
let minimum n =
|
|
122
|
-
match n with
|
|
123
|
-
None -> None
|
|
124
|
-
| Some n -> Some (minKV0Aux n)
|
|
125
|
-
|
|
126
|
-
let minUndefined n =
|
|
127
|
-
match n with
|
|
128
|
-
| None -> Js.undefined
|
|
129
|
-
| Some n -> Js.Undefined.return (minKV0Aux n)
|
|
130
|
-
|
|
131
|
-
let rec maxKV0Aux n =
|
|
132
|
-
match n.right with
|
|
133
|
-
| None -> n.key , n.value
|
|
134
|
-
| Some n -> maxKV0Aux n
|
|
135
|
-
|
|
136
|
-
let maximum n =
|
|
137
|
-
match n with
|
|
138
|
-
| None -> None
|
|
139
|
-
| Some n -> Some (maxKV0Aux n)
|
|
140
|
-
|
|
141
|
-
let maxUndefined n =
|
|
142
|
-
match n with
|
|
143
|
-
| None -> Js.undefined
|
|
144
|
-
| Some n -> Js.Undefined.return (maxKV0Aux n)
|
|
145
|
-
|
|
146
|
-
(* TODO: use kv ref *)
|
|
147
|
-
let rec removeMinAuxWithRef n kr vr =
|
|
148
|
-
match n.left with
|
|
149
|
-
| None -> kr .contents<- n.key; vr.contents<- n.value; n.right
|
|
150
|
-
| Some ln -> bal (removeMinAuxWithRef ln kr vr) n.key n.value n.right
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
let isEmpty x = match x with None -> true | Some _ -> false
|
|
155
|
-
|
|
156
|
-
let rec stackAllLeft v s =
|
|
157
|
-
match v with
|
|
158
|
-
| None -> s
|
|
159
|
-
| Some x -> stackAllLeft x.left (x::s)
|
|
160
|
-
|
|
161
|
-
let rec findFirstByU n p =
|
|
162
|
-
match n with
|
|
163
|
-
| None -> None
|
|
164
|
-
| Some n ->
|
|
165
|
-
let left = findFirstByU n.left p in
|
|
166
|
-
if left <> None then left
|
|
167
|
-
else
|
|
168
|
-
let {key = v; value = d} = n in
|
|
169
|
-
let pvd = p v d [@bs] in
|
|
170
|
-
if pvd then Some(v, d)
|
|
171
|
-
else
|
|
172
|
-
let right = findFirstByU n.right p in
|
|
173
|
-
if right <> None then right else None
|
|
174
|
-
|
|
175
|
-
let findFirstBy n p = findFirstByU n (fun [@bs] a b -> p a b)
|
|
176
|
-
|
|
177
|
-
let rec forEachU n f =
|
|
178
|
-
match n with
|
|
179
|
-
| None -> ()
|
|
180
|
-
| Some n ->
|
|
181
|
-
forEachU n.left f ;
|
|
182
|
-
f n.key n.value [@bs];
|
|
183
|
-
forEachU n.right f
|
|
184
|
-
|
|
185
|
-
let forEach n f = forEachU n (fun [@bs] a b -> f a b)
|
|
186
|
-
|
|
187
|
-
let rec mapU n f =
|
|
188
|
-
match n with
|
|
189
|
-
None ->
|
|
190
|
-
None
|
|
191
|
-
| Some n ->
|
|
192
|
-
let newLeft = mapU n.left f in
|
|
193
|
-
let newD = f n.value [@bs] in
|
|
194
|
-
let newRight = mapU n.right f in
|
|
195
|
-
Some { left = newLeft; key = n.key; value = newD; right = newRight; height = n.height}
|
|
196
|
-
|
|
197
|
-
let map n f = mapU n (fun[@bs] a -> f a)
|
|
198
|
-
|
|
199
|
-
let rec mapWithKeyU n f =
|
|
200
|
-
match n with
|
|
201
|
-
None ->
|
|
202
|
-
None
|
|
203
|
-
| Some n ->
|
|
204
|
-
let key = n.key in
|
|
205
|
-
let newLeft = mapWithKeyU n.left f in
|
|
206
|
-
let newD = f key n.value [@bs] in
|
|
207
|
-
let newRight = mapWithKeyU n.right f in
|
|
208
|
-
Some { left = newLeft; key; value = newD; right = newRight; height = n.height}
|
|
209
|
-
|
|
210
|
-
let mapWithKey n f = mapWithKeyU n (fun [@bs] a b -> f a b)
|
|
211
|
-
|
|
212
|
-
let rec reduceU m accu f =
|
|
213
|
-
match m with
|
|
214
|
-
None -> accu
|
|
215
|
-
| Some n ->
|
|
216
|
-
let {left = l; key = v; value = d; right = r} = n in
|
|
217
|
-
reduceU
|
|
218
|
-
r
|
|
219
|
-
(f (reduceU l accu f) v d [@bs]) f
|
|
220
|
-
|
|
221
|
-
let reduce m accu f = reduceU m accu (fun [@bs] a b c -> f a b c)
|
|
222
|
-
|
|
223
|
-
let rec everyU n p =
|
|
224
|
-
match n with
|
|
225
|
-
None -> true
|
|
226
|
-
| Some n ->
|
|
227
|
-
p n.key n.value [@bs] &&
|
|
228
|
-
everyU n.left p &&
|
|
229
|
-
everyU n.right p
|
|
230
|
-
let every n p = everyU n (fun [@bs] a b -> p a b)
|
|
231
|
-
|
|
232
|
-
let rec someU n p =
|
|
233
|
-
match n with
|
|
234
|
-
None -> false
|
|
235
|
-
| Some n ->
|
|
236
|
-
p n.key n.value [@bs] ||
|
|
237
|
-
someU n.left p ||
|
|
238
|
-
someU n.right p
|
|
239
|
-
let some n p = someU n (fun[@bs] a b -> p a b)
|
|
240
|
-
(* Beware: those two functions assume that the added k is *strictly*
|
|
241
|
-
smaller (or bigger) than all the present keys in the tree; it
|
|
242
|
-
does not test for equality with the current min (or max) key.
|
|
243
|
-
|
|
244
|
-
Indeed, they are only used during the "join" operation which
|
|
245
|
-
respects this precondition.
|
|
246
|
-
*)
|
|
247
|
-
|
|
248
|
-
let rec addMinElement n k v =
|
|
249
|
-
match n with
|
|
250
|
-
| None -> singleton k v
|
|
251
|
-
| Some n
|
|
252
|
-
->
|
|
253
|
-
bal (addMinElement n.left k v ) n.key n.value n.right
|
|
254
|
-
|
|
255
|
-
let rec addMaxElement n k v =
|
|
256
|
-
match n with
|
|
257
|
-
| None -> singleton k v
|
|
258
|
-
| Some n
|
|
259
|
-
->
|
|
260
|
-
bal n.left n.key n.value (addMaxElement n.right k v )
|
|
261
|
-
|
|
262
|
-
(* Same as create and bal, but no assumptions are made on the
|
|
263
|
-
relative heights of l and r. *)
|
|
264
|
-
|
|
265
|
-
let rec join ln v d rn =
|
|
266
|
-
match ( ln, rn) with
|
|
267
|
-
(None, _) -> addMinElement rn v d
|
|
268
|
-
| (_, None) -> addMaxElement ln v d
|
|
269
|
-
| Some l, Some r ->
|
|
270
|
-
let {left = ll; key = lv; value = ld; right = lr; height = lh} = l in
|
|
271
|
-
let {left = rl; key = rv; value = rd; right = rr; height = rh} = r in
|
|
272
|
-
if lh > rh + 2 then bal ll lv ld (join lr v d rn) else
|
|
273
|
-
if rh > lh + 2 then bal (join ln v d rl) rv rd rr else
|
|
274
|
-
create ln v d rn
|
|
275
|
-
|
|
276
|
-
(* Merge two trees l and r into one.
|
|
277
|
-
All elements of l must precede the elements of r.
|
|
278
|
-
No assumption on the heights of l and r. *)
|
|
279
|
-
|
|
280
|
-
let concat t1 t2 =
|
|
281
|
-
match ( t1, t2) with
|
|
282
|
-
(None, _) -> t2
|
|
283
|
-
| (_, None) -> t1
|
|
284
|
-
| (_, Some t2n) ->
|
|
285
|
-
let kr, vr = ref t2n.key, ref t2n.value in
|
|
286
|
-
let t2r = removeMinAuxWithRef t2n kr vr in
|
|
287
|
-
join t1 kr.contents vr.contents t2r
|
|
288
|
-
|
|
289
|
-
let concatOrJoin t1 v d t2 =
|
|
290
|
-
match d with
|
|
291
|
-
| Some d -> join t1 v d t2
|
|
292
|
-
| None -> concat t1 t2
|
|
293
|
-
|
|
294
|
-
let rec keepSharedU n p =
|
|
295
|
-
match n with
|
|
296
|
-
None -> None
|
|
297
|
-
| Some n ->
|
|
298
|
-
(* call `p` in the expected left-to-right order *)
|
|
299
|
-
let {key = v; value = d} = n in
|
|
300
|
-
let newLeft = keepSharedU n.left p in
|
|
301
|
-
let pvd = p v d [@bs] in
|
|
302
|
-
let newRight = keepSharedU n.right p in
|
|
303
|
-
if pvd then join newLeft v d newRight else concat newLeft newRight
|
|
304
|
-
|
|
305
|
-
let keepShared n p = keepSharedU n (fun [@bs] a b -> p a b)
|
|
306
|
-
|
|
307
|
-
let rec keepMapU n p =
|
|
308
|
-
match n with
|
|
309
|
-
None -> None
|
|
310
|
-
| Some n ->
|
|
311
|
-
(* call `p` in the expected left-to-right order *)
|
|
312
|
-
let {key = v; value = d} = n in
|
|
313
|
-
let newLeft = keepMapU n.left p in
|
|
314
|
-
let pvd = p v d [@bs] in
|
|
315
|
-
let newRight = keepMapU n.right p in
|
|
316
|
-
match pvd with
|
|
317
|
-
| None -> concat newLeft newRight
|
|
318
|
-
| Some d -> join newLeft v d newRight
|
|
319
|
-
|
|
320
|
-
let keepMap n p = keepMapU n (fun[@bs] a b -> p a b)
|
|
321
|
-
|
|
322
|
-
let rec partitionSharedU n p =
|
|
323
|
-
match n with
|
|
324
|
-
None -> (None, None)
|
|
325
|
-
| Some n ->
|
|
326
|
-
let {key; value } = n in
|
|
327
|
-
(* call `p` in the expected left-to-right order *)
|
|
328
|
-
let (lt, lf) = partitionSharedU n.left p in
|
|
329
|
-
let pvd = p key value [@bs] in
|
|
330
|
-
let (rt, rf) = partitionSharedU n.right p in
|
|
331
|
-
if pvd
|
|
332
|
-
then (join lt key value rt, concat lf rf)
|
|
333
|
-
else (concat lt rt, join lf key value rf)
|
|
334
|
-
|
|
335
|
-
let partitionShared n p = partitionSharedU n (fun [@bs] a b -> p a b)
|
|
336
|
-
|
|
337
|
-
let rec lengthNode n =
|
|
338
|
-
let {left = l; right = r } = n in
|
|
339
|
-
let sizeL =
|
|
340
|
-
match l with
|
|
341
|
-
| None -> 0
|
|
342
|
-
| Some l ->
|
|
343
|
-
lengthNode l in
|
|
344
|
-
let sizeR =
|
|
345
|
-
match r with
|
|
346
|
-
| None -> 0
|
|
347
|
-
| Some r -> lengthNode r in
|
|
348
|
-
1 + sizeL + sizeR
|
|
349
|
-
|
|
350
|
-
let size n =
|
|
351
|
-
match n with
|
|
352
|
-
| None -> 0
|
|
353
|
-
| Some n ->
|
|
354
|
-
lengthNode n
|
|
355
|
-
|
|
356
|
-
let rec toListAux n accu =
|
|
357
|
-
match n with
|
|
358
|
-
| None -> accu
|
|
359
|
-
| Some n ->
|
|
360
|
-
let {left = l; right = r ; key = k; value = v} = n in
|
|
361
|
-
toListAux l ((k, v) :: (toListAux r accu ))
|
|
362
|
-
|
|
363
|
-
let toList s =
|
|
364
|
-
toListAux s []
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
let rec checkInvariantInternal (v : _ t) =
|
|
368
|
-
match v with
|
|
369
|
-
| None -> ()
|
|
370
|
-
| Some n ->
|
|
371
|
-
let l,r = n.left , n.right in
|
|
372
|
-
let diff = treeHeight l - treeHeight r in
|
|
373
|
-
assert (diff <=2 && diff >= -2 );
|
|
374
|
-
checkInvariantInternal l;
|
|
375
|
-
checkInvariantInternal r
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
let rec fillArrayKey n i arr =
|
|
379
|
-
let {left = l; key = v; right = r} = n in
|
|
380
|
-
let next =
|
|
381
|
-
match l with
|
|
382
|
-
| None -> i
|
|
383
|
-
| Some l ->
|
|
384
|
-
fillArrayKey l i arr in
|
|
385
|
-
A.setUnsafe arr next v;
|
|
386
|
-
let rnext = next + 1 in
|
|
387
|
-
match r with
|
|
388
|
-
| None -> rnext
|
|
389
|
-
| Some r ->
|
|
390
|
-
fillArrayKey r rnext arr
|
|
391
|
-
|
|
392
|
-
let rec fillArrayValue n i arr =
|
|
393
|
-
let l,r = n.left, n.right in
|
|
394
|
-
let next =
|
|
395
|
-
match l with
|
|
396
|
-
| None -> i
|
|
397
|
-
| Some l ->
|
|
398
|
-
fillArrayValue l i arr in
|
|
399
|
-
A.setUnsafe arr next n.value;
|
|
400
|
-
let rnext = next + 1 in
|
|
401
|
-
match r with
|
|
402
|
-
| None -> rnext
|
|
403
|
-
| Some r ->
|
|
404
|
-
fillArrayValue r rnext arr
|
|
405
|
-
|
|
406
|
-
let rec fillArray n i arr =
|
|
407
|
-
let l,v,r = n.left, n.key , n.right in
|
|
408
|
-
let next =
|
|
409
|
-
match l with
|
|
410
|
-
| None -> i
|
|
411
|
-
| Some l ->
|
|
412
|
-
fillArray l i arr in
|
|
413
|
-
A.setUnsafe arr next (v, n.value) ;
|
|
414
|
-
let rnext = next + 1 in
|
|
415
|
-
match r with
|
|
416
|
-
| None -> rnext
|
|
417
|
-
| Some r ->
|
|
418
|
-
fillArray r rnext arr
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
(* let rec fillArrayWithPartition n cursor arr p =
|
|
423
|
-
let l,v,r = n.left, n.key , n.right in
|
|
424
|
-
(match l with
|
|
425
|
-
| None -> ()
|
|
426
|
-
| Some l ->
|
|
427
|
-
fillArrayWithPartition l cursor arr p);
|
|
428
|
-
(if p v [@bs] then begin
|
|
429
|
-
let c = forwardGet cursor in
|
|
430
|
-
A.setUnsafe arr c (v,n.value);
|
|
431
|
-
forwardSet cursor (c + 1)
|
|
432
|
-
end
|
|
433
|
-
else begin
|
|
434
|
-
let c = backwardGet cursor in
|
|
435
|
-
A.setUnsafe arr c (v, n.value);
|
|
436
|
-
backwardSet cursor (c - 1)
|
|
437
|
-
end);
|
|
438
|
-
match r with
|
|
439
|
-
| None -> ()
|
|
440
|
-
| Some r ->
|
|
441
|
-
fillArrayWithPartition r cursor arr p
|
|
442
|
-
|
|
443
|
-
let rec fillArrayWithFilter n i arr p =
|
|
444
|
-
let l,v,r = n.left, n.key , n.right in
|
|
445
|
-
let next =
|
|
446
|
-
match l with
|
|
447
|
-
| None -> i
|
|
448
|
-
| Some l ->
|
|
449
|
-
fillArrayWithFilter l i arr p in
|
|
450
|
-
let rnext =
|
|
451
|
-
if p v [@bs] then
|
|
452
|
-
(A.setUnsafe arr next (v, n.value);
|
|
453
|
-
next + 1
|
|
454
|
-
)
|
|
455
|
-
else next in
|
|
456
|
-
match r with
|
|
457
|
-
| None -> rnext
|
|
458
|
-
| Some r ->
|
|
459
|
-
fillArrayWithFilter r rnext arr p
|
|
460
|
-
*)
|
|
461
|
-
|
|
462
|
-
let toArray n =
|
|
463
|
-
match n with
|
|
464
|
-
| None -> [||]
|
|
465
|
-
| Some n ->
|
|
466
|
-
let size = lengthNode n in
|
|
467
|
-
let v = A.makeUninitializedUnsafe size in
|
|
468
|
-
ignore (fillArray n 0 v : int); (* may add assertion *)
|
|
469
|
-
v
|
|
470
|
-
|
|
471
|
-
let keysToArray n =
|
|
472
|
-
match n with
|
|
473
|
-
| None -> [||]
|
|
474
|
-
| Some n ->
|
|
475
|
-
let size = lengthNode n in
|
|
476
|
-
let v = A.makeUninitializedUnsafe size in
|
|
477
|
-
ignore (fillArrayKey n 0 v : int); (* may add assertion *)
|
|
478
|
-
v
|
|
479
|
-
|
|
480
|
-
let valuesToArray n =
|
|
481
|
-
match n with
|
|
482
|
-
| None -> [||]
|
|
483
|
-
| Some n ->
|
|
484
|
-
let size = lengthNode n in
|
|
485
|
-
let v = A.makeUninitializedUnsafe size in
|
|
486
|
-
ignore (fillArrayValue n 0 v : int); (* may add assertion *)
|
|
487
|
-
v
|
|
488
|
-
|
|
489
|
-
let rec fromSortedArrayRevAux arr off len =
|
|
490
|
-
match len with
|
|
491
|
-
| 0 -> None
|
|
492
|
-
| 1 -> let k, v = (A.getUnsafe arr off) in singleton k v
|
|
493
|
-
| 2 ->
|
|
494
|
-
let (x0,y0),(x1,y1) = A.(getUnsafe arr off, getUnsafe arr (off - 1) )
|
|
495
|
-
in
|
|
496
|
-
Some { left = (singleton x0 y0); key = x1; value = y1; height = 2; right = None}
|
|
497
|
-
| 3 ->
|
|
498
|
-
let (x0,y0),(x1,y1),(x2,y2) =
|
|
499
|
-
A.(getUnsafe arr off,
|
|
500
|
-
getUnsafe arr (off - 1),
|
|
501
|
-
getUnsafe arr (off - 2)) in
|
|
502
|
-
Some { left = (singleton x0 y0);
|
|
503
|
-
right = (singleton x2 y2);
|
|
504
|
-
key = x1;
|
|
505
|
-
value = y1;
|
|
506
|
-
height = 2 }
|
|
507
|
-
| _ ->
|
|
508
|
-
let nl = len / 2 in
|
|
509
|
-
let left = fromSortedArrayRevAux arr off nl in
|
|
510
|
-
let midK,midV = A.getUnsafe arr (off - nl) in
|
|
511
|
-
let right =
|
|
512
|
-
fromSortedArrayRevAux arr (off - nl - 1) (len - nl - 1) in
|
|
513
|
-
create left midK midV right
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
let rec fromSortedArrayAux arr off len =
|
|
517
|
-
match len with
|
|
518
|
-
| 0 -> None
|
|
519
|
-
| 1 -> let k, v = (A.getUnsafe arr off) in singleton k v
|
|
520
|
-
| 2 ->
|
|
521
|
-
let (x0,y0),(x1,y1) = A.(getUnsafe arr off, getUnsafe arr (off + 1) )
|
|
522
|
-
in
|
|
523
|
-
Some {left = (singleton x0 y0); key = x1 ; value = y1; height = 2; right = None}
|
|
524
|
-
| 3 ->
|
|
525
|
-
let (x0,y0),(x1,y1),(x2,y2) =
|
|
526
|
-
A.(getUnsafe arr off,
|
|
527
|
-
getUnsafe arr (off + 1),
|
|
528
|
-
getUnsafe arr (off + 2)) in
|
|
529
|
-
Some { left = (singleton x0 y0);
|
|
530
|
-
right = (singleton x2 y2);
|
|
531
|
-
key = x1; value = y1;
|
|
532
|
-
height = 2}
|
|
533
|
-
| _ ->
|
|
534
|
-
let nl = len / 2 in
|
|
535
|
-
let left = fromSortedArrayAux arr off nl in
|
|
536
|
-
let midK, midV = A.getUnsafe arr (off + nl) in
|
|
537
|
-
let right =
|
|
538
|
-
fromSortedArrayAux arr (off + nl + 1) (len - nl - 1) in
|
|
539
|
-
create left midK midV right
|
|
540
|
-
|
|
541
|
-
let fromSortedArrayUnsafe arr =
|
|
542
|
-
fromSortedArrayAux arr 0 (A.length arr)
|
|
543
|
-
|
|
544
|
-
let rec compareAux e1 e2 ~kcmp ~vcmp =
|
|
545
|
-
match e1,e2 with
|
|
546
|
-
| h1::t1, h2::t2 ->
|
|
547
|
-
let c = (Belt_Id.getCmpInternal kcmp) h1.key h2.key [@bs] in
|
|
548
|
-
if c = 0 then
|
|
549
|
-
let cx = vcmp h1.value h2.value [@bs] in
|
|
550
|
-
if cx = 0 then
|
|
551
|
-
compareAux ~kcmp ~vcmp
|
|
552
|
-
(stackAllLeft h1.right t1 )
|
|
553
|
-
(stackAllLeft h2.right t2)
|
|
554
|
-
else cx
|
|
555
|
-
else c
|
|
556
|
-
| _, _ -> 0
|
|
557
|
-
|
|
558
|
-
let rec eqAux e1 e2 ~kcmp ~veq =
|
|
559
|
-
match e1,e2 with
|
|
560
|
-
| h1::t1, h2::t2 ->
|
|
561
|
-
if (Belt_Id.getCmpInternal kcmp) h1.key h2.key [@bs] = 0 &&
|
|
562
|
-
veq h1.value h2.value [@bs] then
|
|
563
|
-
eqAux ~kcmp ~veq (
|
|
564
|
-
stackAllLeft h1.right t1 ) (stackAllLeft h2.right t2)
|
|
565
|
-
else false
|
|
566
|
-
| _, _ -> true
|
|
567
|
-
|
|
568
|
-
let cmpU s1 s2 ~kcmp ~vcmp =
|
|
569
|
-
let len1,len2 = size s1, size s2 in
|
|
570
|
-
if len1 = len2 then
|
|
571
|
-
compareAux (stackAllLeft s1 []) (stackAllLeft s2 []) ~kcmp ~vcmp
|
|
572
|
-
else if len1 < len2 then -1 else 1
|
|
573
|
-
|
|
574
|
-
let cmp s1 s2 ~kcmp ~vcmp =
|
|
575
|
-
cmpU s1 s2 ~kcmp ~vcmp:(fun[@bs] a b -> vcmp a b)
|
|
576
|
-
|
|
577
|
-
let eqU s1 s2 ~kcmp ~veq =
|
|
578
|
-
let len1, len2 = size s1, size s2 in
|
|
579
|
-
if len1 = len2 then
|
|
580
|
-
eqAux (stackAllLeft s1 []) (stackAllLeft s2 []) ~kcmp ~veq
|
|
581
|
-
else false
|
|
582
|
-
|
|
583
|
-
let eq s1 s2 ~kcmp ~veq =
|
|
584
|
-
eqU s1 s2 ~kcmp ~veq:(fun [@bs] a b -> veq a b)
|
|
585
|
-
|
|
586
|
-
let rec get n x ~cmp =
|
|
587
|
-
match n with
|
|
588
|
-
None -> None
|
|
589
|
-
| Some n (* Node(l, v, d, r, _) *) ->
|
|
590
|
-
let v = n.key in
|
|
591
|
-
let c = (Belt_Id.getCmpInternal cmp) x v [@bs] in
|
|
592
|
-
if c = 0 then Some n.value
|
|
593
|
-
else get ~cmp (if c < 0 then n.left else n.right) x
|
|
594
|
-
|
|
595
|
-
let rec getUndefined n x ~cmp =
|
|
596
|
-
match n with
|
|
597
|
-
| None -> Js.undefined
|
|
598
|
-
| Some n ->
|
|
599
|
-
let v = n.key in
|
|
600
|
-
let c = (Belt_Id.getCmpInternal cmp) x v [@bs] in
|
|
601
|
-
if c = 0 then Js.Undefined.return (n.value )
|
|
602
|
-
else getUndefined ~cmp (if c < 0 then n.left else n.right) x
|
|
603
|
-
|
|
604
|
-
let rec getExn n x ~cmp =
|
|
605
|
-
match n with
|
|
606
|
-
None ->
|
|
607
|
-
raise Not_found
|
|
608
|
-
| Some n (* Node(l, v, d, r, _)*) ->
|
|
609
|
-
let v = n.key in
|
|
610
|
-
let c = (Belt_Id.getCmpInternal cmp) x v [@bs] in
|
|
611
|
-
if c = 0 then n.value
|
|
612
|
-
else getExn ~cmp (if c < 0 then n.left else n.right) x
|
|
613
|
-
|
|
614
|
-
let rec getWithDefault n x def ~cmp =
|
|
615
|
-
match n with
|
|
616
|
-
None ->
|
|
617
|
-
def
|
|
618
|
-
| Some n (* Node(l, v, d, r, _)*) ->
|
|
619
|
-
let v = n.key in
|
|
620
|
-
let c = (Belt_Id.getCmpInternal cmp) x v [@bs] in
|
|
621
|
-
if c = 0 then n.value
|
|
622
|
-
else getWithDefault ~cmp (if c < 0 then n.left else n.right) x def
|
|
623
|
-
|
|
624
|
-
let rec has n x ~cmp =
|
|
625
|
-
match n with
|
|
626
|
-
None ->
|
|
627
|
-
false
|
|
628
|
-
| Some n (* Node(l, v, d, r, _) *) ->
|
|
629
|
-
let v = n.key in
|
|
630
|
-
let c = (Belt_Id.getCmpInternal cmp) x v [@bs] in
|
|
631
|
-
c = 0 || has ~cmp (if c < 0 then n.left else n.right) x
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
(******************************************************************)
|
|
635
|
-
|
|
636
|
-
(*
|
|
637
|
-
L rotation, Some root node
|
|
638
|
-
*)
|
|
639
|
-
let rotateWithLeftChild k2 =
|
|
640
|
-
match k2.left with None -> assert false
|
|
641
|
-
| Some k1 ->
|
|
642
|
-
(k2.left <- k1.right);
|
|
643
|
-
(k1.right <- (Some k2 ));
|
|
644
|
-
let hlk2, hrk2 = (treeHeight k2.left, (treeHeight k2.right)) in
|
|
645
|
-
(k2.height <-
|
|
646
|
-
(Pervasives.max hlk2 hrk2 + 1));
|
|
647
|
-
let hlk1, hk2 = (treeHeight k1.left, k2.height) in
|
|
648
|
-
(k1.height <- (Pervasives.max hlk1 hk2 + 1));
|
|
649
|
-
k1
|
|
650
|
-
(* right rotation *)
|
|
651
|
-
let rotateWithRightChild k1 =
|
|
652
|
-
match k1.right with None -> assert false
|
|
653
|
-
| Some k2 ->
|
|
654
|
-
(k1.right <- k2.left);
|
|
655
|
-
(k2.left <- (Some k1));
|
|
656
|
-
let hlk1, hrk1 = ((treeHeight k1.left), (treeHeight k1.right)) in
|
|
657
|
-
(k1.height <- (Pervasives.max hlk1 hrk1 + 1));
|
|
658
|
-
let hrk2, hk1 = (treeHeight k2.right, k1.height) in
|
|
659
|
-
(k2.height <- (Pervasives.max hrk2 hk1 + 1));
|
|
660
|
-
k2
|
|
661
|
-
|
|
662
|
-
(*
|
|
663
|
-
double l rotation
|
|
664
|
-
*)
|
|
665
|
-
let doubleWithLeftChild k3 =
|
|
666
|
-
let k3l = match k3.left with None -> assert false | Some x -> x in
|
|
667
|
-
let v = rotateWithRightChild k3l in
|
|
668
|
-
(k3.left <- (Some v ));
|
|
669
|
-
rotateWithLeftChild k3
|
|
670
|
-
|
|
671
|
-
let doubleWithRightChild k2 =
|
|
672
|
-
let k2r = match k2.right with None -> assert false | Some x -> x in
|
|
673
|
-
let v = rotateWithLeftChild k2r in
|
|
674
|
-
(k2.right <- (Some v));
|
|
675
|
-
rotateWithRightChild k2
|
|
676
|
-
|
|
677
|
-
let heightUpdateMutate t =
|
|
678
|
-
let hlt, hrt = (treeHeight t.left,(treeHeight t.right)) in
|
|
679
|
-
t.height <- (Pervasives.max hlt hrt + 1);
|
|
680
|
-
t
|
|
681
|
-
|
|
682
|
-
let balMutate nt =
|
|
683
|
-
let l, r = (nt.left, nt.right) in
|
|
684
|
-
let hl, hr = (treeHeight l, treeHeight r) in
|
|
685
|
-
if hl > 2 + hr then
|
|
686
|
-
match l with None -> assert false
|
|
687
|
-
| Some {left = ll; right = lr} ->
|
|
688
|
-
(if heightGe ll lr then
|
|
689
|
-
heightUpdateMutate (rotateWithLeftChild nt)
|
|
690
|
-
else
|
|
691
|
-
heightUpdateMutate (doubleWithLeftChild nt)
|
|
692
|
-
)
|
|
693
|
-
else
|
|
694
|
-
if hr > 2 + hl then
|
|
695
|
-
match r with None -> assert false
|
|
696
|
-
| Some {left = rl; right = rr} ->
|
|
697
|
-
(if heightGe rr rl then
|
|
698
|
-
heightUpdateMutate (rotateWithRightChild nt)
|
|
699
|
-
else
|
|
700
|
-
heightUpdateMutate (doubleWithRightChild nt)
|
|
701
|
-
)
|
|
702
|
-
else
|
|
703
|
-
begin
|
|
704
|
-
nt.height <- (Pervasives.max hl hr + 1);
|
|
705
|
-
nt
|
|
706
|
-
end
|
|
707
|
-
|
|
708
|
-
let rec updateMutate (t : _ t) x data ~cmp =
|
|
709
|
-
match t with
|
|
710
|
-
| None -> singleton x data
|
|
711
|
-
| Some nt ->
|
|
712
|
-
let k = nt.key in
|
|
713
|
-
let c = (Belt_Id.getCmpInternal cmp) x k [@bs] in
|
|
714
|
-
if c = 0 then begin
|
|
715
|
-
nt.value <- data;
|
|
716
|
-
Some nt
|
|
717
|
-
end
|
|
718
|
-
else
|
|
719
|
-
let l, r = (nt.left, nt.right) in
|
|
720
|
-
(if c < 0 then
|
|
721
|
-
let ll = updateMutate ~cmp l x data in
|
|
722
|
-
nt.left <- ll
|
|
723
|
-
else
|
|
724
|
-
nt.right <- (updateMutate ~cmp r x data);
|
|
725
|
-
);
|
|
726
|
-
Some (balMutate nt)
|
|
727
|
-
|
|
728
|
-
let fromArray (xs : _ array) ~cmp =
|
|
729
|
-
let len = A.length xs in
|
|
730
|
-
if len = 0 then None
|
|
731
|
-
else
|
|
732
|
-
let next =
|
|
733
|
-
ref (S.strictlySortedLengthU xs
|
|
734
|
-
(fun[@bs] (x0,_) (y0,_) ->
|
|
735
|
-
(Belt_Id.getCmpInternal cmp) x0 y0 [@bs] < 0
|
|
736
|
-
))
|
|
737
|
-
in
|
|
738
|
-
let result = ref (
|
|
739
|
-
if next.contents >= 0 then
|
|
740
|
-
fromSortedArrayAux xs 0 next.contents
|
|
741
|
-
else begin
|
|
742
|
-
next .contents<- - next.contents;
|
|
743
|
-
fromSortedArrayRevAux xs (next.contents - 1) (next.contents)
|
|
744
|
-
end
|
|
745
|
-
) in
|
|
746
|
-
for i = next.contents to len - 1 do
|
|
747
|
-
let k, v = (A.getUnsafe xs i) in
|
|
748
|
-
result .contents<- updateMutate ~cmp result.contents k v
|
|
749
|
-
done ;
|
|
750
|
-
result.contents
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
let rec removeMinAuxWithRootMutate nt n =
|
|
754
|
-
let rn, ln = n.right, n.left in
|
|
755
|
-
match ln with
|
|
756
|
-
| None ->
|
|
757
|
-
nt.key <- n.key;
|
|
758
|
-
nt.value <- n.value;
|
|
759
|
-
rn
|
|
760
|
-
| Some ln ->
|
|
761
|
-
n.left <- (removeMinAuxWithRootMutate nt ln);
|
|
762
|
-
Some (balMutate n)
|