@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
package/lib/ocaml/hashtbl.ml
DELETED
|
@@ -1,541 +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. *)
|
|
9
|
-
(* *)
|
|
10
|
-
(* All rights reserved. This file is distributed under the terms of *)
|
|
11
|
-
(* the GNU Lesser General Public License version 2.1, with the *)
|
|
12
|
-
(* special exception on linking described in the file LICENSE. *)
|
|
13
|
-
(* *)
|
|
14
|
-
(**************************************************************************)
|
|
15
|
-
|
|
16
|
-
(* Hash tables *)
|
|
17
|
-
|
|
18
|
-
external seeded_hash_param :
|
|
19
|
-
int -> int -> int -> 'a -> int = "?hash" [@@noalloc]
|
|
20
|
-
(* external old_hash_param :
|
|
21
|
-
int -> int -> 'a -> int = "caml_hash_univ_param" [@@noalloc] *)
|
|
22
|
-
|
|
23
|
-
let hash x = seeded_hash_param 10 100 0 x
|
|
24
|
-
let hash_param n1 n2 x = seeded_hash_param n1 n2 0 x
|
|
25
|
-
let seeded_hash seed x = seeded_hash_param 10 100 seed x
|
|
26
|
-
|
|
27
|
-
(* We do dynamic hashing, and resize the table and rehash the elements
|
|
28
|
-
when buckets become too long. *)
|
|
29
|
-
|
|
30
|
-
type ('a, 'b) t =
|
|
31
|
-
{ mutable size: int; (* number of entries *)
|
|
32
|
-
mutable data: ('a, 'b) bucketlist array; (* the buckets *)
|
|
33
|
-
mutable seed: int; (* for randomization *)
|
|
34
|
-
mutable initial_size: int; (* initial array size *)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
and ('a, 'b) bucketlist =
|
|
38
|
-
Empty
|
|
39
|
-
| Cons of { mutable key: 'a;
|
|
40
|
-
mutable data: 'b;
|
|
41
|
-
mutable next: ('a, 'b) bucketlist }
|
|
42
|
-
|
|
43
|
-
(* The sign of initial_size encodes the fact that a traversal is
|
|
44
|
-
ongoing or not.
|
|
45
|
-
|
|
46
|
-
This disables the efficient in place implementation of resizing.
|
|
47
|
-
*)
|
|
48
|
-
|
|
49
|
-
let ongoing_traversal h =
|
|
50
|
-
h.initial_size < 0
|
|
51
|
-
|
|
52
|
-
let flip_ongoing_traversal h =
|
|
53
|
-
h.initial_size <- - h.initial_size
|
|
54
|
-
|
|
55
|
-
(* To pick random seeds if requested *)
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
let randomized_default = false
|
|
60
|
-
|
|
61
|
-
let randomized = ref randomized_default
|
|
62
|
-
|
|
63
|
-
let randomize () = randomized := true
|
|
64
|
-
let is_randomized () = !randomized
|
|
65
|
-
|
|
66
|
-
let prng = lazy (Random.State.make_self_init())
|
|
67
|
-
|
|
68
|
-
(* Creating a fresh, empty table *)
|
|
69
|
-
|
|
70
|
-
let rec power_2_above x n =
|
|
71
|
-
if x >= n then x
|
|
72
|
-
else if x * 2 < x then x (* overflow *)
|
|
73
|
-
else power_2_above (x * 2) n
|
|
74
|
-
|
|
75
|
-
let create ?(random = !randomized) initial_size =
|
|
76
|
-
let s = power_2_above 16 initial_size in
|
|
77
|
-
let seed = if random then Random.State.bits (Lazy.force prng) else 0 in
|
|
78
|
-
{ initial_size = s; size = 0; seed = seed; data = Array.make s Empty }
|
|
79
|
-
|
|
80
|
-
let clear h =
|
|
81
|
-
h.size <- 0;
|
|
82
|
-
let len = Array.length h.data in
|
|
83
|
-
for i = 0 to len - 1 do
|
|
84
|
-
h.data.(i) <- Empty
|
|
85
|
-
done
|
|
86
|
-
|
|
87
|
-
let reset h =
|
|
88
|
-
let len = Array.length h.data in
|
|
89
|
-
if len = abs h.initial_size then
|
|
90
|
-
clear h
|
|
91
|
-
else begin
|
|
92
|
-
h.size <- 0;
|
|
93
|
-
h.data <- Array.make (abs h.initial_size) Empty
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
let copy_bucketlist = function
|
|
97
|
-
| Empty -> Empty
|
|
98
|
-
| Cons {key; data; next} ->
|
|
99
|
-
let rec loop prec = function
|
|
100
|
-
| Empty -> ()
|
|
101
|
-
| Cons {key; data; next} ->
|
|
102
|
-
let r = Cons {key; data; next} in
|
|
103
|
-
begin match prec with
|
|
104
|
-
| Empty -> assert false
|
|
105
|
-
| Cons prec -> prec.next <- r
|
|
106
|
-
end;
|
|
107
|
-
loop r next
|
|
108
|
-
in
|
|
109
|
-
let r = Cons {key; data; next} in
|
|
110
|
-
loop r next;
|
|
111
|
-
r
|
|
112
|
-
|
|
113
|
-
let copy h = { h with data = Array.map copy_bucketlist h.data }
|
|
114
|
-
|
|
115
|
-
let length h = h.size
|
|
116
|
-
|
|
117
|
-
let resize indexfun h =
|
|
118
|
-
let odata = h.data in
|
|
119
|
-
let osize = Array.length odata in
|
|
120
|
-
let nsize = osize * 2 in
|
|
121
|
-
if
|
|
122
|
-
nsize >= osize
|
|
123
|
-
then begin
|
|
124
|
-
let ndata = Array.make nsize Empty in
|
|
125
|
-
let ndata_tail = Array.make nsize Empty in
|
|
126
|
-
let inplace = not (ongoing_traversal h) in
|
|
127
|
-
h.data <- ndata; (* so that indexfun sees the new bucket count *)
|
|
128
|
-
let rec insert_bucket = function
|
|
129
|
-
| Empty -> ()
|
|
130
|
-
| Cons {key; data; next} as cell ->
|
|
131
|
-
let cell =
|
|
132
|
-
if inplace then cell
|
|
133
|
-
else Cons {key; data; next = Empty}
|
|
134
|
-
in
|
|
135
|
-
let nidx = indexfun h key in
|
|
136
|
-
begin match ndata_tail.(nidx) with
|
|
137
|
-
| Empty -> ndata.(nidx) <- cell;
|
|
138
|
-
| Cons tail -> tail.next <- cell;
|
|
139
|
-
end;
|
|
140
|
-
ndata_tail.(nidx) <- cell;
|
|
141
|
-
insert_bucket next
|
|
142
|
-
in
|
|
143
|
-
for i = 0 to osize - 1 do
|
|
144
|
-
insert_bucket odata.(i)
|
|
145
|
-
done;
|
|
146
|
-
if inplace then
|
|
147
|
-
for i = 0 to nsize - 1 do
|
|
148
|
-
match ndata_tail.(i) with
|
|
149
|
-
| Empty -> ()
|
|
150
|
-
| Cons tail -> tail.next <- Empty
|
|
151
|
-
done;
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
let key_index h key =
|
|
155
|
-
(* compatibility with old hash tables *)
|
|
156
|
-
(seeded_hash_param 10 100 h.seed key) land (Array.length h.data - 1)
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
let add h key data =
|
|
160
|
-
let i = key_index h key in
|
|
161
|
-
let bucket = Cons{key; data; next=h.data.(i)} in
|
|
162
|
-
h.data.(i) <- bucket;
|
|
163
|
-
h.size <- h.size + 1;
|
|
164
|
-
if h.size > Array.length h.data lsl 1 then resize key_index h
|
|
165
|
-
|
|
166
|
-
let rec remove_bucket h i key prec = function
|
|
167
|
-
| Empty ->
|
|
168
|
-
()
|
|
169
|
-
| (Cons {key=k; next}) as c ->
|
|
170
|
-
if compare k key = 0
|
|
171
|
-
then begin
|
|
172
|
-
h.size <- h.size - 1;
|
|
173
|
-
match prec with
|
|
174
|
-
| Empty -> h.data.(i) <- next
|
|
175
|
-
| Cons c -> c.next <- next
|
|
176
|
-
end
|
|
177
|
-
else remove_bucket h i key c next
|
|
178
|
-
|
|
179
|
-
let remove h key =
|
|
180
|
-
let i = key_index h key in
|
|
181
|
-
remove_bucket h i key Empty h.data.(i)
|
|
182
|
-
|
|
183
|
-
let rec find_rec key = function
|
|
184
|
-
| Empty ->
|
|
185
|
-
raise Not_found
|
|
186
|
-
| Cons{key=k; data; next} ->
|
|
187
|
-
if compare key k = 0 then data else find_rec key next
|
|
188
|
-
|
|
189
|
-
let find h key =
|
|
190
|
-
match h.data.(key_index h key) with
|
|
191
|
-
| Empty -> raise Not_found
|
|
192
|
-
| Cons{key=k1; data=d1; next=next1} ->
|
|
193
|
-
if compare key k1 = 0 then d1 else
|
|
194
|
-
match next1 with
|
|
195
|
-
| Empty -> raise Not_found
|
|
196
|
-
| Cons{key=k2; data=d2; next=next2} ->
|
|
197
|
-
if compare key k2 = 0 then d2 else
|
|
198
|
-
match next2 with
|
|
199
|
-
| Empty -> raise Not_found
|
|
200
|
-
| Cons{key=k3; data=d3; next=next3} ->
|
|
201
|
-
if compare key k3 = 0 then d3 else find_rec key next3
|
|
202
|
-
|
|
203
|
-
let rec find_rec_opt key = function
|
|
204
|
-
| Empty ->
|
|
205
|
-
None
|
|
206
|
-
| Cons{key=k; data; next} ->
|
|
207
|
-
if compare key k = 0 then Some data else find_rec_opt key next
|
|
208
|
-
|
|
209
|
-
let find_opt h key =
|
|
210
|
-
match h.data.(key_index h key) with
|
|
211
|
-
| Empty -> None
|
|
212
|
-
| Cons{key=k1; data=d1; next=next1} ->
|
|
213
|
-
if compare key k1 = 0 then Some d1 else
|
|
214
|
-
match next1 with
|
|
215
|
-
| Empty -> None
|
|
216
|
-
| Cons{key=k2; data=d2; next=next2} ->
|
|
217
|
-
if compare key k2 = 0 then Some d2 else
|
|
218
|
-
match next2 with
|
|
219
|
-
| Empty -> None
|
|
220
|
-
| Cons{key=k3; data=d3; next=next3} ->
|
|
221
|
-
if compare key k3 = 0 then Some d3 else find_rec_opt key next3
|
|
222
|
-
|
|
223
|
-
let find_all h key =
|
|
224
|
-
let rec find_in_bucket = function
|
|
225
|
-
| Empty ->
|
|
226
|
-
[]
|
|
227
|
-
| Cons{key=k; data; next} ->
|
|
228
|
-
if compare k key = 0
|
|
229
|
-
then data :: find_in_bucket next
|
|
230
|
-
else find_in_bucket next in
|
|
231
|
-
find_in_bucket h.data.(key_index h key)
|
|
232
|
-
|
|
233
|
-
let rec replace_bucket key data = function
|
|
234
|
-
| Empty ->
|
|
235
|
-
true
|
|
236
|
-
| Cons ({key=k; next} as slot) ->
|
|
237
|
-
if compare k key = 0
|
|
238
|
-
then (slot.key <- key; slot.data <- data; false)
|
|
239
|
-
else replace_bucket key data next
|
|
240
|
-
|
|
241
|
-
let replace h key data =
|
|
242
|
-
let i = key_index h key in
|
|
243
|
-
let l = h.data.(i) in
|
|
244
|
-
if replace_bucket key data l then begin
|
|
245
|
-
h.data.(i) <- Cons{key; data; next=l};
|
|
246
|
-
h.size <- h.size + 1;
|
|
247
|
-
if h.size > Array.length h.data lsl 1 then resize key_index h
|
|
248
|
-
end
|
|
249
|
-
|
|
250
|
-
let mem h key =
|
|
251
|
-
let rec mem_in_bucket = function
|
|
252
|
-
| Empty ->
|
|
253
|
-
false
|
|
254
|
-
| Cons{key=k; next} ->
|
|
255
|
-
compare k key = 0 || mem_in_bucket next in
|
|
256
|
-
mem_in_bucket h.data.(key_index h key)
|
|
257
|
-
|
|
258
|
-
let iter f h =
|
|
259
|
-
let rec do_bucket = function
|
|
260
|
-
| Empty ->
|
|
261
|
-
()
|
|
262
|
-
| Cons{key; data; next} ->
|
|
263
|
-
f key data; do_bucket next in
|
|
264
|
-
let old_trav = ongoing_traversal h in
|
|
265
|
-
if not old_trav then flip_ongoing_traversal h;
|
|
266
|
-
try
|
|
267
|
-
let d = h.data in
|
|
268
|
-
for i = 0 to Array.length d - 1 do
|
|
269
|
-
do_bucket d.(i)
|
|
270
|
-
done;
|
|
271
|
-
if not old_trav then flip_ongoing_traversal h;
|
|
272
|
-
with exn when not old_trav ->
|
|
273
|
-
flip_ongoing_traversal h;
|
|
274
|
-
raise exn
|
|
275
|
-
|
|
276
|
-
let rec filter_map_inplace_bucket f h i prec = function
|
|
277
|
-
| Empty ->
|
|
278
|
-
begin match prec with
|
|
279
|
-
| Empty -> h.data.(i) <- Empty
|
|
280
|
-
| Cons c -> c.next <- Empty
|
|
281
|
-
end
|
|
282
|
-
| (Cons ({key; data; next} as c)) as slot ->
|
|
283
|
-
begin match f key data with
|
|
284
|
-
| None ->
|
|
285
|
-
h.size <- h.size - 1;
|
|
286
|
-
filter_map_inplace_bucket f h i prec next
|
|
287
|
-
| Some data ->
|
|
288
|
-
begin match prec with
|
|
289
|
-
| Empty -> h.data.(i) <- slot
|
|
290
|
-
| Cons c -> c.next <- slot
|
|
291
|
-
end;
|
|
292
|
-
c.data <- data;
|
|
293
|
-
filter_map_inplace_bucket f h i slot next
|
|
294
|
-
end
|
|
295
|
-
|
|
296
|
-
let filter_map_inplace f h =
|
|
297
|
-
let d = h.data in
|
|
298
|
-
let old_trav = ongoing_traversal h in
|
|
299
|
-
if not old_trav then flip_ongoing_traversal h;
|
|
300
|
-
try
|
|
301
|
-
for i = 0 to Array.length d - 1 do
|
|
302
|
-
filter_map_inplace_bucket f h i Empty h.data.(i)
|
|
303
|
-
done
|
|
304
|
-
with exn when not old_trav ->
|
|
305
|
-
flip_ongoing_traversal h;
|
|
306
|
-
raise exn
|
|
307
|
-
|
|
308
|
-
let fold f h init =
|
|
309
|
-
let rec do_bucket b accu =
|
|
310
|
-
match b with
|
|
311
|
-
Empty ->
|
|
312
|
-
accu
|
|
313
|
-
| Cons{key; data; next} ->
|
|
314
|
-
do_bucket next (f key data accu) in
|
|
315
|
-
let old_trav = ongoing_traversal h in
|
|
316
|
-
if not old_trav then flip_ongoing_traversal h;
|
|
317
|
-
try
|
|
318
|
-
let d = h.data in
|
|
319
|
-
let accu = ref init in
|
|
320
|
-
for i = 0 to Array.length d - 1 do
|
|
321
|
-
accu := do_bucket d.(i) !accu
|
|
322
|
-
done;
|
|
323
|
-
if not old_trav then flip_ongoing_traversal h;
|
|
324
|
-
!accu
|
|
325
|
-
with exn when not old_trav ->
|
|
326
|
-
flip_ongoing_traversal h;
|
|
327
|
-
raise exn
|
|
328
|
-
|
|
329
|
-
type statistics = {
|
|
330
|
-
num_bindings: int;
|
|
331
|
-
num_buckets: int;
|
|
332
|
-
max_bucket_length: int;
|
|
333
|
-
bucket_histogram: int array
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
let rec bucket_length accu = function
|
|
337
|
-
| Empty -> accu
|
|
338
|
-
| Cons{next} -> bucket_length (accu + 1) next
|
|
339
|
-
|
|
340
|
-
let stats h =
|
|
341
|
-
let mbl =
|
|
342
|
-
Array.fold_left (fun m b -> max m (bucket_length 0 b)) 0 h.data in
|
|
343
|
-
let histo = Array.make (mbl + 1) 0 in
|
|
344
|
-
Array.iter
|
|
345
|
-
(fun b ->
|
|
346
|
-
let l = bucket_length 0 b in
|
|
347
|
-
histo.(l) <- histo.(l) + 1)
|
|
348
|
-
h.data;
|
|
349
|
-
{ num_bindings = h.size;
|
|
350
|
-
num_buckets = Array.length h.data;
|
|
351
|
-
max_bucket_length = mbl;
|
|
352
|
-
bucket_histogram = histo }
|
|
353
|
-
|
|
354
|
-
(* Functorial interface *)
|
|
355
|
-
|
|
356
|
-
module type HashedType =
|
|
357
|
-
sig
|
|
358
|
-
type t
|
|
359
|
-
val equal: t -> t -> bool
|
|
360
|
-
val hash: t -> int
|
|
361
|
-
end
|
|
362
|
-
|
|
363
|
-
module type SeededHashedType =
|
|
364
|
-
sig
|
|
365
|
-
type t
|
|
366
|
-
val equal: t -> t -> bool
|
|
367
|
-
val hash: int -> t -> int
|
|
368
|
-
end
|
|
369
|
-
|
|
370
|
-
module type S =
|
|
371
|
-
sig
|
|
372
|
-
type key
|
|
373
|
-
type 'a t
|
|
374
|
-
val create: int -> 'a t
|
|
375
|
-
val clear : 'a t -> unit
|
|
376
|
-
val reset : 'a t -> unit
|
|
377
|
-
val copy: 'a t -> 'a t
|
|
378
|
-
val add: 'a t -> key -> 'a -> unit
|
|
379
|
-
val remove: 'a t -> key -> unit
|
|
380
|
-
val find: 'a t -> key -> 'a
|
|
381
|
-
val find_opt: 'a t -> key -> 'a option
|
|
382
|
-
val find_all: 'a t -> key -> 'a list
|
|
383
|
-
val replace : 'a t -> key -> 'a -> unit
|
|
384
|
-
val mem : 'a t -> key -> bool
|
|
385
|
-
val iter: (key -> 'a -> unit) -> 'a t -> unit
|
|
386
|
-
val filter_map_inplace: (key -> 'a -> 'a option) -> 'a t -> unit
|
|
387
|
-
val fold: (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
|
|
388
|
-
val length: 'a t -> int
|
|
389
|
-
val stats: 'a t -> statistics
|
|
390
|
-
end
|
|
391
|
-
|
|
392
|
-
module type SeededS =
|
|
393
|
-
sig
|
|
394
|
-
type key
|
|
395
|
-
type 'a t
|
|
396
|
-
val create : ?random:bool -> int -> 'a t
|
|
397
|
-
val clear : 'a t -> unit
|
|
398
|
-
val reset : 'a t -> unit
|
|
399
|
-
val copy : 'a t -> 'a t
|
|
400
|
-
val add : 'a t -> key -> 'a -> unit
|
|
401
|
-
val remove : 'a t -> key -> unit
|
|
402
|
-
val find : 'a t -> key -> 'a
|
|
403
|
-
val find_opt: 'a t -> key -> 'a option
|
|
404
|
-
val find_all : 'a t -> key -> 'a list
|
|
405
|
-
val replace : 'a t -> key -> 'a -> unit
|
|
406
|
-
val mem : 'a t -> key -> bool
|
|
407
|
-
val iter : (key -> 'a -> unit) -> 'a t -> unit
|
|
408
|
-
val filter_map_inplace: (key -> 'a -> 'a option) -> 'a t -> unit
|
|
409
|
-
val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
|
|
410
|
-
val length : 'a t -> int
|
|
411
|
-
val stats: 'a t -> statistics
|
|
412
|
-
end
|
|
413
|
-
|
|
414
|
-
module MakeSeeded(H: SeededHashedType): (SeededS with type key = H.t) =
|
|
415
|
-
struct
|
|
416
|
-
type key = H.t
|
|
417
|
-
type 'a hashtbl = (key, 'a) t
|
|
418
|
-
type 'a t = 'a hashtbl
|
|
419
|
-
let create = create
|
|
420
|
-
let clear = clear
|
|
421
|
-
let reset = reset
|
|
422
|
-
let copy = copy
|
|
423
|
-
|
|
424
|
-
let key_index h key =
|
|
425
|
-
(H.hash h.seed key) land (Array.length h.data - 1)
|
|
426
|
-
|
|
427
|
-
let add h key data =
|
|
428
|
-
let i = key_index h key in
|
|
429
|
-
let bucket = Cons{key; data; next=h.data.(i)} in
|
|
430
|
-
h.data.(i) <- bucket;
|
|
431
|
-
h.size <- h.size + 1;
|
|
432
|
-
if h.size > Array.length h.data lsl 1 then resize key_index h
|
|
433
|
-
|
|
434
|
-
let rec remove_bucket h i key prec = function
|
|
435
|
-
| Empty ->
|
|
436
|
-
()
|
|
437
|
-
| (Cons {key=k; next}) as c ->
|
|
438
|
-
if H.equal k key
|
|
439
|
-
then begin
|
|
440
|
-
h.size <- h.size - 1;
|
|
441
|
-
match prec with
|
|
442
|
-
| Empty -> h.data.(i) <- next
|
|
443
|
-
| Cons c -> c.next <- next
|
|
444
|
-
end
|
|
445
|
-
else remove_bucket h i key c next
|
|
446
|
-
|
|
447
|
-
let remove h key =
|
|
448
|
-
let i = key_index h key in
|
|
449
|
-
remove_bucket h i key Empty h.data.(i)
|
|
450
|
-
|
|
451
|
-
let rec find_rec key = function
|
|
452
|
-
| Empty ->
|
|
453
|
-
raise Not_found
|
|
454
|
-
| Cons{key=k; data; next} ->
|
|
455
|
-
if H.equal key k then data else find_rec key next
|
|
456
|
-
|
|
457
|
-
let find h key =
|
|
458
|
-
match h.data.(key_index h key) with
|
|
459
|
-
| Empty -> raise Not_found
|
|
460
|
-
| Cons{key=k1; data=d1; next=next1} ->
|
|
461
|
-
if H.equal key k1 then d1 else
|
|
462
|
-
match next1 with
|
|
463
|
-
| Empty -> raise Not_found
|
|
464
|
-
| Cons{key=k2; data=d2; next=next2} ->
|
|
465
|
-
if H.equal key k2 then d2 else
|
|
466
|
-
match next2 with
|
|
467
|
-
| Empty -> raise Not_found
|
|
468
|
-
| Cons{key=k3; data=d3; next=next3} ->
|
|
469
|
-
if H.equal key k3 then d3 else find_rec key next3
|
|
470
|
-
|
|
471
|
-
let rec find_rec_opt key = function
|
|
472
|
-
| Empty ->
|
|
473
|
-
None
|
|
474
|
-
| Cons{key=k; data; next} ->
|
|
475
|
-
if H.equal key k then Some data else find_rec_opt key next
|
|
476
|
-
|
|
477
|
-
let find_opt h key =
|
|
478
|
-
match h.data.(key_index h key) with
|
|
479
|
-
| Empty -> None
|
|
480
|
-
| Cons{key=k1; data=d1; next=next1} ->
|
|
481
|
-
if H.equal key k1 then Some d1 else
|
|
482
|
-
match next1 with
|
|
483
|
-
| Empty -> None
|
|
484
|
-
| Cons{key=k2; data=d2; next=next2} ->
|
|
485
|
-
if H.equal key k2 then Some d2 else
|
|
486
|
-
match next2 with
|
|
487
|
-
| Empty -> None
|
|
488
|
-
| Cons{key=k3; data=d3; next=next3} ->
|
|
489
|
-
if H.equal key k3 then Some d3 else find_rec_opt key next3
|
|
490
|
-
|
|
491
|
-
let find_all h key =
|
|
492
|
-
let rec find_in_bucket = function
|
|
493
|
-
| Empty ->
|
|
494
|
-
[]
|
|
495
|
-
| Cons{key=k; data=d; next} ->
|
|
496
|
-
if H.equal k key
|
|
497
|
-
then d :: find_in_bucket next
|
|
498
|
-
else find_in_bucket next in
|
|
499
|
-
find_in_bucket h.data.(key_index h key)
|
|
500
|
-
|
|
501
|
-
let rec replace_bucket key data = function
|
|
502
|
-
| Empty ->
|
|
503
|
-
true
|
|
504
|
-
| Cons ({key=k; next} as slot) ->
|
|
505
|
-
if H.equal k key
|
|
506
|
-
then (slot.key <- key; slot.data <- data; false)
|
|
507
|
-
else replace_bucket key data next
|
|
508
|
-
|
|
509
|
-
let replace h key data =
|
|
510
|
-
let i = key_index h key in
|
|
511
|
-
let l = h.data.(i) in
|
|
512
|
-
if replace_bucket key data l then begin
|
|
513
|
-
h.data.(i) <- Cons{key; data; next=l};
|
|
514
|
-
h.size <- h.size + 1;
|
|
515
|
-
if h.size > Array.length h.data lsl 1 then resize key_index h
|
|
516
|
-
end
|
|
517
|
-
|
|
518
|
-
let mem h key =
|
|
519
|
-
let rec mem_in_bucket = function
|
|
520
|
-
| Empty ->
|
|
521
|
-
false
|
|
522
|
-
| Cons{key=k; next} ->
|
|
523
|
-
H.equal k key || mem_in_bucket next in
|
|
524
|
-
mem_in_bucket h.data.(key_index h key)
|
|
525
|
-
|
|
526
|
-
let iter = iter
|
|
527
|
-
let filter_map_inplace = filter_map_inplace
|
|
528
|
-
let fold = fold
|
|
529
|
-
let length = length
|
|
530
|
-
let stats = stats
|
|
531
|
-
end
|
|
532
|
-
|
|
533
|
-
module Make(H: HashedType): (S with type key = H.t) =
|
|
534
|
-
struct
|
|
535
|
-
include MakeSeeded(struct
|
|
536
|
-
type t = H.t
|
|
537
|
-
let equal = H.equal
|
|
538
|
-
let hash (_seed: int) x = H.hash x
|
|
539
|
-
end)
|
|
540
|
-
let create sz = create ~random:false sz
|
|
541
|
-
end
|