From db2306d7de8b02f03bc6cf54083918b3b9d9679d Mon Sep 17 00:00:00 2001 From: Hongbo Zhang Date: Fri, 26 Jan 2018 10:33:12 +0800 Subject: [PATCH 01/17] clean up hash interface --- jscomp/others/bs_HashMap.ml | 52 ++---- jscomp/others/bs_HashMap.mli | 130 +++---------- jscomp/others/bs_HashMapInt.ml | 35 ++-- jscomp/others/bs_HashMapInt.mli | 19 +- jscomp/others/bs_HashMapString.ml | 35 ++-- jscomp/others/bs_HashMapString.mli | 19 +- jscomp/others/bs_HashSet.ml | 46 ++--- jscomp/others/bs_HashSet.mli | 70 +------ jscomp/others/bs_HashSetInt.ml | 23 +-- jscomp/others/bs_HashSetInt.mli | 17 +- jscomp/others/bs_HashSetString.ml | 23 +-- jscomp/others/bs_HashSetString.mli | 17 +- jscomp/others/hashmap.cppo.ml | 35 ++-- jscomp/others/hashmap.cppo.mli | 19 +- jscomp/others/hashset.cppo.ml | 23 +-- jscomp/others/hashset.cppo.mli | 17 +- jscomp/test/bs_hashmap_test.js | 8 +- jscomp/test/bs_hashmap_test.ml | 12 +- jscomp/test/bs_hashset_int_test.js | 12 +- jscomp/test/bs_hashset_int_test.ml | 12 +- jscomp/test/bs_hashtbl_string_test.js | 78 ++++---- jscomp/test/bs_hashtbl_string_test.ml | 63 ++++--- lib/js/bs_HashMap.js | 254 +++++++++----------------- lib/js/bs_HashMapInt.js | 45 ++--- lib/js/bs_HashMapString.js | 45 ++--- lib/js/bs_HashSet.js | 247 +++++++++---------------- lib/js/bs_HashSetInt.js | 35 ++-- lib/js/bs_HashSetString.js | 35 ++-- 28 files changed, 514 insertions(+), 912 deletions(-) diff --git a/jscomp/others/bs_HashMap.ml b/jscomp/others/bs_HashMap.ml index b63eea37463..96c77a61175 100644 --- a/jscomp/others/bs_HashMap.ml +++ b/jscomp/others/bs_HashMap.ml @@ -174,36 +174,24 @@ let has0 ~hash ~eq h key = memInBucket ~eq key bucket -let create0 = C.create0 -let clear0 = C.clear0 -let size0 = C.size -let forEach0 = N.forEach0 -let reduce0 = N.reduce0 -let logStats0 = N.logStats0 -let filterMapDone0 = N.filterMapInplace0 -let toArray0 = N.toArray0 - - -let create initialize_size ~dict = - B.bag ~data:(create0 initialize_size) ~dict -let clear h = clear0 (B.data h) + + +let make initialize_size ~dict = + B.bag ~data:(C.create0 initialize_size) ~dict +let clear h = C.clear0 (B.data h) let size h = C.size (B.data h) let forEach h f = N.forEach0 (B.data h) f let reduce h init f = N.reduce0 (B.data h) init f -let logStats h = logStats0 (B.data h) +let logStats h = N.logStats0 (B.data h) -let setDone (type a) (type id) (h : (a,_,id) t) (key:a) info = +let set (type a) (type id) (h : (a,_,id) t) (key:a) info = let module M = (val B.dict h) in setDone0 ~hash:M.hash ~eq:M.eq (B.data h) key info -let set h key info = setDone h key info; h - -let removeDone (type a) (type id) (h : (a,_,id) t) (key : a) = +let remove (type a) (type id) (h : (a,_,id) t) (key : a) = let module M = (val B.dict h) in remove0 ~hash:M.hash ~eq:M.eq (B.data h) key -let remove h key = removeDone h key; h - let get (type a) (type id) (h : (a, _, id) t) (key : a) = let module M = (val B.dict h) in get0 ~hash:M.hash ~eq:M.eq (B.data h) key @@ -212,15 +200,14 @@ let has (type a) (type id) (h : (a,_,id) t) (key : a) = let module M = (val B.dict h) in has0 ~hash:M.hash ~eq:M.eq (B.data h) key -let filterMapDone h f = filterMapDone0 (B.data h) f +let keepMapInPlace h f = N.filterMapInplace0 (B.data h) f -let filterMap h f = filterMapDone h f; h -let toArray h = toArray0 (B.data h) +let toArray h = N.toArray0 (B.data h) let ofArray0 arr ~hash ~eq = let len = A.length arr in - let v = create0 len in + let v = C.create0 len in for i = 0 to len - 1 do let key,value = (A.getUnsafe arr i) in setDone0 ~eq ~hash v key value @@ -234,28 +221,21 @@ let mergeArrayDone0 h arr ~hash ~eq = let key,value = (A.getUnsafe arr i) in setDone0 h ~eq ~hash key value done - -let mergeArray0 h arr ~hash ~eq = mergeArrayDone0 h arr ~hash ~eq; h - + let ofArray (type a) (type id) arr ~dict:(dict:(a,id) Bs_Hash.t) = let module M = (val dict) in B.bag ~dict ~data:M.(ofArray0 ~eq ~hash arr) -let mergeArrayDone (type a) (type id) (h : (a,_,id) t) arr = +let mergeMany (type a) (type id) (h : (a,_,id) t) arr = let module M = (val B.dict h) in mergeArrayDone0 ~hash:M.hash ~eq:M.eq (B.data h) arr -let mergeArray h arr = - mergeArrayDone h arr; - h let copy h = B.bag ~dict:(B.dict h) ~data:(N.copy (B.data h)) -let keysToArray0 = N.keys0 let keysToArray h = N.keys0 (B.data h) -let valuesToArray0 = N.values0 + let valuesToArray h = N.values0 (B.data h) let getBucketHistogram h = N.getBucketHistogram (B.data h) -let getData = B.data -let getDict = B.dict -let packDictData = B.bag + +let isEmpty h = C.size (B.data h) = 0 diff --git a/jscomp/others/bs_HashMap.mli b/jscomp/others/bs_HashMap.mli index 12a1c22f05d..e5625ad0e0f 100644 --- a/jscomp/others/bs_HashMap.mli +++ b/jscomp/others/bs_HashMap.mli @@ -25,55 +25,41 @@ -type ('a,'b,'id) t - -(** The type of hash tables from type ['a] to type ['b]. *) +type ('key,'value,'id) t +(** The type of hash tables from type ['key] to type ['value]. *) -val create: int -> dict:('a,'id) Bs_Hash.t -> ('a,'b,'id) t +val make: int -> dict:('key, 'id) Bs_Hash.t -> ('key,'value,'id) t (*TODO: allow randomization for security *) -val clear: ('a, 'b, 'id) t -> unit -(** Empty a hash table. Use [reset] instead of [clear] to shrink the - size of the bucket table to its initial size. *) - +val clear: ('key, 'value, 'id ) t -> unit +(** Empty a hash table. *) +val isEmpty: _ t -> bool -val setDone: ('a, 'b, 'id) t -> 'a -> 'b -> unit -(** [setDone tbl k v] if [k] does not exist, +val set: ('key, 'value, 'id ) t -> 'key -> 'value -> unit +(** [set tbl k v] if [k] does not exist, add the binding [k,v], otherwise, update the old value with the new [v] *) -val set: ('a, 'b, 'id) t -> 'a -> 'b -> ('a, 'b, 'id) t -(** [set tbl k v] -*) -val copy: ('a, 'b, 'id) t -> ('a, 'b, 'id) t +val copy: ('key, 'value, 'id ) t -> ('key, 'value, 'id ) t -val get: - ('a, 'b, 'id) t -> 'a -> 'b option +val get: ('key, 'value, 'id ) t -> 'key -> 'value option -val has: ('a, 'b, 'id) t -> 'a -> bool +val has: ('key, 'value, 'id ) t -> 'key -> bool (** [has tbl x] checks if [x] is bound in [tbl]. *) -val removeDone: - ('a, 'b, 'id) t -> 'a -> - unit -val remove: - ('a, 'b, 'id) t -> 'a -> - ('a, 'b, 'id) t +val remove: ('key, 'value, 'id ) t -> 'key -> unit -val forEach: ('a, 'b, 'id) t -> ('a -> 'b -> unit [@bs]) -> unit +val forEach: ('key, 'value, 'id ) t -> ('key -> 'value -> unit [@bs]) -> unit (** [forEach tbl f] applies [f] to all bindings in table [tbl]. [f] receives the key as first argument, and the associated value as second argument. Each binding is presented exactly once to [f]. - - If the hash table was created in non-randomized mode, the order - in which the bindings are enumerated is reproducible between - successive runs of the program. *) +*) -val reduce: ('a, 'b, 'id) t -> 'c -> ('c -> 'a -> 'b -> 'c [@bs]) -> 'c +val reduce: ('key, 'value, 'id ) t -> 'c -> ('c -> 'key -> 'value -> 'c [@bs]) -> 'c (** [reduce tbl init f] computes [(f kN dN ... (f k1 d1 init)...)], where [k1 ... kN] are the keys of all bindings in [tbl], @@ -84,19 +70,13 @@ val reduce: ('a, 'b, 'id) t -> 'c -> ('c -> 'a -> 'b -> 'c [@bs]) -> 'c However, if the table contains several bindings for the same key, they are passed to [f] in reverse order of introduction, that is, the most recent binding is passed first. - - If the hash table was created in non-randomized mode, the order - in which the bindings are enumerated is reproducible between - successive runs of the program, and even between minor versions - of OCaml. For randomized hash tables, the order of enumeration - is entirely random. *) +*) -val filterMapDone: ('a, 'b, 'id) t -> ('a -> 'b -> 'b option [@bs]) -> unit -val filterMap: ('a, 'b, 'id) t -> ('a -> 'b -> 'b option [@bs]) -> ('a, 'b, 'id) t +val keepMapInPlace: ('key, 'value, 'id ) t -> ('key -> 'value -> 'value option [@bs]) -> unit -val size: ('a, 'b, 'id) t -> int +val size: _ t -> int (** [size tbl] returns the number of bindings in [tbl]. It takes constant time. *) @@ -111,79 +91,23 @@ val logStats: _ t -> unit -val toArray: ('a, 'b, 'id) t -> ('a * 'b) array +val toArray: ('key, 'value, 'id ) t -> ('key * 'value) array -val ofArray: - ('a * 'b) array -> - dict:('a,'id) Bs_Hash.t -> - ('a, 'b, 'id) t -val mergeArrayDone: ('a, 'b, 'id) t -> ('a * 'b) array -> unit -val mergeArray: ('a, 'b, 'id) t -> ('a * 'b) array -> ('a, 'b, 'id) t +val ofArray: ('key * 'value) array -> dict:('key,'id) Bs_Hash.t -> ('key, 'value, 'id ) t + +val mergeMany: ('key, 'value, 'id ) t -> ('key * 'value) array -> unit val keysToArray: - ('a,'b,'id) t -> 'a array + ('key, _, _) t -> 'key array val valuesToArray: - ('a,'b,'id) t -> 'b array + (_,'value,_) t -> 'value array val getBucketHistogram: _ t -> int array -(****************************************************************************) - -type ('a, 'b, 'id) t0 -val getData: ('k,'v,'id) t -> ('k,'v,'id) t0 -val getDict: ('k,'v,'id) t -> ('k,'id) Bs_Hash.t -val packDictData: dict:('k, 'id) Bs_Hash.t -> data:('k, 'v, 'id) t0 -> ('k, 'v, 'id) t -val create0: int -> ('a, 'b, 'id) t0 -val clear0: ('a, 'b, 'id) t0 -> unit -val setDone0 : - hash:('a,'id) Bs_Hash.hash -> - eq:('a,'id) Bs_Hash.eq -> - ('a,'b,'id) t0 -> 'a -> - 'b -> unit -val get0: - hash:('a,'id) Bs_Hash.hash -> - eq:('a,'id) Bs_Hash.eq -> - ('a, 'b, 'id) t0 -> - 'a -> - 'b option - -val has0: - hash:('a,'id) Bs_Hash.hash -> - eq:('a,'id) Bs_Hash.eq -> - ('a, 'b, 'id) t0 -> - 'a -> - bool - -val remove0: - hash:('a,'id) Bs_Hash.hash -> - eq:('a,'id) Bs_Hash.eq -> - ('a, 'b, 'id) t0 -> - 'a -> - unit - -val forEach0: ('a, 'b, 'id) t0 -> ('a -> 'b -> unit [@bs]) -> unit -val reduce0: ('a, 'b, 'id) t0 -> 'c -> ('c -> 'a -> 'b -> 'c [@bs]) -> 'c -val filterMapDone0: ('a, 'b, 'id) t0 -> ('a -> 'b -> 'b option [@bs]) -> unit -val size0: ('a, 'b, 'id) t0 -> int -val logStats0: ('a, 'b, 'id) t0 -> unit -val toArray0: ('a, 'b, 'id) t0 -> ('a * 'b) array -val ofArray0: - ('a * 'b) array -> - hash:('a,'id) Bs_Hash.hash -> - eq:('a,'id) Bs_Hash.eq -> - ('a, 'b, 'id) t0 -val mergeArray0: - ('a, 'b, 'id) t0 -> - ('a * 'b) array -> - hash:('a,'id) Bs_Hash.hash -> - eq:('a,'id) Bs_Hash.eq -> - ('a, 'b, 'id) t0 - -val keysToArray0: - ('a,'b,'id) t0 -> 'a array -val valuesToArray0: - ('a,'b,'id) t0 -> 'b array + + + diff --git a/jscomp/others/bs_HashMapInt.ml b/jscomp/others/bs_HashMapInt.ml index 0f8ff81a38e..77541277a44 100644 --- a/jscomp/others/bs_HashMapInt.ml +++ b/jscomp/others/bs_HashMapInt.ml @@ -78,7 +78,7 @@ let rec replaceInBucket (key : key) info cell = | Some cell -> replaceInBucket key info cell -let setDone h (key : key) value = +let set h (key : key) value = let h_buckets = C.buckets h in let i = hash key land (Array.length h_buckets - 1) in let l = Array.unsafe_get h_buckets i in @@ -89,14 +89,14 @@ let setDone h (key : key) value = if C.size h > Array.length (C.buckets h) lsl 1 then resize h | Some bucket -> begin - if replaceInBucket key value bucket then begin - A.setUnsafe h_buckets i (C.return (N.bucket ~key ~value ~next:l)); - C.sizeSet h (C.size h + 1); - if C.size h > Array.length (C.buckets h) lsl 1 then resize h - end + if replaceInBucket key value bucket then begin + A.setUnsafe h_buckets i (C.return (N.bucket ~key ~value ~next:l)); + C.sizeSet h (C.size h + 1); + if C.size h > Array.length (C.buckets h) lsl 1 then resize h + end end -let set h key value = setDone h key value ; h + let rec removeInBucket h h_buckets i (key : key) prec buckets = match C.toOpt buckets with @@ -111,7 +111,7 @@ let rec removeInBucket h h_buckets i (key : key) prec buckets = end else removeInBucket h h_buckets i key cell cell_next -let removeDone h key = +let remove h key = let h_buckets = C.buckets h in let i = hash key land (Array.length h_buckets - 1) in let bucket = (A.getUnsafe h_buckets i) in @@ -126,7 +126,7 @@ let removeDone h key = else removeInBucket h h_buckets i key cell (N.next cell) -let remove h key = removeDone h key; h + let rec findAux (key : key) buckets = match C.toOpt buckets with @@ -173,37 +173,36 @@ let has h key = memInBucket key bucket -let create = C.create0 +let make = C.create0 let clear = C.clear0 let size = C.size let forEach = N.forEach0 let reduce = N.reduce0 let logStats = N.logStats0 -let filterMapDone = N.filterMapInplace0 -let filterMap h f = filterMapDone h f; h +let keepMapInPlace = N.filterMapInplace0 let toArray = N.toArray0 let ofArray arr = let len = A.length arr in - let v = create len in + let v = make len in for i = 0 to len - 1 do let k,value = (A.getUnsafe arr i) in - setDone v k value + set v k value done ; v (* TOOD: optimize heuristics for resizing *) -let mergeArrayDone h arr = +let mergeMany h arr = let len = A.length arr in for i = 0 to len - 1 do let k,v = (A.getUnsafe arr i) in - setDone h k v + set h k v done -let mergeArray h arr = mergeArrayDone h arr; h - let copy = N.copy let keysToArray = N.keys0 let valuesToArray = N.values0 let getBucketHistogram = N.getBucketHistogram + +let isEmpty h = C.size h = 0 diff --git a/jscomp/others/bs_HashMapInt.mli b/jscomp/others/bs_HashMapInt.mli index b3767c3cdf6..1508abc9630 100644 --- a/jscomp/others/bs_HashMapInt.mli +++ b/jscomp/others/bs_HashMapInt.mli @@ -6,31 +6,33 @@ type key = int type 'b t -val create: int -> 'b t +val make: int -> 'b t val clear: 'b t -> unit -val setDone: 'a t -> key -> 'a -> unit +val isEmpty: _ t -> bool + +val set: 'a t -> key -> 'a -> unit (** [setDone tbl k v] if [k] does not exist, add the binding [k,v], otherwise, update the old value with the new [v] *) -val set: 'a t -> key -> 'a -> 'a t + val copy: 'a t -> 'a t val get: 'a t -> key -> 'a option val has: 'b t -> key -> bool -val removeDone: 'a t -> key -> unit -val remove: 'a t -> key -> 'a t +val remove: 'a t -> key -> unit + val forEach: 'b t -> (key -> 'b -> unit [@bs]) -> unit val reduce: 'b t -> 'c -> ('c -> key -> 'b -> 'c [@bs]) -> 'c -val filterMapDone: 'a t -> (key -> 'a -> 'a option [@bs]) -> unit -val filterMap: 'a t -> (key -> 'a -> 'a option [@bs]) -> 'a t +val keepMapInPlace: 'a t -> (key -> 'a -> 'a option [@bs]) -> unit + val size: _ t -> int val logStats: _ t -> unit @@ -39,8 +41,7 @@ val toArray: 'a t -> (key * 'a) array val keysToArray: 'a t -> key array val valuesToArray: 'a t -> 'a array val ofArray: (key * 'a) array -> 'a t -val mergeArrayDone: 'a t -> (key * 'a) array -> unit -val mergeArray: 'a t -> (key * 'a) array -> 'a t +val mergeMany: 'a t -> (key * 'a) array -> unit val getBucketHistogram: _ t -> int array diff --git a/jscomp/others/bs_HashMapString.ml b/jscomp/others/bs_HashMapString.ml index 364145bad31..03142459768 100644 --- a/jscomp/others/bs_HashMapString.ml +++ b/jscomp/others/bs_HashMapString.ml @@ -78,7 +78,7 @@ let rec replaceInBucket (key : key) info cell = | Some cell -> replaceInBucket key info cell -let setDone h (key : key) value = +let set h (key : key) value = let h_buckets = C.buckets h in let i = hash key land (Array.length h_buckets - 1) in let l = Array.unsafe_get h_buckets i in @@ -89,14 +89,14 @@ let setDone h (key : key) value = if C.size h > Array.length (C.buckets h) lsl 1 then resize h | Some bucket -> begin - if replaceInBucket key value bucket then begin - A.setUnsafe h_buckets i (C.return (N.bucket ~key ~value ~next:l)); - C.sizeSet h (C.size h + 1); - if C.size h > Array.length (C.buckets h) lsl 1 then resize h - end + if replaceInBucket key value bucket then begin + A.setUnsafe h_buckets i (C.return (N.bucket ~key ~value ~next:l)); + C.sizeSet h (C.size h + 1); + if C.size h > Array.length (C.buckets h) lsl 1 then resize h + end end -let set h key value = setDone h key value ; h + let rec removeInBucket h h_buckets i (key : key) prec buckets = match C.toOpt buckets with @@ -111,7 +111,7 @@ let rec removeInBucket h h_buckets i (key : key) prec buckets = end else removeInBucket h h_buckets i key cell cell_next -let removeDone h key = +let remove h key = let h_buckets = C.buckets h in let i = hash key land (Array.length h_buckets - 1) in let bucket = (A.getUnsafe h_buckets i) in @@ -126,7 +126,7 @@ let removeDone h key = else removeInBucket h h_buckets i key cell (N.next cell) -let remove h key = removeDone h key; h + let rec findAux (key : key) buckets = match C.toOpt buckets with @@ -173,37 +173,36 @@ let has h key = memInBucket key bucket -let create = C.create0 +let make = C.create0 let clear = C.clear0 let size = C.size let forEach = N.forEach0 let reduce = N.reduce0 let logStats = N.logStats0 -let filterMapDone = N.filterMapInplace0 -let filterMap h f = filterMapDone h f; h +let keepMapInPlace = N.filterMapInplace0 let toArray = N.toArray0 let ofArray arr = let len = A.length arr in - let v = create len in + let v = make len in for i = 0 to len - 1 do let k,value = (A.getUnsafe arr i) in - setDone v k value + set v k value done ; v (* TOOD: optimize heuristics for resizing *) -let mergeArrayDone h arr = +let mergeMany h arr = let len = A.length arr in for i = 0 to len - 1 do let k,v = (A.getUnsafe arr i) in - setDone h k v + set h k v done -let mergeArray h arr = mergeArrayDone h arr; h - let copy = N.copy let keysToArray = N.keys0 let valuesToArray = N.values0 let getBucketHistogram = N.getBucketHistogram + +let isEmpty h = C.size h = 0 diff --git a/jscomp/others/bs_HashMapString.mli b/jscomp/others/bs_HashMapString.mli index 36ab17168ac..5a35cad92ce 100644 --- a/jscomp/others/bs_HashMapString.mli +++ b/jscomp/others/bs_HashMapString.mli @@ -6,31 +6,33 @@ type key = string type 'b t -val create: int -> 'b t +val make: int -> 'b t val clear: 'b t -> unit -val setDone: 'a t -> key -> 'a -> unit +val isEmpty: _ t -> bool + +val set: 'a t -> key -> 'a -> unit (** [setDone tbl k v] if [k] does not exist, add the binding [k,v], otherwise, update the old value with the new [v] *) -val set: 'a t -> key -> 'a -> 'a t + val copy: 'a t -> 'a t val get: 'a t -> key -> 'a option val has: 'b t -> key -> bool -val removeDone: 'a t -> key -> unit -val remove: 'a t -> key -> 'a t +val remove: 'a t -> key -> unit + val forEach: 'b t -> (key -> 'b -> unit [@bs]) -> unit val reduce: 'b t -> 'c -> ('c -> key -> 'b -> 'c [@bs]) -> 'c -val filterMapDone: 'a t -> (key -> 'a -> 'a option [@bs]) -> unit -val filterMap: 'a t -> (key -> 'a -> 'a option [@bs]) -> 'a t +val keepMapInPlace: 'a t -> (key -> 'a -> 'a option [@bs]) -> unit + val size: _ t -> int val logStats: _ t -> unit @@ -39,8 +41,7 @@ val toArray: 'a t -> (key * 'a) array val keysToArray: 'a t -> key array val valuesToArray: 'a t -> 'a array val ofArray: (key * 'a) array -> 'a t -val mergeArrayDone: 'a t -> (key * 'a) array -> unit -val mergeArray: 'a t -> (key * 'a) array -> 'a t +val mergeMany: 'a t -> (key * 'a) array -> unit val getBucketHistogram: _ t -> int array diff --git a/jscomp/others/bs_HashSet.ml b/jscomp/others/bs_HashSet.ml index 655e0292a8e..1e16b7fd513 100644 --- a/jscomp/others/bs_HashSet.ml +++ b/jscomp/others/bs_HashSet.ml @@ -161,46 +161,33 @@ let has0 h key ~hash ~eq = memInBucket ~eq key bucket -let create0 = C.create0 -let clear0 = C.clear0 - -let size0 = C.size -let forEach0 = N.forEach0 -let reduce0 = N.reduce0 -let logStats0 = N.logStats0 -let toArray0 = N.toArray0 -let toArray h = toArray0 (B.data h) +let toArray h = N.toArray0 (B.data h) (* Wrapper *) -let create dict initialize_size = - B.bag ~data:(create0 initialize_size) +let make dict initialize_size = + B.bag ~data:(C.create0 initialize_size) ~dict -let clear h = clear0 (B.data h) +let clear h = C.clear0 (B.data h) let size h = C.size (B.data h) let forEach h f = N.forEach0 (B.data h) f let reduce h init f = N.reduce0 (B.data h) init f -let logStats h = logStats0 (B.data h) +let logStats h = N.logStats0 (B.data h) -let addDone (type a) (type id) (h : (a,id) t) (key:a) = - let dict,data = B.(dict h, data h) in - let module M = (val dict) in - addDone0 ~hash:M.hash ~eq:M.eq data key +let add (type a) (type id) (h : (a,id) t) (key:a) = + let module M = (val B.dict h) in + addDone0 ~hash:M.hash ~eq:M.eq (B.data h) key -let add h key = addDone h key; h - -let removeDone (type a) (type id) (h : (a,id) t) (key : a) = +let remove (type a) (type id) (h : (a,id) t) (key : a) = let module M = (val B.dict h) in remove0 ~hash:M.hash ~eq:M.eq (B.data h) key -let remove h key = removeDone h key; h - let has (type a) (type id) (h : (a,id) t) (key : a) = let module M = (val B.dict h) in has0 ~hash:M.hash ~eq:M.eq (B.data h) key let ofArray0 ~hash ~eq arr = let len = Bs.Array.length arr in - let v = create0 len in + let v = C.create0 len in for i = 0 to len - 1 do addDone0 ~eq ~hash v (A.getUnsafe arr i) done ; @@ -217,18 +204,17 @@ let ofArray (type a) (type id) arr ~dict:(dict:(a,id) Bs_Hash.t) = let module M = (val dict) in - B.bag ~dict - ~data:M.(ofArray0 ~eq~hash arr) + B.bag ~dict ~data:M.(ofArray0 ~eq~hash arr) -let mergeArrayDone (type a) (type id) - (h : (a,id) t) arr = - let data = B.data h in +let mergeMany (type a) (type id) (h : (a,id) t) arr = let module M = (val B.dict h) in - M.(addArray0 ~hash ~eq data arr) + addArray0 ~hash:M.hash ~eq:M.eq (B.data h) arr + -let mergeArray h arr = mergeArrayDone h arr; h let getData = B.data let getDict = B.dict let packDictData = B.bag let getBucketHistogram h = N.getBucketHistogram (B.data h) + +let isEmpty h = C.size (B.data h) = 0 diff --git a/jscomp/others/bs_HashSet.mli b/jscomp/others/bs_HashSet.mli index 231cececc66..96adb92350a 100644 --- a/jscomp/others/bs_HashSet.mli +++ b/jscomp/others/bs_HashSet.mli @@ -28,84 +28,26 @@ type ('a, 'id) t (** The type of hash tables from type ['a] to type ['b]. *) -val create: ('a,'id) Bs_Hash.t -> int -> ('a, 'id) t +val make: ('a,'id) Bs_Hash.t -> int -> ('a, 'id) t val clear: ('a, 'id) t -> unit - -val addDone: ('a, 'id) t -> 'a -> unit -val add: ('a, 'id) t -> 'a -> ('a, 'id) t +val isEmpty: _ t -> bool +val add: ('a, 'id) t -> 'a -> unit val has: ('a, 'id) t -> 'a -> bool -val removeDone: ('a, 'id) t -> 'a -> unit -val remove: ('a, 'id) t -> 'a -> ('a, 'id) t +val remove: ('a, 'id) t -> 'a -> unit val forEach: ('a, 'id) t -> ('a -> unit [@bs]) -> unit (** Order unspecified. *) - val reduce: ('a, 'id) t -> 'c -> ('c -> 'a -> 'c [@bs]) -> 'c (** Order unspecified. *) val size: ('a, 'id) t -> int - - val logStats: _ t -> unit - val toArray: ('a,'id) t -> 'a array -val ofArray: - 'a array -> - dict:('a,'id) Bs_Hash.t -> - ('a,'id) t +val ofArray: 'a array -> dict:('a,'id) Bs_Hash.t -> ('a,'id) t +val mergeMany: ('a,'id) t -> 'a array -> unit -val mergeArrayDone: ('a,'id) t -> 'a array -> unit -val mergeArray: ('a,'id) t -> 'a array -> ('a, 'id)t val getBucketHistogram: _ t -> int array -(****************************************************************************) -type ('a, 'id) t0 - -val getData: ('k, 'id) t -> ('k, 'id) t0 -val getDict: ('k, 'id) t -> ('k, 'id) Bs_Hash.t -val packDictData: dict:('k, 'id) Bs_Hash.t -> data:('k, 'id) t0 -> ('k, 'id) t - -val clear0: ('a, 'id) t0 -> unit -val create0: int -> ('a, 'id) t0 - -val add0: - ('a,'id) t0 -> - 'a -> - hash:('a,'id) Bs_Hash.hash -> - eq:('a,'id) Bs_Hash.eq -> - ('a,'id) t0 -val addDone0 : - ('a,'id) t0 -> - 'a -> - hash:('a,'id) Bs_Hash.hash -> - eq:('a,'id) Bs_Hash.eq -> - unit - -val has0: - ('a, 'id) t0 -> - 'a -> - hash:('a,'id) Bs_Hash.hash -> - eq:('a,'id) Bs_Hash.eq -> - bool -val remove0: - hash:('a,'id) Bs_Hash.hash -> - eq:('a,'id) Bs_Hash.eq -> - ('a, 'id) t0 -> 'a -> unit -val forEach0: ('a, 'id) t0 -> ('a -> unit [@bs]) -> unit -val reduce0: ('a, 'id) t0 -> 'c -> ('c -> 'a -> 'c [@bs]) -> 'c -val size0: ('a, 'id) t0 -> int -val logStats0: ('a, 'id) t0 -> unit -val toArray0: ('a,'id) t0 -> 'a array -val ofArray0: - hash:('a,'id) Bs_Hash.hash -> - eq:('a,'id) Bs_Hash.eq -> - 'a array -> - ('a, 'id) t0 - -val addArray0: - hash:('a,'id) Bs_Hash.hash -> - eq:('a,'id) Bs_Hash.eq -> - ('a,'id) t0 -> 'a array -> unit diff --git a/jscomp/others/bs_HashSetInt.ml b/jscomp/others/bs_HashSetInt.ml index 64b9728dd4b..8cc0ea126ac 100644 --- a/jscomp/others/bs_HashSetInt.ml +++ b/jscomp/others/bs_HashSetInt.ml @@ -63,7 +63,7 @@ let rec removeBucket h h_buckets i (key : key) prec cell = | Some cell_next -> removeBucket h h_buckets i key cell cell_next -let removeDone h (key : key)= +let remove h (key : key)= let h_buckets = C.buckets h in let i = hash key land (Array.length h_buckets - 1) in let l = (A.getUnsafe h_buckets i) in @@ -82,7 +82,7 @@ let removeDone h (key : key)= | Some next_cell -> removeBucket h h_buckets i key cell next_cell -let remove h key = removeDone h key; h + let rec addBucket h buckets_len (key : key) cell = @@ -95,7 +95,7 @@ let rec addBucket h buckets_len (key : key) cell = if C.size h > buckets_len lsl 1 then resize h | Some n -> addBucket h buckets_len key n -let addDone h (key : key) = +let add h (key : key) = let h_buckets = C.buckets h in let buckets_len = Array.length h_buckets in let i = hash key land (buckets_len - 1) in @@ -109,8 +109,6 @@ let addDone h (key : key) = | Some cell -> addBucket h buckets_len key cell -let add h key = addDone h key; h - let rec memInBucket (key : key) cell = @@ -130,7 +128,7 @@ let has h key = memInBucket key bucket -let create = C.create0 +let make = C.create0 let clear = C.clear0 let size = C.size @@ -141,22 +139,21 @@ let toArray = N.toArray0 let ofArray arr = let len = Bs.Array.length arr in - let v = create len in + let v = make len in for i = 0 to len - 1 do - addDone v (A.getUnsafe arr i) + add v (A.getUnsafe arr i) done ; v (* TOOD: optimize heuristics for resizing *) -let mergeArrayDone h arr = +let mergeMany h arr = let len = Bs.Array.length arr in for i = 0 to len - 1 do - addDone h (A.getUnsafe arr i) + add h (A.getUnsafe arr i) done -let mergeArray h arr = - mergeArrayDone h arr; h - let copy = N.copy let getBucketHistogram = N.getBucketHistogram + +let isEmpty h = C.size h = 0 diff --git a/jscomp/others/bs_HashSetInt.mli b/jscomp/others/bs_HashSetInt.mli index 69373857022..bffde9fedb6 100644 --- a/jscomp/others/bs_HashSetInt.mli +++ b/jscomp/others/bs_HashSetInt.mli @@ -4,18 +4,19 @@ type key = int # 10 type t -val create: int -> t +val make: int -> t + val clear: t -> unit -val addDone: t -> key -> unit -val add: t -> key -> t +val isEmpty: t -> bool + +val add: t -> key -> unit + val copy: t -> t val has: t -> key -> bool -val removeDone: t -> key -> unit - -val remove: t -> key -> t +val remove: t -> key -> unit val forEach: t -> (key -> unit [@bs]) -> unit @@ -29,8 +30,6 @@ val toArray: t -> key array val ofArray: key array -> t -val mergeArrayDone: t -> key array -> unit - -val mergeArray: t -> key array -> t +val mergeMany: t -> key array -> unit val getBucketHistogram: t -> int array diff --git a/jscomp/others/bs_HashSetString.ml b/jscomp/others/bs_HashSetString.ml index 03d0f3def7a..0d47d63e46e 100644 --- a/jscomp/others/bs_HashSetString.ml +++ b/jscomp/others/bs_HashSetString.ml @@ -63,7 +63,7 @@ let rec removeBucket h h_buckets i (key : key) prec cell = | Some cell_next -> removeBucket h h_buckets i key cell cell_next -let removeDone h (key : key)= +let remove h (key : key)= let h_buckets = C.buckets h in let i = hash key land (Array.length h_buckets - 1) in let l = (A.getUnsafe h_buckets i) in @@ -82,7 +82,7 @@ let removeDone h (key : key)= | Some next_cell -> removeBucket h h_buckets i key cell next_cell -let remove h key = removeDone h key; h + let rec addBucket h buckets_len (key : key) cell = @@ -95,7 +95,7 @@ let rec addBucket h buckets_len (key : key) cell = if C.size h > buckets_len lsl 1 then resize h | Some n -> addBucket h buckets_len key n -let addDone h (key : key) = +let add h (key : key) = let h_buckets = C.buckets h in let buckets_len = Array.length h_buckets in let i = hash key land (buckets_len - 1) in @@ -109,8 +109,6 @@ let addDone h (key : key) = | Some cell -> addBucket h buckets_len key cell -let add h key = addDone h key; h - let rec memInBucket (key : key) cell = @@ -130,7 +128,7 @@ let has h key = memInBucket key bucket -let create = C.create0 +let make = C.create0 let clear = C.clear0 let size = C.size @@ -141,22 +139,21 @@ let toArray = N.toArray0 let ofArray arr = let len = Bs.Array.length arr in - let v = create len in + let v = make len in for i = 0 to len - 1 do - addDone v (A.getUnsafe arr i) + add v (A.getUnsafe arr i) done ; v (* TOOD: optimize heuristics for resizing *) -let mergeArrayDone h arr = +let mergeMany h arr = let len = Bs.Array.length arr in for i = 0 to len - 1 do - addDone h (A.getUnsafe arr i) + add h (A.getUnsafe arr i) done -let mergeArray h arr = - mergeArrayDone h arr; h - let copy = N.copy let getBucketHistogram = N.getBucketHistogram + +let isEmpty h = C.size h = 0 diff --git a/jscomp/others/bs_HashSetString.mli b/jscomp/others/bs_HashSetString.mli index c60884c71cf..4cf1622e917 100644 --- a/jscomp/others/bs_HashSetString.mli +++ b/jscomp/others/bs_HashSetString.mli @@ -4,18 +4,19 @@ type key = string # 10 type t -val create: int -> t +val make: int -> t + val clear: t -> unit -val addDone: t -> key -> unit -val add: t -> key -> t +val isEmpty: t -> bool + +val add: t -> key -> unit + val copy: t -> t val has: t -> key -> bool -val removeDone: t -> key -> unit - -val remove: t -> key -> t +val remove: t -> key -> unit val forEach: t -> (key -> unit [@bs]) -> unit @@ -29,8 +30,6 @@ val toArray: t -> key array val ofArray: key array -> t -val mergeArrayDone: t -> key array -> unit - -val mergeArray: t -> key array -> t +val mergeMany: t -> key array -> unit val getBucketHistogram: t -> int array diff --git a/jscomp/others/hashmap.cppo.ml b/jscomp/others/hashmap.cppo.ml index 892a797a16e..ba94f102bf0 100644 --- a/jscomp/others/hashmap.cppo.ml +++ b/jscomp/others/hashmap.cppo.ml @@ -86,7 +86,7 @@ let rec replaceInBucket (key : key) info cell = | Some cell -> replaceInBucket key info cell -let setDone h (key : key) value = +let set h (key : key) value = let h_buckets = C.buckets h in let i = hash key land (Array.length h_buckets - 1) in let l = Array.unsafe_get h_buckets i in @@ -97,14 +97,14 @@ let setDone h (key : key) value = if C.size h > Array.length (C.buckets h) lsl 1 then resize h | Some bucket -> begin - if replaceInBucket key value bucket then begin - A.setUnsafe h_buckets i (C.return (N.bucket ~key ~value ~next:l)); - C.sizeSet h (C.size h + 1); - if C.size h > Array.length (C.buckets h) lsl 1 then resize h - end + if replaceInBucket key value bucket then begin + A.setUnsafe h_buckets i (C.return (N.bucket ~key ~value ~next:l)); + C.sizeSet h (C.size h + 1); + if C.size h > Array.length (C.buckets h) lsl 1 then resize h + end end -let set h key value = setDone h key value ; h + let rec removeInBucket h h_buckets i (key : key) prec buckets = match C.toOpt buckets with @@ -119,7 +119,7 @@ let rec removeInBucket h h_buckets i (key : key) prec buckets = end else removeInBucket h h_buckets i key cell cell_next -let removeDone h key = +let remove h key = let h_buckets = C.buckets h in let i = hash key land (Array.length h_buckets - 1) in let bucket = (A.getUnsafe h_buckets i) in @@ -134,7 +134,7 @@ let removeDone h key = else removeInBucket h h_buckets i key cell (N.next cell) -let remove h key = removeDone h key; h + let rec findAux (key : key) buckets = match C.toOpt buckets with @@ -181,37 +181,36 @@ let has h key = memInBucket key bucket -let create = C.create0 +let make = C.create0 let clear = C.clear0 let size = C.size let forEach = N.forEach0 let reduce = N.reduce0 let logStats = N.logStats0 -let filterMapDone = N.filterMapInplace0 -let filterMap h f = filterMapDone h f; h +let keepMapInPlace = N.filterMapInplace0 let toArray = N.toArray0 let ofArray arr = let len = A.length arr in - let v = create len in + let v = make len in for i = 0 to len - 1 do let k,value = (A.getUnsafe arr i) in - setDone v k value + set v k value done ; v (* TOOD: optimize heuristics for resizing *) -let mergeArrayDone h arr = +let mergeMany h arr = let len = A.length arr in for i = 0 to len - 1 do let k,v = (A.getUnsafe arr i) in - setDone h k v + set h k v done -let mergeArray h arr = mergeArrayDone h arr; h - let copy = N.copy let keysToArray = N.keys0 let valuesToArray = N.values0 let getBucketHistogram = N.getBucketHistogram + +let isEmpty h = C.size h = 0 diff --git a/jscomp/others/hashmap.cppo.mli b/jscomp/others/hashmap.cppo.mli index eae38e5caab..bee790c43c6 100644 --- a/jscomp/others/hashmap.cppo.mli +++ b/jscomp/others/hashmap.cppo.mli @@ -10,31 +10,33 @@ type key = int type 'b t -val create: int -> 'b t +val make: int -> 'b t val clear: 'b t -> unit -val setDone: 'a t -> key -> 'a -> unit +val isEmpty: _ t -> bool + +val set: 'a t -> key -> 'a -> unit (** [setDone tbl k v] if [k] does not exist, add the binding [k,v], otherwise, update the old value with the new [v] *) -val set: 'a t -> key -> 'a -> 'a t + val copy: 'a t -> 'a t val get: 'a t -> key -> 'a option val has: 'b t -> key -> bool -val removeDone: 'a t -> key -> unit -val remove: 'a t -> key -> 'a t +val remove: 'a t -> key -> unit + val forEach: 'b t -> (key -> 'b -> unit [@bs]) -> unit val reduce: 'b t -> 'c -> ('c -> key -> 'b -> 'c [@bs]) -> 'c -val filterMapDone: 'a t -> (key -> 'a -> 'a option [@bs]) -> unit -val filterMap: 'a t -> (key -> 'a -> 'a option [@bs]) -> 'a t +val keepMapInPlace: 'a t -> (key -> 'a -> 'a option [@bs]) -> unit + val size: _ t -> int val logStats: _ t -> unit @@ -43,8 +45,7 @@ val toArray: 'a t -> (key * 'a) array val keysToArray: 'a t -> key array val valuesToArray: 'a t -> 'a array val ofArray: (key * 'a) array -> 'a t -val mergeArrayDone: 'a t -> (key * 'a) array -> unit -val mergeArray: 'a t -> (key * 'a) array -> 'a t +val mergeMany: 'a t -> (key * 'a) array -> unit val getBucketHistogram: _ t -> int array diff --git a/jscomp/others/hashset.cppo.ml b/jscomp/others/hashset.cppo.ml index b2aa9ed560b..2921055839b 100644 --- a/jscomp/others/hashset.cppo.ml +++ b/jscomp/others/hashset.cppo.ml @@ -72,7 +72,7 @@ let rec removeBucket h h_buckets i (key : key) prec cell = | Some cell_next -> removeBucket h h_buckets i key cell cell_next -let removeDone h (key : key)= +let remove h (key : key)= let h_buckets = C.buckets h in let i = hash key land (Array.length h_buckets - 1) in let l = (A.getUnsafe h_buckets i) in @@ -91,7 +91,7 @@ let removeDone h (key : key)= | Some next_cell -> removeBucket h h_buckets i key cell next_cell -let remove h key = removeDone h key; h + let rec addBucket h buckets_len (key : key) cell = @@ -104,7 +104,7 @@ let rec addBucket h buckets_len (key : key) cell = if C.size h > buckets_len lsl 1 then resize h | Some n -> addBucket h buckets_len key n -let addDone h (key : key) = +let add h (key : key) = let h_buckets = C.buckets h in let buckets_len = Array.length h_buckets in let i = hash key land (buckets_len - 1) in @@ -118,8 +118,6 @@ let addDone h (key : key) = | Some cell -> addBucket h buckets_len key cell -let add h key = addDone h key; h - let rec memInBucket (key : key) cell = @@ -139,7 +137,7 @@ let has h key = memInBucket key bucket -let create = C.create0 +let make = C.create0 let clear = C.clear0 let size = C.size @@ -150,22 +148,21 @@ let toArray = N.toArray0 let ofArray arr = let len = Bs.Array.length arr in - let v = create len in + let v = make len in for i = 0 to len - 1 do - addDone v (A.getUnsafe arr i) + add v (A.getUnsafe arr i) done ; v (* TOOD: optimize heuristics for resizing *) -let mergeArrayDone h arr = +let mergeMany h arr = let len = Bs.Array.length arr in for i = 0 to len - 1 do - addDone h (A.getUnsafe arr i) + add h (A.getUnsafe arr i) done -let mergeArray h arr = - mergeArrayDone h arr; h - let copy = N.copy let getBucketHistogram = N.getBucketHistogram + +let isEmpty h = C.size h = 0 diff --git a/jscomp/others/hashset.cppo.mli b/jscomp/others/hashset.cppo.mli index 4c0aca5e944..e937fbb08df 100644 --- a/jscomp/others/hashset.cppo.mli +++ b/jscomp/others/hashset.cppo.mli @@ -8,18 +8,19 @@ type key = int type t -val create: int -> t +val make: int -> t + val clear: t -> unit -val addDone: t -> key -> unit -val add: t -> key -> t +val isEmpty: t -> bool + +val add: t -> key -> unit + val copy: t -> t val has: t -> key -> bool -val removeDone: t -> key -> unit - -val remove: t -> key -> t +val remove: t -> key -> unit val forEach: t -> (key -> unit [@bs]) -> unit @@ -33,8 +34,6 @@ val toArray: t -> key array val ofArray: key array -> t -val mergeArrayDone: t -> key array -> unit - -val mergeArray: t -> key array -> t +val mergeMany: t -> key array -> unit val getBucketHistogram: t -> int array diff --git a/jscomp/test/bs_hashmap_test.js b/jscomp/test/bs_hashmap_test.js index 0ff059d96cb..bcb72b4763f 100644 --- a/jscomp/test/bs_hashmap_test.js +++ b/jscomp/test/bs_hashmap_test.js @@ -44,7 +44,7 @@ function add(x, y) { return x + y | 0; } -Bs_HashMap.mergeArrayDone(empty, /* array */[ +Bs_HashMap.mergeMany(empty, /* array */[ /* tuple */[ 1, 1 @@ -84,18 +84,18 @@ var v$1 = { data: Bs_internalBucketsType.create0(40) }; -Bs_HashMap.mergeArrayDone(v$1, Bs_Array.zip(u$1, u$1)); +Bs_HashMap.mergeMany(v$1, Bs_Array.zip(u$1, u$1)); eqx("File \"bs_hashmap_test.ml\", line 47, characters 6-13", v$1.data.size, 100001); for(var i = 0; i <= 1000; ++i){ - Bs_HashMap.removeDone(v$1, i); + Bs_HashMap.remove(v$1, i); } eqx("File \"bs_hashmap_test.ml\", line 51, characters 6-13", v$1.data.size, 99000); for(var i$1 = 0; i$1 <= 2000; ++i$1){ - Bs_HashMap.removeDone(v$1, i$1); + Bs_HashMap.remove(v$1, i$1); } eqx("File \"bs_hashmap_test.ml\", line 55, characters 6-13", v$1.data.size, 98000); diff --git a/jscomp/test/bs_hashmap_test.ml b/jscomp/test/bs_hashmap_test.ml index 66448983548..742890f0b2a 100644 --- a/jscomp/test/bs_hashmap_test.ml +++ b/jscomp/test/bs_hashmap_test.ml @@ -12,7 +12,7 @@ let eq = fun[@bs] (x : int) y -> x = y let hash = fun[@bs] (x : int) -> Hashtbl.hash x let cmp = fun [@bs] (x : int) y -> compare x y module Y = (val Bs.Hash.make ~eq ~hash) -let empty : (int, int, _) N.t = N.create ~dict:(module Y) 30 +let empty : (int, int, _) N.t = N.make ~dict:(module Y) 30 (* [%bs.hash { @@ -27,7 +27,7 @@ let add = fun [@bs] x y -> x + y let () = - N.mergeArrayDone empty [|1,1;2,3;3,3; 2,2|]; + N.mergeMany empty [|1,1;2,3;3,3; 2,2|]; eqx __LOC__ (N.get empty 2) (Some 2); eqx __LOC__ (N.size empty) 3 @@ -42,15 +42,15 @@ let () = let () = let u = I.randomRange 0 100_000 ++ I.randomRange 0 100 in - let v = N.create ~dict:(module Y) 40 in - N.mergeArrayDone v (A.zip u u); + let v = N.make ~dict:(module Y) 40 in + N.mergeMany v (A.zip u u); eqx __LOC__ (N.size v) 100_001; for i = 0 to 1_000 do - N.removeDone v i + N.remove v i done; eqx __LOC__ (N.size v) 99_000; for i = 0 to 2_000 do - N.removeDone v i + N.remove v i done ; eqx __LOC__ (N.size v) 98_000; b __LOC__ (A.every (I.range 2_001 100_000) (fun [@bs] x -> N.has v x )) diff --git a/jscomp/test/bs_hashset_int_test.js b/jscomp/test/bs_hashset_int_test.js index 72e86395d68..df991389497 100644 --- a/jscomp/test/bs_hashset_int_test.js +++ b/jscomp/test/bs_hashset_int_test.js @@ -48,20 +48,20 @@ eq("File \"bs_hashset_int_test.ml\", line 24, characters 5-12", sum2(v), 6825); var u$1 = Bs_Array.concat(Array_data_util.randomRange(0, 100000), Array_data_util.randomRange(0, 100)); -var v$1 = Bs_HashSetInt.create(40); +var v$1 = Bs_HashSetInt.make(40); -Bs_HashSetInt.mergeArrayDone(v$1, u$1); +Bs_HashSetInt.mergeMany(v$1, u$1); eq("File \"bs_hashset_int_test.ml\", line 30, characters 5-12", v$1.size, 100001); for(var i = 0; i <= 1000; ++i){ - Bs_HashSetInt.removeDone(v$1, i); + Bs_HashSetInt.remove(v$1, i); } eq("File \"bs_hashset_int_test.ml\", line 34, characters 5-12", v$1.size, 99000); for(var i$1 = 0; i$1 <= 2000; ++i$1){ - Bs_HashSetInt.removeDone(v$1, i$1); + Bs_HashSetInt.remove(v$1, i$1); } eq("File \"bs_hashset_int_test.ml\", line 38, characters 5-12", v$1.size, 98000); @@ -73,11 +73,11 @@ var u1 = Bs_HashSetInt.copy(u0); eq("File \"bs_hashset_int_test.ml\", line 44, characters 5-12", Bs_HashSetInt.toArray(u0), Bs_HashSetInt.toArray(u1)); for(var i$2 = 0; i$2 <= 2000; ++i$2){ - Bs_HashSetInt.removeDone(u1, i$2); + Bs_HashSetInt.remove(u1, i$2); } for(var i$3 = 0; i$3 <= 1000; ++i$3){ - Bs_HashSetInt.removeDone(u0, i$3); + Bs_HashSetInt.remove(u0, i$3); } var v0 = Bs_Array.concat(Array_data_util.range(0, 1000), Bs_HashSetInt.toArray(u0)); diff --git a/jscomp/test/bs_hashset_int_test.ml b/jscomp/test/bs_hashset_int_test.ml index c1c38c5acb8..b6fa63dad63 100644 --- a/jscomp/test/bs_hashset_int_test.ml +++ b/jscomp/test/bs_hashset_int_test.ml @@ -25,15 +25,15 @@ let () = let () = let u = I.randomRange 0 100_000 ++ I.randomRange 0 100 in - let v = N.create 40 in - N.mergeArrayDone v u ; + let v = N.make 40 in + N.mergeMany v u ; eq __LOC__ (N.size v) 100_001; for i = 0 to 1_000 do - N.removeDone v i + N.remove v i done ; eq __LOC__ (N.size v ) 99_000; for i = 0 to 2_000 do - N.removeDone v i + N.remove v i done ; eq __LOC__ (N.size v ) 98_000 module A = Bs_Array @@ -43,10 +43,10 @@ let () = let u1 = N.copy u0 in eq __LOC__ (N.toArray u0) (N.toArray u1); for i = 0 to 2000 do - N.removeDone u1 i + N.remove u1 i done ; for i = 0 to 1000 do - N.removeDone u0 i + N.remove u0 i done ; let v0 = (A.concat (I.range 0 1000) (N.toArray u0)) in let v1 = (A.concat (I.range 0 2000) (N.toArray u1)) in diff --git a/jscomp/test/bs_hashtbl_string_test.js b/jscomp/test/bs_hashtbl_string_test.js index 85900fc45cf..03e466064e4 100644 --- a/jscomp/test/bs_hashtbl_string_test.js +++ b/jscomp/test/bs_hashtbl_string_test.js @@ -79,7 +79,7 @@ var empty = { function bench() { for(var i = 0; i <= 1000000; ++i){ - Bs_HashMap.setDone(empty, i, i); + Bs_HashMap.set(empty, i, i); } for(var i$1 = 0; i$1 <= 1000000; ++i$1){ if (!Bs_HashMap.has(empty, i$1)) { @@ -102,14 +102,11 @@ function bench2(m) { dict: m, data: Bs_internalBucketsType.create0(1000000) }; - var hash = m[/* hash */0]; - var eq = m[/* eq */1]; - var table = empty.data; for(var i = 0; i <= 1000000; ++i){ - Bs_HashMap.setDone0(hash, eq, table, "" + i, i); + Bs_HashMap.set(empty, "" + i, i); } for(var i$1 = 0; i$1 <= 1000000; ++i$1){ - if (!Bs_HashMap.has0(hash, eq, table, "" + i$1)) { + if (!Bs_HashMap.has(empty, "" + i$1)) { throw [ Caml_builtin_exceptions.assert_failure, [ @@ -122,14 +119,14 @@ function bench2(m) { } for(var i$2 = 0; i$2 <= 1000000; ++i$2){ - Bs_HashMap.remove0(hash, eq, table, "" + i$2); + Bs_HashMap.remove(empty, "" + i$2); } - if (table.size) { + if (empty.data.size) { throw [ Caml_builtin_exceptions.assert_failure, [ "bs_hashtbl_string_test.ml", - 83, + 82, 2 ] ]; @@ -154,7 +151,7 @@ function bench3(m) { Caml_builtin_exceptions.assert_failure, [ "bs_hashtbl_string_test.ml", - 98, + 97, 4 ] ]; @@ -169,7 +166,7 @@ function bench3(m) { Caml_builtin_exceptions.assert_failure, [ "bs_hashtbl_string_test.ml", - 105, + 104, 2 ] ]; @@ -181,9 +178,9 @@ function bench3(m) { var Sx = /* module */[/* cmp */Caml_primitive.caml_string_compare]; function bench4() { - var table = Bs_HashMapString.create(1000000); + var table = Bs_HashMapString.make(1000000); for(var i = 0; i <= 1000000; ++i){ - Bs_HashMapString.setDone(table, "" + i, i); + Bs_HashMapString.set(table, "" + i, i); } for(var i$1 = 0; i$1 <= 1000000; ++i$1){ if (!Bs_HashMapString.has(table, "" + i$1)) { @@ -191,7 +188,7 @@ function bench4() { Caml_builtin_exceptions.assert_failure, [ "bs_hashtbl_string_test.ml", - 118, + 117, 4 ] ]; @@ -199,14 +196,14 @@ function bench4() { } for(var i$2 = 0; i$2 <= 1000000; ++i$2){ - Bs_HashMapString.removeDone(table, "" + i$2); + Bs_HashMapString.remove(table, "" + i$2); } if (table.size) { throw [ Caml_builtin_exceptions.assert_failure, [ "bs_hashtbl_string_test.ml", - 124, + 123, 2 ] ]; @@ -220,40 +217,37 @@ function bench5() { dict: Int, data: Bs_internalBucketsType.create0(1000000) }; - var table_data = table.data; - var hash = Int_000; - var eq = Int_001; - console.time("bs_hashtbl_string_test.ml 132"); + console.time("bs_hashtbl_string_test.ml 131"); for(var i = 0; i <= 1000000; ++i){ - Bs_HashMap.setDone0(hash, eq, table_data, i, i); + Bs_HashMap.set(table, i, i); } - console.timeEnd("bs_hashtbl_string_test.ml 132"); - console.time("bs_hashtbl_string_test.ml 136"); + console.timeEnd("bs_hashtbl_string_test.ml 131"); + console.time("bs_hashtbl_string_test.ml 135"); for(var i$1 = 0; i$1 <= 1000000; ++i$1){ - if (!Bs_HashMap.has0(hash, eq, table_data, i$1)) { + if (!Bs_HashMap.has(table, i$1)) { throw [ Caml_builtin_exceptions.assert_failure, [ "bs_hashtbl_string_test.ml", - 137, + 136, 6 ] ]; } } - console.timeEnd("bs_hashtbl_string_test.ml 136"); - console.time("bs_hashtbl_string_test.ml 140"); + console.timeEnd("bs_hashtbl_string_test.ml 135"); + console.time("bs_hashtbl_string_test.ml 139"); for(var i$2 = 0; i$2 <= 1000000; ++i$2){ - Bs_HashMap.remove0(hash, eq, table_data, i$2); + Bs_HashMap.remove(table, i$2); } - console.timeEnd("bs_hashtbl_string_test.ml 140"); + console.timeEnd("bs_hashtbl_string_test.ml 139"); if (table.data.size) { throw [ Caml_builtin_exceptions.assert_failure, [ "bs_hashtbl_string_test.ml", - 143, + 142, 2 ] ]; @@ -263,9 +257,9 @@ function bench5() { } function bench6() { - var table = Bs_HashMapInt.create(1000000); + var table = Bs_HashMapInt.make(1000000); for(var i = 0; i <= 1000000; ++i){ - Bs_HashMapInt.setDone(table, i, i); + Bs_HashMapInt.set(table, i, i); } for(var i$1 = 0; i$1 <= 1000000; ++i$1){ if (!Bs_HashMapInt.has(table, i$1)) { @@ -273,7 +267,7 @@ function bench6() { Caml_builtin_exceptions.assert_failure, [ "bs_hashtbl_string_test.ml", - 154, + 153, 4 ] ]; @@ -281,14 +275,14 @@ function bench6() { } for(var i$2 = 0; i$2 <= 1000000; ++i$2){ - Bs_HashMapInt.removeDone(table, i$2); + Bs_HashMapInt.remove(table, i$2); } if (table.size) { throw [ Caml_builtin_exceptions.assert_failure, [ "bs_hashtbl_string_test.ml", - 160, + 159, 2 ] ]; @@ -298,9 +292,9 @@ function bench6() { } function bench7() { - var table = Bs_HashSetInt.create(2000000); + var table = Bs_HashSetInt.make(2000000); for(var i = 0; i <= 1000000; ++i){ - Bs_HashSetInt.addDone(table, i); + Bs_HashSetInt.add(table, i); } for(var i$1 = 0; i$1 <= 1000000; ++i$1){ if (!Bs_HashSetInt.has(table, i$1)) { @@ -308,7 +302,7 @@ function bench7() { Caml_builtin_exceptions.assert_failure, [ "bs_hashtbl_string_test.ml", - 179, + 178, 4 ] ]; @@ -316,14 +310,14 @@ function bench7() { } for(var i$2 = 0; i$2 <= 1000000; ++i$2){ - Bs_HashSetInt.removeDone(table, i$2); + Bs_HashSetInt.remove(table, i$2); } if (table.size) { throw [ Caml_builtin_exceptions.assert_failure, [ "bs_hashtbl_string_test.ml", - 190, + 189, 2 ] ]; @@ -332,11 +326,11 @@ function bench7() { } } -console.time("bs_hashtbl_string_test.ml 201"); +console.time("bs_hashtbl_string_test.ml 200"); bench7(/* () */0); -console.timeEnd("bs_hashtbl_string_test.ml 201"); +console.timeEnd("bs_hashtbl_string_test.ml 200"); var N = 0; diff --git a/jscomp/test/bs_hashtbl_string_test.ml b/jscomp/test/bs_hashtbl_string_test.ml index bf2496a41b0..6c7f4ee7b03 100644 --- a/jscomp/test/bs_hashtbl_string_test.ml +++ b/jscomp/test/bs_hashtbl_string_test.ml @@ -37,14 +37,14 @@ module Int = ~hash:(fun [@bs] x -> Hashtbl.hash x)) let empty = - Bs.HashMap.create ~dict:(module Int) 500_000 + Bs.HashMap.make ~dict:(module Int) 500_000 module N = Bs.HashMap let bench() = let count = 1_000_000 in - let add = N.setDone in + (* let add = N.setDone in *) let mem = N.has in for i = 0 to count do - add empty i i + N.set empty i i done ; for i = 0 to count do assert (mem empty i) @@ -63,24 +63,23 @@ let initial_size = 1_000_000 module M = Bs.HashMap let bench2 (type t) (m : (string,t) Bs.Hash.t) = let empty = - M.create ~dict:m initial_size in + M.make ~dict:m initial_size in let module String = (val m) in - let hash = String.hash in - let eq = String.eq in - let table = M.getData empty in + (* let hash = String.hash in + let eq = String.eq in *) + (* let table = M.getData empty in *) for i = 0 to count do - Bs.HashMap.setDone0 ~hash ~eq - table (string_of_int i) i + M.set + empty (string_of_int i) i done ; for i = 0 to count do - assert (Bs.HashMap.has0 - ~hash ~eq - table (string_of_int i)) + assert (M.has + empty (string_of_int i)) done; for i = 0 to count do - Bs.HashMap.remove0 ~hash ~eq table (string_of_int i) + M.remove empty (string_of_int i) done ; - assert (Bs.HashMap.size0 table = 0) + assert (M.size empty = 0) (* Bs.HashMap.logStats empty *) @@ -108,10 +107,10 @@ module Sx = (val Bs.Cmp.make (fun [@bs] (x : string) y -> compare x y )) let bench4 () = let table = - Bs.HashMapString.create initial_size in + Bs.HashMapString.make initial_size in for i = 0 to count do - Bs.HashMapString.setDone + Bs.HashMapString.set table (string_of_int i) i done ; for i = 0 to count do @@ -119,35 +118,35 @@ let bench4 () = table (string_of_int i)) done; for i = 0 to count do - Bs.HashMapString.removeDone table (string_of_int i) + Bs.HashMapString.remove table (string_of_int i) done ; assert (Bs.HashMapString.size table = 0) let bench5 () = let table = - Bs.HashMap.create ~dict:(module Int) initial_size in - let table_data = M.getData table in - let hash = Int.hash in - let eq = Int.eq in + Bs.HashMap.make ~dict:(module Int) initial_size in + (* let table_data = M.getData table in *) + (* let hash = Int.hash in + let eq = Int.eq in *) [%time for i = 0 to count do - Bs.HashMap.setDone0 ~hash ~eq - table_data i i + Bs.HashMap.set + table i i done] ; [%time for i = 0 to count do - assert (Bs.HashMap.has0 ~eq ~hash - table_data i) + assert (Bs.HashMap.has + table i) done]; [%time for i = 0 to count do - Bs.HashMap.remove0 ~eq ~hash table_data i + Bs.HashMap.remove table i done ]; assert (Bs.HashMap.size table = 0) let bench6 () = let table = - Bs.HashMapInt.create initial_size in + Bs.HashMapInt.make initial_size in for i = 0 to count do - Bs.HashMapInt.setDone + Bs.HashMapInt.set table i i done ; for i = 0 to count do @@ -155,7 +154,7 @@ let bench6 () = table i) done; for i = 0 to count do - Bs.HashMapInt.removeDone table i + Bs.HashMapInt.remove table i done ; assert (Bs.HashMapInt.size table = 0) @@ -163,13 +162,13 @@ module S = Bs.HashSetInt let bench7 () = let table = (* [%time *) - S.create (initial_size* 2) + S.make (initial_size* 2) (* ] *) in (* [%time *) for i = 0 to count do - S.addDone + S.add table i done (* ] *) @@ -183,7 +182,7 @@ let bench7 () = ; (* [%time *) for i = 0 to count do - S.removeDone table i + S.remove table i done (* ] *) ; diff --git a/lib/js/bs_HashMap.js b/lib/js/bs_HashMap.js index 2d662f73cd6..1cc8507302e 100644 --- a/lib/js/bs_HashMap.js +++ b/lib/js/bs_HashMap.js @@ -102,18 +102,55 @@ function setDone0(hash, eq, h, key, value) { } } -function remove0(hash, eq, h, key) { - var h_buckets = h.buckets; - var i = hash(key) & (h_buckets.length - 1 | 0); +function make(initialize_size, dict) { + return { + dict: dict, + data: Bs_internalBucketsType.create0(initialize_size) + }; +} + +function clear(h) { + return Bs_internalBucketsType.clear0(h.data); +} + +function size(h) { + return h.data.size; +} + +function forEach(h, f) { + return Bs_internalBuckets.forEach0(h.data, f); +} + +function reduce(h, init, f) { + return Bs_internalBuckets.reduce0(h.data, init, f); +} + +function logStats(h) { + return Bs_internalBuckets.logStats0(h.data); +} + +function set(h, key, info) { + var M = h.dict; + return setDone0(M[/* hash */0], M[/* eq */1], h.data, key, info); +} + +function remove(h, key) { + var M = h.dict; + var hash = M[/* hash */0]; + var eq = M[/* eq */1]; + var h$1 = h.data; + var key$1 = key; + var h_buckets = h$1.buckets; + var i = hash(key$1) & (h_buckets.length - 1 | 0); var bucket = h_buckets[i]; if (bucket !== undefined) { - if (eq(bucket.key, key)) { + if (eq(bucket.key, key$1)) { h_buckets[i] = bucket.next; - h.size = h.size - 1 | 0; + h$1.size = h$1.size - 1 | 0; return /* () */0; } else { - var h$1 = h; - var key$1 = key; + var h$2 = h$1; + var key$2 = key$1; var _prec = bucket; var _bucket = bucket.next; var eq$1 = eq; @@ -122,9 +159,9 @@ function remove0(hash, eq, h, key) { var prec = _prec; if (bucket$1 !== undefined) { var cell_next = bucket$1.next; - if (eq$1(bucket$1.key, key$1)) { + if (eq$1(bucket$1.key, key$2)) { prec.next = cell_next; - h$1.size = h$1.size - 1 | 0; + h$2.size = h$2.size - 1 | 0; return /* () */0; } else { _bucket = cell_next; @@ -142,31 +179,36 @@ function remove0(hash, eq, h, key) { } } -function get0(hash, eq, h, key) { - var h_buckets = h.buckets; - var nid = hash(key) & (h_buckets.length - 1 | 0); +function get(h, key) { + var M = h.dict; + var hash = M[/* hash */0]; + var eq = M[/* eq */1]; + var h$1 = h.data; + var key$1 = key; + var h_buckets = h$1.buckets; + var nid = hash(key$1) & (h_buckets.length - 1 | 0); var match = h_buckets[nid]; if (match !== undefined) { - if (eq(key, match.key)) { + if (eq(key$1, match.key)) { return /* Some */[match.value]; } else { var match$1 = match.next; if (match$1 !== undefined) { - if (eq(key, match$1.key)) { + if (eq(key$1, match$1.key)) { return /* Some */[match$1.value]; } else { var match$2 = match$1.next; if (match$2 !== undefined) { - if (eq(key, match$2.key)) { + if (eq(key$1, match$2.key)) { return /* Some */[match$2.value]; } else { var eq$1 = eq; - var key$1 = key; + var key$2 = key$1; var _buckets = match$2.next; while(true) { var buckets = _buckets; if (buckets !== undefined) { - if (eq$1(key$1, buckets.key)) { + if (eq$1(key$2, buckets.key)) { return /* Some */[buckets.value]; } else { _buckets = buckets.next; @@ -191,17 +233,22 @@ function get0(hash, eq, h, key) { } } -function has0(hash, eq, h, key) { - var h_buckets = h.buckets; - var nid = hash(key) & (h_buckets.length - 1 | 0); +function has(h, key) { + var M = h.dict; + var hash = M[/* hash */0]; + var eq = M[/* eq */1]; + var h$1 = h.data; + var key$1 = key; + var h_buckets = h$1.buckets; + var nid = hash(key$1) & (h_buckets.length - 1 | 0); var bucket = h_buckets[nid]; if (bucket !== undefined) { var eq$1 = eq; - var key$1 = key; + var key$2 = key$1; var _cell = bucket; while(true) { var cell = _cell; - if (eq$1(cell.key, key$1)) { + if (eq$1(cell.key, key$2)) { return /* true */1; } else { var match = cell.next; @@ -219,76 +266,10 @@ function has0(hash, eq, h, key) { } } -function size0(prim) { - return prim.size; -} - -function create(initialize_size, dict) { - return { - dict: dict, - data: Bs_internalBucketsType.create0(initialize_size) - }; -} - -function clear(h) { - return Bs_internalBucketsType.clear0(h.data); -} - -function size(h) { - return h.data.size; -} - -function forEach(h, f) { - return Bs_internalBuckets.forEach0(h.data, f); -} - -function reduce(h, init, f) { - return Bs_internalBuckets.reduce0(h.data, init, f); -} - -function logStats(h) { - return Bs_internalBuckets.logStats0(h.data); -} - -function setDone(h, key, info) { - var M = h.dict; - return setDone0(M[/* hash */0], M[/* eq */1], h.data, key, info); -} - -function set(h, key, info) { - setDone(h, key, info); - return h; -} - -function removeDone(h, key) { - var M = h.dict; - return remove0(M[/* hash */0], M[/* eq */1], h.data, key); -} - -function remove(h, key) { - removeDone(h, key); - return h; -} - -function get(h, key) { - var M = h.dict; - return get0(M[/* hash */0], M[/* eq */1], h.data, key); -} - -function has(h, key) { - var M = h.dict; - return has0(M[/* hash */0], M[/* eq */1], h.data, key); -} - -function filterMapDone(h, f) { +function keepMapInPlace(h, f) { return Bs_internalBuckets.filterMapInplace0(h.data, f); } -function filterMap(h, f) { - Bs_internalBuckets.filterMapInplace0(h.data, f); - return h; -} - function toArray(h) { return Bs_internalBuckets.toArray0(h.data); } @@ -303,20 +284,6 @@ function ofArray0(arr, hash, eq) { return v; } -function mergeArrayDone0(h, arr, hash, eq) { - var len = arr.length; - for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ - var match = arr[i]; - setDone0(hash, eq, h, match[0], match[1]); - } - return /* () */0; -} - -function mergeArray0(h, arr, hash, eq) { - mergeArrayDone0(h, arr, hash, eq); - return h; -} - function ofArray(arr, dict) { return { dict: dict, @@ -324,14 +291,18 @@ function ofArray(arr, dict) { }; } -function mergeArrayDone(h, arr) { +function mergeMany(h, arr) { var M = h.dict; - return mergeArrayDone0(h.data, arr, M[/* hash */0], M[/* eq */1]); -} - -function mergeArray(h, arr) { - mergeArrayDone(h, arr); - return h; + var h$1 = h.data; + var arr$1 = arr; + var hash = M[/* hash */0]; + var eq = M[/* eq */1]; + var len = arr$1.length; + for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ + var match = arr$1[i]; + setDone0(hash, eq, h$1, match[0], match[1]); + } + return /* () */0; } function copy(h) { @@ -353,78 +324,27 @@ function getBucketHistogram(h) { return Bs_internalBuckets.getBucketHistogram(h.data); } -function getData(prim) { - return prim.data; +function isEmpty(h) { + return +(h.data.size === 0); } -function getDict(prim) { - return prim.dict; -} - -function packDictData(prim, prim$1) { - return { - dict: prim, - data: prim$1 - }; -} - -var create0 = Bs_internalBucketsType.create0; - -var clear0 = Bs_internalBucketsType.clear0; - -var forEach0 = Bs_internalBuckets.forEach0; - -var reduce0 = Bs_internalBuckets.reduce0; - -var filterMapDone0 = Bs_internalBuckets.filterMapInplace0; - -var logStats0 = Bs_internalBuckets.logStats0; - -var toArray0 = Bs_internalBuckets.toArray0; - -var keysToArray0 = Bs_internalBuckets.keys0; - -var valuesToArray0 = Bs_internalBuckets.values0; - -exports.create = create; +exports.make = make; exports.clear = clear; -exports.setDone = setDone; +exports.isEmpty = isEmpty; exports.set = set; exports.copy = copy; exports.get = get; exports.has = has; -exports.removeDone = removeDone; exports.remove = remove; exports.forEach = forEach; exports.reduce = reduce; -exports.filterMapDone = filterMapDone; -exports.filterMap = filterMap; +exports.keepMapInPlace = keepMapInPlace; exports.size = size; exports.logStats = logStats; exports.toArray = toArray; exports.ofArray = ofArray; -exports.mergeArrayDone = mergeArrayDone; -exports.mergeArray = mergeArray; +exports.mergeMany = mergeMany; exports.keysToArray = keysToArray; exports.valuesToArray = valuesToArray; exports.getBucketHistogram = getBucketHistogram; -exports.getData = getData; -exports.getDict = getDict; -exports.packDictData = packDictData; -exports.create0 = create0; -exports.clear0 = clear0; -exports.setDone0 = setDone0; -exports.get0 = get0; -exports.has0 = has0; -exports.remove0 = remove0; -exports.forEach0 = forEach0; -exports.reduce0 = reduce0; -exports.filterMapDone0 = filterMapDone0; -exports.size0 = size0; -exports.logStats0 = logStats0; -exports.toArray0 = toArray0; -exports.ofArray0 = ofArray0; -exports.mergeArray0 = mergeArray0; -exports.keysToArray0 = keysToArray0; -exports.valuesToArray0 = valuesToArray0; /* No side effect */ diff --git a/lib/js/bs_HashMapInt.js b/lib/js/bs_HashMapInt.js index d549db1f078..b93a6dafe11 100644 --- a/lib/js/bs_HashMapInt.js +++ b/lib/js/bs_HashMapInt.js @@ -69,7 +69,7 @@ function replaceInBucket(key, info, _cell) { }; } -function setDone(h, key, value) { +function set(h, key, value) { var h_buckets = h.buckets; var i = Caml_hash.caml_hash_final_mix(Caml_hash.caml_hash_mix_int(0, key)) & (h_buckets.length - 1 | 0); var l = h_buckets[i]; @@ -104,12 +104,7 @@ function setDone(h, key, value) { } } -function set(h, key, value) { - setDone(h, key, value); - return h; -} - -function removeDone(h, key) { +function remove(h, key) { var h_buckets = h.buckets; var i = Caml_hash.caml_hash_final_mix(Caml_hash.caml_hash_mix_int(0, key)) & (h_buckets.length - 1 | 0); var bucket = h_buckets[i]; @@ -148,11 +143,6 @@ function removeDone(h, key) { } } -function remove(h, key) { - removeDone(h, key); - return h; -} - function get(h, key) { var h_buckets = h.buckets; var nid = Caml_hash.caml_hash_final_mix(Caml_hash.caml_hash_mix_int(0, key)) & (h_buckets.length - 1 | 0); @@ -232,36 +222,30 @@ function size(prim) { return prim.size; } -function filterMap(h, f) { - Bs_internalBuckets.filterMapInplace0(h, f); - return h; -} - function ofArray(arr) { var len = arr.length; var v = Bs_internalBucketsType.create0(len); for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ var match = arr[i]; - setDone(v, match[0], match[1]); + set(v, match[0], match[1]); } return v; } -function mergeArrayDone(h, arr) { +function mergeMany(h, arr) { var len = arr.length; for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ var match = arr[i]; - setDone(h, match[0], match[1]); + set(h, match[0], match[1]); } return /* () */0; } -function mergeArray(h, arr) { - mergeArrayDone(h, arr); - return h; +function isEmpty(h) { + return +(h.size === 0); } -var create = Bs_internalBucketsType.create0; +var make = Bs_internalBucketsType.create0; var clear = Bs_internalBucketsType.clear0; @@ -271,7 +255,7 @@ var forEach = Bs_internalBuckets.forEach0; var reduce = Bs_internalBuckets.reduce0; -var filterMapDone = Bs_internalBuckets.filterMapInplace0; +var keepMapInPlace = Bs_internalBuckets.filterMapInplace0; var logStats = Bs_internalBuckets.logStats0; @@ -283,26 +267,23 @@ var valuesToArray = Bs_internalBuckets.values0; var getBucketHistogram = Bs_internalBuckets.getBucketHistogram; -exports.create = create; +exports.make = make; exports.clear = clear; -exports.setDone = setDone; +exports.isEmpty = isEmpty; exports.set = set; exports.copy = copy; exports.get = get; exports.has = has; -exports.removeDone = removeDone; exports.remove = remove; exports.forEach = forEach; exports.reduce = reduce; -exports.filterMapDone = filterMapDone; -exports.filterMap = filterMap; +exports.keepMapInPlace = keepMapInPlace; exports.size = size; exports.logStats = logStats; exports.toArray = toArray; exports.keysToArray = keysToArray; exports.valuesToArray = valuesToArray; exports.ofArray = ofArray; -exports.mergeArrayDone = mergeArrayDone; -exports.mergeArray = mergeArray; +exports.mergeMany = mergeMany; exports.getBucketHistogram = getBucketHistogram; /* No side effect */ diff --git a/lib/js/bs_HashMapString.js b/lib/js/bs_HashMapString.js index d1ad5a0d35a..53369689851 100644 --- a/lib/js/bs_HashMapString.js +++ b/lib/js/bs_HashMapString.js @@ -69,7 +69,7 @@ function replaceInBucket(key, info, _cell) { }; } -function setDone(h, key, value) { +function set(h, key, value) { var h_buckets = h.buckets; var i = Caml_hash.caml_hash_final_mix(Caml_hash.caml_hash_mix_string(0, key)) & (h_buckets.length - 1 | 0); var l = h_buckets[i]; @@ -104,12 +104,7 @@ function setDone(h, key, value) { } } -function set(h, key, value) { - setDone(h, key, value); - return h; -} - -function removeDone(h, key) { +function remove(h, key) { var h_buckets = h.buckets; var i = Caml_hash.caml_hash_final_mix(Caml_hash.caml_hash_mix_string(0, key)) & (h_buckets.length - 1 | 0); var bucket = h_buckets[i]; @@ -148,11 +143,6 @@ function removeDone(h, key) { } } -function remove(h, key) { - removeDone(h, key); - return h; -} - function get(h, key) { var h_buckets = h.buckets; var nid = Caml_hash.caml_hash_final_mix(Caml_hash.caml_hash_mix_string(0, key)) & (h_buckets.length - 1 | 0); @@ -232,36 +222,30 @@ function size(prim) { return prim.size; } -function filterMap(h, f) { - Bs_internalBuckets.filterMapInplace0(h, f); - return h; -} - function ofArray(arr) { var len = arr.length; var v = Bs_internalBucketsType.create0(len); for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ var match = arr[i]; - setDone(v, match[0], match[1]); + set(v, match[0], match[1]); } return v; } -function mergeArrayDone(h, arr) { +function mergeMany(h, arr) { var len = arr.length; for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ var match = arr[i]; - setDone(h, match[0], match[1]); + set(h, match[0], match[1]); } return /* () */0; } -function mergeArray(h, arr) { - mergeArrayDone(h, arr); - return h; +function isEmpty(h) { + return +(h.size === 0); } -var create = Bs_internalBucketsType.create0; +var make = Bs_internalBucketsType.create0; var clear = Bs_internalBucketsType.clear0; @@ -271,7 +255,7 @@ var forEach = Bs_internalBuckets.forEach0; var reduce = Bs_internalBuckets.reduce0; -var filterMapDone = Bs_internalBuckets.filterMapInplace0; +var keepMapInPlace = Bs_internalBuckets.filterMapInplace0; var logStats = Bs_internalBuckets.logStats0; @@ -283,26 +267,23 @@ var valuesToArray = Bs_internalBuckets.values0; var getBucketHistogram = Bs_internalBuckets.getBucketHistogram; -exports.create = create; +exports.make = make; exports.clear = clear; -exports.setDone = setDone; +exports.isEmpty = isEmpty; exports.set = set; exports.copy = copy; exports.get = get; exports.has = has; -exports.removeDone = removeDone; exports.remove = remove; exports.forEach = forEach; exports.reduce = reduce; -exports.filterMapDone = filterMapDone; -exports.filterMap = filterMap; +exports.keepMapInPlace = keepMapInPlace; exports.size = size; exports.logStats = logStats; exports.toArray = toArray; exports.keysToArray = keysToArray; exports.valuesToArray = valuesToArray; exports.ofArray = ofArray; -exports.mergeArrayDone = mergeArrayDone; -exports.mergeArray = mergeArray; +exports.mergeMany = mergeMany; exports.getBucketHistogram = getBucketHistogram; /* No side effect */ diff --git a/lib/js/bs_HashSet.js b/lib/js/bs_HashSet.js index 111fcb5ca35..9e768439b70 100644 --- a/lib/js/bs_HashSet.js +++ b/lib/js/bs_HashSet.js @@ -24,47 +24,6 @@ function copyBucket(hash, h_buckets, ndata_tail, _, _old_bucket) { }; } -function remove0(hash, eq, h, key) { - var h_buckets = h.buckets; - var i = hash(key) & (h_buckets.length - 1 | 0); - var l = h_buckets[i]; - if (l !== undefined) { - var next_cell = l.next; - if (eq(l.key, key)) { - h.size = h.size - 1 | 0; - h_buckets[i] = next_cell; - return /* () */0; - } else if (next_cell !== undefined) { - var eq$1 = eq; - var h$1 = h; - var key$1 = key; - var _prec = l; - var _cell = next_cell; - while(true) { - var cell = _cell; - var prec = _prec; - var cell_next = cell.next; - if (eq$1(cell.key, key$1)) { - prec.next = cell_next; - h$1.size = h$1.size - 1 | 0; - return /* () */0; - } else if (cell_next !== undefined) { - _cell = cell_next; - _prec = cell; - continue ; - - } else { - return /* () */0; - } - }; - } else { - return /* () */0; - } - } else { - return /* () */0; - } -} - function addBucket(eq, h, key, _cell) { while(true) { var cell = _cell; @@ -131,48 +90,11 @@ function addDone0(h, key, hash, eq) { } } -function add0(h, key, hash, eq) { - addDone0(h, key, hash, eq); - return h; -} - -function has0(h, key, hash, eq) { - var h_buckets = h.buckets; - var nid = hash(key) & (h_buckets.length - 1 | 0); - var bucket = h_buckets[nid]; - if (bucket !== undefined) { - var eq$1 = eq; - var key$1 = key; - var _cell = bucket; - while(true) { - var cell = _cell; - if (eq$1(cell.key, key$1)) { - return /* true */1; - } else { - var match = cell.next; - if (match !== undefined) { - _cell = match; - continue ; - - } else { - return /* false */0; - } - } - }; - } else { - return /* false */0; - } -} - -function size0(prim) { - return prim.size; -} - function toArray(h) { return Bs_internalSetBuckets.toArray0(h.data); } -function create(dict, initialize_size) { +function make(dict, initialize_size) { return { dict: dict, data: Bs_internalBucketsType.create0(initialize_size) @@ -199,30 +121,88 @@ function logStats(h) { return Bs_internalSetBuckets.logStats0(h.data); } -function addDone(h, key) { - var dict = h.dict; - var data = h.data; - return addDone0(data, key, dict[/* hash */0], dict[/* eq */1]); -} - function add(h, key) { - addDone(h, key); - return h; -} - -function removeDone(h, key) { var M = h.dict; - return remove0(M[/* hash */0], M[/* eq */1], h.data, key); + return addDone0(h.data, key, M[/* hash */0], M[/* eq */1]); } function remove(h, key) { - removeDone(h, key); - return h; + var M = h.dict; + var hash = M[/* hash */0]; + var eq = M[/* eq */1]; + var h$1 = h.data; + var key$1 = key; + var h_buckets = h$1.buckets; + var i = hash(key$1) & (h_buckets.length - 1 | 0); + var l = h_buckets[i]; + if (l !== undefined) { + var next_cell = l.next; + if (eq(l.key, key$1)) { + h$1.size = h$1.size - 1 | 0; + h_buckets[i] = next_cell; + return /* () */0; + } else if (next_cell !== undefined) { + var eq$1 = eq; + var h$2 = h$1; + var key$2 = key$1; + var _prec = l; + var _cell = next_cell; + while(true) { + var cell = _cell; + var prec = _prec; + var cell_next = cell.next; + if (eq$1(cell.key, key$2)) { + prec.next = cell_next; + h$2.size = h$2.size - 1 | 0; + return /* () */0; + } else if (cell_next !== undefined) { + _cell = cell_next; + _prec = cell; + continue ; + + } else { + return /* () */0; + } + }; + } else { + return /* () */0; + } + } else { + return /* () */0; + } } function has(h, key) { var M = h.dict; - return has0(h.data, key, M[/* hash */0], M[/* eq */1]); + var h$1 = h.data; + var key$1 = key; + var hash = M[/* hash */0]; + var eq = M[/* eq */1]; + var h_buckets = h$1.buckets; + var nid = hash(key$1) & (h_buckets.length - 1 | 0); + var bucket = h_buckets[nid]; + if (bucket !== undefined) { + var eq$1 = eq; + var key$2 = key$1; + var _cell = bucket; + while(true) { + var cell = _cell; + if (eq$1(cell.key, key$2)) { + return /* true */1; + } else { + var match = cell.next; + if (match !== undefined) { + _cell = match; + continue ; + + } else { + return /* false */0; + } + } + }; + } else { + return /* false */0; + } } function ofArray0(hash, eq, arr) { @@ -234,14 +214,6 @@ function ofArray0(hash, eq, arr) { return v; } -function addArray0(hash, eq, h, arr) { - var len = arr.length; - for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ - addDone0(h, arr[i], hash, eq); - } - return /* () */0; -} - function ofArray(arr, dict) { return { dict: dict, @@ -249,54 +221,32 @@ function ofArray(arr, dict) { }; } -function mergeArrayDone(h, arr) { - var data = h.data; +function mergeMany(h, arr) { var M = h.dict; - return addArray0(M[/* hash */0], M[/* eq */1], data, arr); -} - -function mergeArray(h, arr) { - mergeArrayDone(h, arr); - return h; -} - -function getData(prim) { - return prim.data; -} - -function getDict(prim) { - return prim.dict; -} - -function packDictData(prim, prim$1) { - return { - dict: prim, - data: prim$1 - }; + var hash = M[/* hash */0]; + var eq = M[/* eq */1]; + var h$1 = h.data; + var arr$1 = arr; + var len = arr$1.length; + for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ + addDone0(h$1, arr$1[i], hash, eq); + } + return /* () */0; } function getBucketHistogram(h) { return Bs_internalSetBuckets.getBucketHistogram(h.data); } -var clear0 = Bs_internalBucketsType.clear0; - -var create0 = Bs_internalBucketsType.create0; - -var forEach0 = Bs_internalSetBuckets.forEach0; - -var reduce0 = Bs_internalSetBuckets.reduce0; - -var logStats0 = Bs_internalSetBuckets.logStats0; - -var toArray0 = Bs_internalSetBuckets.toArray0; +function isEmpty(h) { + return +(h.data.size === 0); +} -exports.create = create; +exports.make = make; exports.clear = clear; -exports.addDone = addDone; +exports.isEmpty = isEmpty; exports.add = add; exports.has = has; -exports.removeDone = removeDone; exports.remove = remove; exports.forEach = forEach; exports.reduce = reduce; @@ -304,23 +254,6 @@ exports.size = size; exports.logStats = logStats; exports.toArray = toArray; exports.ofArray = ofArray; -exports.mergeArrayDone = mergeArrayDone; -exports.mergeArray = mergeArray; +exports.mergeMany = mergeMany; exports.getBucketHistogram = getBucketHistogram; -exports.getData = getData; -exports.getDict = getDict; -exports.packDictData = packDictData; -exports.clear0 = clear0; -exports.create0 = create0; -exports.add0 = add0; -exports.addDone0 = addDone0; -exports.has0 = has0; -exports.remove0 = remove0; -exports.forEach0 = forEach0; -exports.reduce0 = reduce0; -exports.size0 = size0; -exports.logStats0 = logStats0; -exports.toArray0 = toArray0; -exports.ofArray0 = ofArray0; -exports.addArray0 = addArray0; /* No side effect */ diff --git a/lib/js/bs_HashSetInt.js b/lib/js/bs_HashSetInt.js index 9cf1ad23ce1..8be1b7fb489 100644 --- a/lib/js/bs_HashSetInt.js +++ b/lib/js/bs_HashSetInt.js @@ -50,7 +50,7 @@ function resize(h) { } } -function removeDone(h, key) { +function remove(h, key) { var h_buckets = h.buckets; var i = Caml_hash.caml_hash_final_mix(Caml_hash.caml_hash_mix_int(0, key)) & (h_buckets.length - 1 | 0); var l = h_buckets[i]; @@ -90,12 +90,7 @@ function removeDone(h, key) { } } -function remove(h, key) { - removeDone(h, key); - return h; -} - -function addDone(h, key) { +function add(h, key) { var h_buckets = h.buckets; var buckets_len = h_buckets.length; var i = Caml_hash.caml_hash_final_mix(Caml_hash.caml_hash_mix_int(0, key)) & (buckets_len - 1 | 0); @@ -143,11 +138,6 @@ function addDone(h, key) { } } -function add(h, key) { - addDone(h, key); - return h; -} - function has(h, key) { var h_buckets = h.buckets; var nid = Caml_hash.caml_hash_final_mix(Caml_hash.caml_hash_mix_int(0, key)) & (h_buckets.length - 1 | 0); @@ -183,25 +173,24 @@ function ofArray(arr) { var len = arr.length; var v = Bs_internalBucketsType.create0(len); for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ - addDone(v, arr[i]); + add(v, arr[i]); } return v; } -function mergeArrayDone(h, arr) { +function mergeMany(h, arr) { var len = arr.length; for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ - addDone(h, arr[i]); + add(h, arr[i]); } return /* () */0; } -function mergeArray(h, arr) { - mergeArrayDone(h, arr); - return h; +function isEmpty(h) { + return +(h.size === 0); } -var create = Bs_internalBucketsType.create0; +var make = Bs_internalBucketsType.create0; var clear = Bs_internalBucketsType.clear0; @@ -217,13 +206,12 @@ var toArray = Bs_internalSetBuckets.toArray0; var getBucketHistogram = Bs_internalSetBuckets.getBucketHistogram; -exports.create = create; +exports.make = make; exports.clear = clear; -exports.addDone = addDone; +exports.isEmpty = isEmpty; exports.add = add; exports.copy = copy; exports.has = has; -exports.removeDone = removeDone; exports.remove = remove; exports.forEach = forEach; exports.reduce = reduce; @@ -231,7 +219,6 @@ exports.size = size; exports.logStats = logStats; exports.toArray = toArray; exports.ofArray = ofArray; -exports.mergeArrayDone = mergeArrayDone; -exports.mergeArray = mergeArray; +exports.mergeMany = mergeMany; exports.getBucketHistogram = getBucketHistogram; /* No side effect */ diff --git a/lib/js/bs_HashSetString.js b/lib/js/bs_HashSetString.js index 7da9d3c0720..94295b7130b 100644 --- a/lib/js/bs_HashSetString.js +++ b/lib/js/bs_HashSetString.js @@ -50,7 +50,7 @@ function resize(h) { } } -function removeDone(h, key) { +function remove(h, key) { var h_buckets = h.buckets; var i = Caml_hash.caml_hash_final_mix(Caml_hash.caml_hash_mix_string(0, key)) & (h_buckets.length - 1 | 0); var l = h_buckets[i]; @@ -90,12 +90,7 @@ function removeDone(h, key) { } } -function remove(h, key) { - removeDone(h, key); - return h; -} - -function addDone(h, key) { +function add(h, key) { var h_buckets = h.buckets; var buckets_len = h_buckets.length; var i = Caml_hash.caml_hash_final_mix(Caml_hash.caml_hash_mix_string(0, key)) & (buckets_len - 1 | 0); @@ -143,11 +138,6 @@ function addDone(h, key) { } } -function add(h, key) { - addDone(h, key); - return h; -} - function has(h, key) { var h_buckets = h.buckets; var nid = Caml_hash.caml_hash_final_mix(Caml_hash.caml_hash_mix_string(0, key)) & (h_buckets.length - 1 | 0); @@ -183,25 +173,24 @@ function ofArray(arr) { var len = arr.length; var v = Bs_internalBucketsType.create0(len); for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ - addDone(v, arr[i]); + add(v, arr[i]); } return v; } -function mergeArrayDone(h, arr) { +function mergeMany(h, arr) { var len = arr.length; for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ - addDone(h, arr[i]); + add(h, arr[i]); } return /* () */0; } -function mergeArray(h, arr) { - mergeArrayDone(h, arr); - return h; +function isEmpty(h) { + return +(h.size === 0); } -var create = Bs_internalBucketsType.create0; +var make = Bs_internalBucketsType.create0; var clear = Bs_internalBucketsType.clear0; @@ -217,13 +206,12 @@ var toArray = Bs_internalSetBuckets.toArray0; var getBucketHistogram = Bs_internalSetBuckets.getBucketHistogram; -exports.create = create; +exports.make = make; exports.clear = clear; -exports.addDone = addDone; +exports.isEmpty = isEmpty; exports.add = add; exports.copy = copy; exports.has = has; -exports.removeDone = removeDone; exports.remove = remove; exports.forEach = forEach; exports.reduce = reduce; @@ -231,7 +219,6 @@ exports.size = size; exports.logStats = logStats; exports.toArray = toArray; exports.ofArray = ofArray; -exports.mergeArrayDone = mergeArrayDone; -exports.mergeArray = mergeArray; +exports.mergeMany = mergeMany; exports.getBucketHistogram = getBucketHistogram; /* No side effect */ From 6f922ddff59c7c58091be45d48e85b153a0f0388 Mon Sep 17 00:00:00 2001 From: Hongbo Zhang Date: Fri, 26 Jan 2018 11:24:38 +0800 Subject: [PATCH 02/17] address comments --- jscomp/others/bs_Queue.ml | 60 +++++-- jscomp/others/bs_Queue.mli | 54 +++--- jscomp/test/.depend | 2 +- jscomp/test/bs_queue_test.js | 316 ++++++++++++++++++++--------------- jscomp/test/bs_queue_test.ml | 124 ++++++++------ jscomp/test/bs_stack_test.js | 12 +- jscomp/test/bs_stack_test.ml | 12 +- lib/js/bs_Queue.js | 76 ++++++--- 8 files changed, 392 insertions(+), 264 deletions(-) diff --git a/jscomp/others/bs_Queue.ml b/jscomp/others/bs_Queue.ml index 88333092b64..2cb54b417f2 100644 --- a/jscomp/others/bs_Queue.ml +++ b/jscomp/others/bs_Queue.ml @@ -30,7 +30,7 @@ and 'a t = { let null = Js.null let return = Js.Null.return -let create () = +let make () = t ~length: 0 ~first:null @@ -42,11 +42,10 @@ let clear q = firstSet q null; lastSet q null -let addDone q x = +let add q x = let cell = return @@ node ~content:x - ~next:null - in + ~next:null in match Js.nullToOption (last q )with | None -> lengthSet q 1; @@ -57,17 +56,17 @@ let addDone q x = nextSet last cell; lastSet q cell -let add q x = addDone q x; q + let peek q = match Js.nullToOption (first q ) with | None -> None | Some v -> Some (content v) -let peekNull q = +let peekUndefined q = match Js.nullToOption (first q ) with - | None -> null - | Some v -> return (content v) + | None -> Js.undefined + | Some v -> Js.Undefined.return (content v) let peekExn q = @@ -107,27 +106,26 @@ let popExn q = content x end -let popNull q = +let popUndefined q = match Js.nullToOption (first q ) with - | None -> null + | None -> Js.undefined | Some x -> let next = next x in if Js.Null.test next then begin (* only one element*) clear q; - return (content x) + Js.Undefined.return (content x) end else begin lengthSet q (length q - 1); firstSet q next; - return (content x) + Js.Undefined.return (content x) end let rec copyAux qRes prev cell = match Js.nullToOption cell with | None -> lastSet qRes prev; qRes | Some x -> - (* Cons { content; next } *) let content = content x in let res = return @@ node ~content ~next:null in begin match Js.nullToOption prev with @@ -137,25 +135,43 @@ let rec copyAux qRes prev cell = copyAux qRes res (next x) let copy q = - copyAux (t ~length:(length q) ~first:null ~last:null) null (first q) + + +let rec copyMapAux qRes prev cell f = + match Js.nullToOption cell with + | None -> lastSet qRes prev; qRes + | Some x -> + let content = f (content x) [@bs] in + let res = return @@ node ~content ~next:null in + begin match Js.nullToOption prev with (*TODO: optimize to remove such check*) + | None -> firstSet qRes res + | Some p -> nextSet p res + end; + copyMapAux qRes res (next x) f + +let map q f = + copyMapAux (t ~length:(length q) ~first:null ~last:null) null (first q) f + + let isEmpty q = length q = 0 -let length q = +let size q = length q -let rec iterAux f cell = +let rec iterAux cell f = match Js.nullToOption cell with | None -> () | Some x -> f (content x) [@bs]; - iterAux f (next x) + iterAux (next x) f let forEach q f = - iterAux f (first q) + iterAux (first q) f + let rec foldAux f accu cell = match Js.nullToOption cell with | None -> accu @@ -191,3 +207,11 @@ let toArray x = let v = A.makeUninitializedUnsafe (length x) in fillAux 0 v (first x); v + +(*TODO: optimzie *) +let ofArray arr = + let q = make () in + for i = 0 to A.length arr - 1 do + add q (A.getUnsafe arr i) + done ; + q diff --git a/jscomp/others/bs_Queue.mli b/jscomp/others/bs_Queue.mli index efe7a36ab9a..4ad04137281 100644 --- a/jscomp/others/bs_Queue.mli +++ b/jscomp/others/bs_Queue.mli @@ -21,57 +21,59 @@ type 'a t (** The type of queues containing elements of type ['a]. *) -val clear : 'a t -> unit -(** Discard all elements from a queue. *) - -val create : unit -> 'a t +val make: unit -> 'a t (** Return a new queue, initially empty. *) -val addDone : 'a t -> 'a -> unit -(** [addDone q x] adds the element [x] at the end of the queue [q]. *) -val add : 'a t -> 'a -> 'a t +val clear: 'a t -> unit +(** Discard all elements from a queue. *) + +val isEmpty: 'a t -> bool +(** Return [true] if the given queue is empty, [false] otherwise. *) +val ofArray: 'a array -> 'a t +(** [ofArray a] is equivalent to [Array.forEach a (Queue.add q a)] *) +val add: 'a t -> 'a -> unit +(** [add q x] adds the element [x] at the end of the queue [q]. *) -val peek : 'a t -> 'a option +val peek: 'a t -> 'a option (** [peekOpt q] returns the first element in queue [q], without removing it from the queue. *) -val peekNull : 'a t -> 'a Js.null -(** [peekNull q] returns the first element in queue [q], without removing - it from the queue. *) -val peekExn : 'a t -> 'a +val peekUndefined: 'a t -> 'a Js.undefined +(** [peekUndefined q] returns [undefined] if not found *) +val peekExn: 'a t -> 'a -val pop : 'a t -> 'a option +val pop: 'a t -> 'a option (** [pop q] removes and returns the first element in queue [q].*) -val popNull : 'a t -> 'a Js.null -(** [popNull q] removes and returns the first element in queue [q].*) +val popUndefined: 'a t -> 'a Js.undefined +(** [popUndefined q] removes and returns the first element in queue [q]. + it will return undefined if it is already empty +*) -val popExn : 'a t -> 'a +val popExn: 'a t -> 'a -val copy : 'a t -> 'a t -(** Return a copy of the given queue. *) +val copy: 'a t -> 'a t -val isEmpty : 'a t -> bool -(** Return [true] if the given queue is empty, [false] otherwise. *) -val length : 'a t -> int +val size: 'a t -> int (** Return the number of elements in a queue. *) -val forEach : 'a t -> ('a -> unit [@bs]) -> unit +val map: 'a t -> ('a -> 'b [@bs]) -> 'b t +val forEach: 'a t -> ('a -> unit [@bs]) -> unit (** [reduce f q] applies [f] in turn to all elements of [q], from the least recently entered to the most recently entered. The queue itself is unchanged. *) -val reduce : 'a t -> 'b -> ('b -> 'a -> 'b [@bs]) -> 'b +val reduce: 'a t -> 'b -> ('b -> 'a -> 'b [@bs]) -> 'b (** [reduce q accu f] is equivalent to [List.reduce f accu l], where [l] is the list of [q]'s elements. The queue remains unchanged. *) -val transfer : 'a t -> 'a t -> unit +val transfer: 'a t -> 'a t -> unit (** [transfer q1 q2] adds all of [q1]'s elements at the end of the queue [q2], then clears [q1]. It is equivalent to the - sequence [iter (fun x -> add x q2) q1; clear q1], but runs + sequence [forEach (fun x -> add x q2) q1; clear q1], but runs in constant time. *) -val toArray : 'a t -> 'a array +val toArray: 'a t -> 'a array (** First added will be in the beginning of the array *) diff --git a/jscomp/test/.depend b/jscomp/test/.depend index 027a8059f93..98ddf249402 100644 --- a/jscomp/test/.depend +++ b/jscomp/test/.depend @@ -115,7 +115,7 @@ bs_poly_mutable_set_test.cmj : mt.cmj ../runtime/js.cmj ../others/bs.cmj \ bs_poly_set_test.cmj : mt.cmj ../runtime/js.cmj ../others/bs.cmj \ array_data_util.cmj bs_qualified.cmj : ../runtime/js.cmj -bs_queue_test.cmj : ../runtime/js.cmj ../others/bs.cmj +bs_queue_test.cmj : mt.cmj ../runtime/js.cmj ../others/bs.cmj bs_rbset_int_bench.cmj : rbset.cmj bs_rest_test.cmj : bs_set_bench.cmj : ../others/bs.cmj diff --git a/jscomp/test/bs_queue_test.js b/jscomp/test/bs_queue_test.js index 299a2f57ad9..47140477d0a 100644 --- a/jscomp/test/bs_queue_test.js +++ b/jscomp/test/bs_queue_test.js @@ -1,11 +1,24 @@ 'use strict'; +var Mt = require("./mt.js"); var Curry = require("../../lib/js/curry.js"); var Bs_Array = require("../../lib/js/bs_Array.js"); var Bs_Queue = require("../../lib/js/bs_Queue.js"); var Caml_obj = require("../../lib/js/caml_obj.js"); var Caml_builtin_exceptions = require("../../lib/js/caml_builtin_exceptions.js"); +var suites = [/* [] */0]; + +var test_id = [0]; + +function eq(loc, x, y) { + return Mt.eq_suites(test_id, suites, loc, x, y); +} + +function b(loc, x) { + return Mt.bool_suites(test_id, suites, loc, x); +} + function does_raise(f, q) { try { Curry._1(f, q); @@ -16,31 +29,36 @@ function does_raise(f, q) { } } -var q = Bs_Queue.create(/* () */0); +function $plus$plus(q, x) { + Bs_Queue.add(q, x); + return q; +} + +var q = Bs_Queue.make(/* () */0); if (!(Caml_obj.caml_equal(Bs_Queue.toArray(q), /* int array */[]) && q.length === 0)) { throw [ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 16, + 21, 2 ] ]; } -if (!(Caml_obj.caml_equal(Bs_Queue.toArray(Bs_Queue.add(q, 1)), /* int array */[1]) && q.length === 1)) { +if (!(Caml_obj.caml_equal(Bs_Queue.toArray((Bs_Queue.add(q, 1), q)), /* int array */[1]) && q.length === 1)) { throw [ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 17, + 22, 2 ] ]; } -if (!(Caml_obj.caml_equal(Bs_Queue.toArray(Bs_Queue.add(q, 2)), /* int array */[ +if (!(Caml_obj.caml_equal(Bs_Queue.toArray((Bs_Queue.add(q, 2), q)), /* int array */[ 1, 2 ]) && q.length === 2)) { @@ -48,13 +66,13 @@ if (!(Caml_obj.caml_equal(Bs_Queue.toArray(Bs_Queue.add(q, 2)), /* int array */[ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 18, + 23, 2 ] ]; } -if (!(Caml_obj.caml_equal(Bs_Queue.toArray(Bs_Queue.add(q, 3)), /* int array */[ +if (!(Caml_obj.caml_equal(Bs_Queue.toArray((Bs_Queue.add(q, 3), q)), /* int array */[ 1, 2, 3 @@ -63,13 +81,13 @@ if (!(Caml_obj.caml_equal(Bs_Queue.toArray(Bs_Queue.add(q, 3)), /* int array */[ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 19, + 24, 2 ] ]; } -if (!(Caml_obj.caml_equal(Bs_Queue.toArray(Bs_Queue.add(q, 4)), /* int array */[ +if (!(Caml_obj.caml_equal(Bs_Queue.toArray((Bs_Queue.add(q, 4), q)), /* int array */[ 1, 2, 3, @@ -79,7 +97,7 @@ if (!(Caml_obj.caml_equal(Bs_Queue.toArray(Bs_Queue.add(q, 4)), /* int array */[ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 20, + 25, 2 ] ]; @@ -90,7 +108,7 @@ if (Bs_Queue.popExn(q) !== 1) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 21, + 26, 2 ] ]; @@ -105,7 +123,7 @@ if (!(Caml_obj.caml_equal(Bs_Queue.toArray(q), /* int array */[ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 21, + 26, 27 ] ]; @@ -116,7 +134,7 @@ if (Bs_Queue.popExn(q) !== 2) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 22, + 27, 2 ] ]; @@ -130,7 +148,7 @@ if (!(Caml_obj.caml_equal(Bs_Queue.toArray(q), /* int array */[ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 22, + 27, 27 ] ]; @@ -141,7 +159,7 @@ if (Bs_Queue.popExn(q) !== 3) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 23, + 28, 2 ] ]; @@ -152,7 +170,7 @@ if (!(Caml_obj.caml_equal(Bs_Queue.toArray(q), /* int array */[4]) && q.length = Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 23, + 28, 27 ] ]; @@ -163,7 +181,7 @@ if (Bs_Queue.popExn(q) !== 4) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 24, + 29, 2 ] ]; @@ -174,7 +192,7 @@ if (!(Caml_obj.caml_equal(Bs_Queue.toArray(q), /* int array */[]) && q.length == Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 24, + 29, 27 ] ]; @@ -185,20 +203,20 @@ if (!does_raise(Bs_Queue.popExn, q)) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 25, + 30, 2 ] ]; } -var q$1 = Bs_Queue.create(/* () */0); +var q$1 = Bs_Queue.make(/* () */0); -if (Bs_Queue.popExn(Bs_Queue.add(q$1, 1)) !== 1) { +if (Bs_Queue.popExn((Bs_Queue.add(q$1, 1), q$1)) !== 1) { throw [ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 30, + 35, 2 ] ]; @@ -209,18 +227,18 @@ if (!does_raise(Bs_Queue.popExn, q$1)) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 30, + 35, 34 ] ]; } -if (Bs_Queue.popExn(Bs_Queue.add(q$1, 2)) !== 2) { +if (Bs_Queue.popExn((Bs_Queue.add(q$1, 2), q$1)) !== 2) { throw [ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 31, + 36, 2 ] ]; @@ -231,7 +249,7 @@ if (!does_raise(Bs_Queue.popExn, q$1)) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 31, + 36, 34 ] ]; @@ -242,42 +260,42 @@ if (q$1.length !== 0) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 32, + 37, 2 ] ]; } -var q$2 = Bs_Queue.create(/* () */0); +var q$2 = Bs_Queue.make(/* () */0); -if (Bs_Queue.peekExn(Bs_Queue.add(q$2, 1)) !== 1) { +if (Bs_Queue.peekExn((Bs_Queue.add(q$2, 1), q$2)) !== 1) { throw [ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 37, + 42, 2 ] ]; } -if (Bs_Queue.peekExn(Bs_Queue.add(q$2, 2)) !== 1) { +if (Bs_Queue.peekExn((Bs_Queue.add(q$2, 2), q$2)) !== 1) { throw [ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 38, + 43, 2 ] ]; } -if (Bs_Queue.peekExn(Bs_Queue.add(q$2, 3)) !== 1) { +if (Bs_Queue.peekExn((Bs_Queue.add(q$2, 3), q$2)) !== 1) { throw [ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 39, + 44, 2 ] ]; @@ -288,7 +306,7 @@ if (Bs_Queue.peekExn(q$2) !== 1) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 40, + 45, 2 ] ]; @@ -299,7 +317,7 @@ if (Bs_Queue.popExn(q$2) !== 1) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 40, + 45, 28 ] ]; @@ -310,7 +328,7 @@ if (Bs_Queue.peekExn(q$2) !== 2) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 41, + 46, 2 ] ]; @@ -321,7 +339,7 @@ if (Bs_Queue.popExn(q$2) !== 2) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 41, + 46, 28 ] ]; @@ -332,7 +350,7 @@ if (Bs_Queue.peekExn(q$2) !== 3) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 42, + 47, 2 ] ]; @@ -343,7 +361,7 @@ if (Bs_Queue.popExn(q$2) !== 3) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 42, + 47, 28 ] ]; @@ -354,7 +372,7 @@ if (!does_raise(Bs_Queue.peekExn, q$2)) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 43, + 48, 2 ] ]; @@ -365,16 +383,16 @@ if (!does_raise(Bs_Queue.peekExn, q$2)) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 44, + 49, 2 ] ]; } -var q$3 = Bs_Queue.create(/* () */0); +var q$3 = Bs_Queue.make(/* () */0); for(var i = 1; i <= 10; ++i){ - Bs_Queue.addDone(q$3, i); + Bs_Queue.add(q$3, i); } Bs_Queue.clear(q$3); @@ -384,7 +402,7 @@ if (q$3.length !== 0) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 51, + 56, 2 ] ]; @@ -395,40 +413,40 @@ if (!does_raise(Bs_Queue.popExn, q$3)) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 52, + 57, 2 ] ]; } -if (!Caml_obj.caml_equal(q$3, Bs_Queue.create(/* () */0))) { +if (!Caml_obj.caml_equal(q$3, Bs_Queue.make(/* () */0))) { throw [ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 53, + 58, 2 ] ]; } -Bs_Queue.addDone(q$3, 42); +Bs_Queue.add(q$3, 42); if (Bs_Queue.popExn(q$3) !== 42) { throw [ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 55, + 60, 2 ] ]; } -var q1 = Bs_Queue.create(/* () */0); +var q1 = Bs_Queue.make(/* () */0); for(var i$1 = 1; i$1 <= 10; ++i$1){ - Bs_Queue.addDone(q1, i$1); + Bs_Queue.add(q1, i$1); } var q2 = Bs_Queue.copy(q1); @@ -449,7 +467,7 @@ if (!Caml_obj.caml_equal(Bs_Queue.toArray(q1), /* array */[ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 62, + 67, 2 ] ]; @@ -471,7 +489,7 @@ if (!Caml_obj.caml_equal(Bs_Queue.toArray(q2), /* array */[ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 63, + 68, 2 ] ]; @@ -482,7 +500,7 @@ if (q1.length !== 10) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 64, + 69, 2 ] ]; @@ -493,7 +511,7 @@ if (q2.length !== 10) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 65, + 70, 2 ] ]; @@ -505,7 +523,7 @@ for(var i$2 = 1; i$2 <= 10; ++i$2){ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 67, + 72, 4 ] ]; @@ -519,7 +537,7 @@ for(var i$3 = 1; i$3 <= 10; ++i$3){ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 70, + 75, 4 ] ]; @@ -527,27 +545,27 @@ for(var i$3 = 1; i$3 <= 10; ++i$3){ } -var q$4 = Bs_Queue.create(/* () */0); +var q$4 = Bs_Queue.make(/* () */0); if (q$4.length !== 0) { throw [ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 76, + 81, 2 ] ]; } for(var i$4 = 1; i$4 <= 10; ++i$4){ - Bs_Queue.addDone(q$4, i$4); + Bs_Queue.add(q$4, i$4); if (q$4.length !== i$4) { throw [ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 79, + 84, 4 ] ]; @@ -557,7 +575,7 @@ for(var i$4 = 1; i$4 <= 10; ++i$4){ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 80, + 85, 4 ] ]; @@ -571,7 +589,7 @@ for(var i$5 = 10; i$5 >= 1; --i$5){ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 83, + 88, 4 ] ]; @@ -581,7 +599,7 @@ for(var i$5 = 10; i$5 >= 1; --i$5){ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 84, + 89, 4 ] ]; @@ -594,7 +612,7 @@ if (q$4.length !== 0) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 87, + 92, 2 ] ]; @@ -605,16 +623,16 @@ if (q$4.length !== 0) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 88, + 93, 2 ] ]; } -var q$5 = Bs_Queue.create(/* () */0); +var q$5 = Bs_Queue.make(/* () */0); for(var i$6 = 1; i$6 <= 10; ++i$6){ - Bs_Queue.addDone(q$5, i$6); + Bs_Queue.add(q$5, i$6); } var i$7 = [1]; @@ -625,7 +643,7 @@ Bs_Queue.forEach(q$5, (function (j) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 95, + 100, 29 ] ]; @@ -634,16 +652,16 @@ Bs_Queue.forEach(q$5, (function (j) { return /* () */0; })); -var q1$1 = Bs_Queue.create(/* () */0); +var q1$1 = Bs_Queue.make(/* () */0); -var q2$1 = Bs_Queue.create(/* () */0); +var q2$1 = Bs_Queue.make(/* () */0); if (q1$1.length !== 0) { throw [ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 100, + 105, 2 ] ]; @@ -654,8 +672,8 @@ if (!Caml_obj.caml_equal(Bs_Queue.toArray(q1$1), /* array */[])) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 100, - 28 + 105, + 26 ] ]; } @@ -665,7 +683,7 @@ if (q2$1.length !== 0) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 101, + 106, 2 ] ]; @@ -676,8 +694,8 @@ if (!Caml_obj.caml_equal(Bs_Queue.toArray(q2$1), /* array */[])) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 101, - 28 + 106, + 26 ] ]; } @@ -689,7 +707,7 @@ if (q1$1.length !== 0) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 103, + 108, 2 ] ]; @@ -700,8 +718,8 @@ if (!Caml_obj.caml_equal(Bs_Queue.toArray(q1$1), /* array */[])) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 103, - 28 + 108, + 26 ] ]; } @@ -711,7 +729,7 @@ if (q2$1.length !== 0) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 104, + 109, 2 ] ]; @@ -722,18 +740,18 @@ if (!Caml_obj.caml_equal(Bs_Queue.toArray(q2$1), /* array */[])) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 104, - 28 + 109, + 26 ] ]; } -var q1$2 = Bs_Queue.create(/* () */0); +var q1$2 = Bs_Queue.make(/* () */0); -var q2$2 = Bs_Queue.create(/* () */0); +var q2$2 = Bs_Queue.make(/* () */0); for(var i$8 = 1; i$8 <= 4; ++i$8){ - Bs_Queue.addDone(q1$2, i$8); + Bs_Queue.add(q1$2, i$8); } if (q1$2.length !== 4) { @@ -741,7 +759,7 @@ if (q1$2.length !== 4) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 110, + 115, 2 ] ]; @@ -757,8 +775,8 @@ if (!Caml_obj.caml_equal(Bs_Queue.toArray(q1$2), /* int array */[ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 110, - 28 + 115, + 26 ] ]; } @@ -768,7 +786,7 @@ if (q2$2.length !== 0) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 111, + 116, 2 ] ]; @@ -779,8 +797,8 @@ if (!Caml_obj.caml_equal(Bs_Queue.toArray(q2$2), /* int array */[])) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 111, - 28 + 116, + 26 ] ]; } @@ -792,7 +810,7 @@ if (q1$2.length !== 0) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 113, + 118, 2 ] ]; @@ -803,8 +821,8 @@ if (!Caml_obj.caml_equal(Bs_Queue.toArray(q1$2), /* int array */[])) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 113, - 28 + 118, + 26 ] ]; } @@ -814,7 +832,7 @@ if (q2$2.length !== 4) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 114, + 119, 2 ] ]; @@ -830,18 +848,18 @@ if (!Caml_obj.caml_equal(Bs_Queue.toArray(q2$2), /* int array */[ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 114, - 28 + 119, + 26 ] ]; } -var q1$3 = Bs_Queue.create(/* () */0); +var q1$3 = Bs_Queue.make(/* () */0); -var q2$3 = Bs_Queue.create(/* () */0); +var q2$3 = Bs_Queue.make(/* () */0); for(var i$9 = 5; i$9 <= 8; ++i$9){ - Bs_Queue.addDone(q2$3, i$9); + Bs_Queue.add(q2$3, i$9); } if (q1$3.length !== 0) { @@ -849,7 +867,7 @@ if (q1$3.length !== 0) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 120, + 125, 2 ] ]; @@ -860,8 +878,8 @@ if (!Caml_obj.caml_equal(Bs_Queue.toArray(q1$3), /* int array */[])) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 120, - 28 + 125, + 26 ] ]; } @@ -871,7 +889,7 @@ if (q2$3.length !== 4) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 121, + 126, 2 ] ]; @@ -887,8 +905,8 @@ if (!Caml_obj.caml_equal(Bs_Queue.toArray(q2$3), /* int array */[ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 121, - 28 + 126, + 26 ] ]; } @@ -900,7 +918,7 @@ if (q1$3.length !== 0) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 123, + 128, 2 ] ]; @@ -911,8 +929,8 @@ if (!Caml_obj.caml_equal(Bs_Queue.toArray(q1$3), /* int array */[])) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 123, - 28 + 128, + 26 ] ]; } @@ -922,7 +940,7 @@ if (q2$3.length !== 4) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 124, + 129, 2 ] ]; @@ -938,22 +956,22 @@ if (!Caml_obj.caml_equal(Bs_Queue.toArray(q2$3), /* int array */[ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 124, - 28 + 129, + 26 ] ]; } -var q1$4 = Bs_Queue.create(/* () */0); +var q1$4 = Bs_Queue.make(/* () */0); -var q2$4 = Bs_Queue.create(/* () */0); +var q2$4 = Bs_Queue.make(/* () */0); for(var i$10 = 1; i$10 <= 4; ++i$10){ - Bs_Queue.addDone(q1$4, i$10); + Bs_Queue.add(q1$4, i$10); } for(var i$11 = 5; i$11 <= 8; ++i$11){ - Bs_Queue.addDone(q2$4, i$11); + Bs_Queue.add(q2$4, i$11); } if (q1$4.length !== 4) { @@ -961,7 +979,7 @@ if (q1$4.length !== 4) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 131, + 136, 2 ] ]; @@ -977,8 +995,8 @@ if (!Caml_obj.caml_equal(Bs_Queue.toArray(q1$4), /* int array */[ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 131, - 28 + 136, + 26 ] ]; } @@ -988,7 +1006,7 @@ if (q2$4.length !== 4) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 132, + 137, 2 ] ]; @@ -1004,8 +1022,8 @@ if (!Caml_obj.caml_equal(Bs_Queue.toArray(q2$4), /* int array */[ Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 132, - 28 + 137, + 26 ] ]; } @@ -1017,7 +1035,7 @@ if (q1$4.length !== 0) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 134, + 139, 2 ] ]; @@ -1028,8 +1046,8 @@ if (!Caml_obj.caml_equal(Bs_Queue.toArray(q1$4), /* int array */[])) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 134, - 28 + 139, + 26 ] ]; } @@ -1050,7 +1068,7 @@ if (q2$4.length !== 8) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 136, + 141, 2 ] ]; @@ -1061,8 +1079,8 @@ if (!Caml_obj.caml_equal(Bs_Queue.toArray(q2$4), v)) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 136, - 28 + 141, + 26 ] ]; } @@ -1076,7 +1094,7 @@ if (Bs_Queue.reduce(q2$4, 0, (function (x, y) { Caml_builtin_exceptions.assert_failure, [ "bs_queue_test.ml", - 138, + 143, 2 ] ]; @@ -1084,10 +1102,42 @@ if (Bs_Queue.reduce(q2$4, 0, (function (x, y) { console.log("OK"); -var Q = 0; +var q$6 = Bs_Queue.ofArray(/* int array */[ + 1, + 2, + 3, + 4 + ]); + +var q1$5 = Bs_Queue.map(q$6, (function (x) { + return x - 1 | 0; + })); -var $plus$plus = Bs_Queue.add; +eq("File \"bs_queue_test.ml\", line 154, characters 5-12", Bs_Queue.toArray(q1$5), /* int array */[ + 0, + 1, + 2, + 3 + ]); + +var q$7 = Bs_Queue.ofArray(/* array */[]); + +b("File \"bs_queue_test.ml\", line 155, characters 4-11", +(q$7.length === 0)); + +var q$8 = Bs_Queue.map(Bs_Queue.ofArray(/* int array */[]), (function (x) { + return x + 1 | 0; + })); + +b("File \"bs_queue_test.ml\", line 156, characters 4-11", +(q$8.length === 0)); + +Mt.from_pair_suites("bs_queue_test.ml", suites[0]); + +var Q = 0; +exports.suites = suites; +exports.test_id = test_id; +exports.eq = eq; +exports.b = b; exports.Q = Q; exports.does_raise = does_raise; exports.$plus$plus = $plus$plus; diff --git a/jscomp/test/bs_queue_test.ml b/jscomp/test/bs_queue_test.ml index 2ffbd17a30d..742a0f59752 100644 --- a/jscomp/test/bs_queue_test.ml +++ b/jscomp/test/bs_queue_test.ml @@ -1,3 +1,8 @@ +let suites : Mt.pair_suites ref = ref [] +let test_id = ref 0 +let eq loc x y = Mt.eq_suites ~test_id ~suites loc x y + +let b loc x = Mt.bool_suites ~test_id ~suites loc x (* TEST *) @@ -9,31 +14,31 @@ let does_raise f q = false with _ -> true -let (++) = Q.add +let (++) q x = Q.add q x ; q let () = - let q = Q.create () in - assert (Q.toArray q = [| |] && Q.length q = 0); - assert (Q.toArray (q ++ 1) = [|1 |] && Q.length q = 1); - assert (Q.toArray (q ++ 2) = [|1; 2 |] && Q.length q = 2); - assert (Q.toArray (q ++ 3) = [|1; 2; 3 |] && Q.length q = 3); - assert (Q.toArray (q ++ 4) = [|1; 2; 3; 4|] && Q.length q = 4); - assert (Q.popExn q = 1); assert (Q.toArray q = [| 2; 3; 4|] && Q.length q = 3); - assert (Q.popExn q = 2); assert (Q.toArray q = [| 3; 4|] && Q.length q = 2); - assert (Q.popExn q = 3); assert (Q.toArray q = [| 4|] && Q.length q = 1); - assert (Q.popExn q = 4); assert (Q.toArray q = [| |] && Q.length q = 0); + let q = Q.make () in + assert (Q.toArray q = [| |] && Q.size q = 0); + assert (Q.toArray (q ++ 1) = [|1 |] && Q.size q = 1); + assert (Q.toArray (q ++ 2) = [|1; 2 |] && Q.size q = 2); + assert (Q.toArray (q ++ 3) = [|1; 2; 3 |] && Q.size q = 3); + assert (Q.toArray (q ++ 4) = [|1; 2; 3; 4|] && Q.size q = 4); + assert (Q.popExn q = 1); assert (Q.toArray q = [| 2; 3; 4|] && Q.size q = 3); + assert (Q.popExn q = 2); assert (Q.toArray q = [| 3; 4|] && Q.size q = 2); + assert (Q.popExn q = 3); assert (Q.toArray q = [| 4|] && Q.size q = 1); + assert (Q.popExn q = 4); assert (Q.toArray q = [| |] && Q.size q = 0); assert (does_raise Q.popExn q); ;; let () = - let q = Q.create () in + let q = Q.make () in assert (Q.popExn (q ++ 1) = 1); assert (does_raise Q.popExn q); assert (Q.popExn (q ++ 2) = 2); assert (does_raise Q.popExn q); - assert (Q.length q = 0); + assert (Q.size q = 0); ;; let () = - let q = Q.create () in + let q = Q.make () in assert (Q.peekExn (q ++ 1) = 1); assert (Q.peekExn (q ++ 2) = 1); assert (Q.peekExn (q ++ 3) = 1); @@ -45,24 +50,24 @@ let () = ;; let () = - let q = Q.create () in - for i = 1 to 10 do Q.addDone q i done; + let q = Q.make () in + for i = 1 to 10 do Q.add q i done; Q.clear q; - assert (Q.length q = 0); + assert (Q.size q = 0); assert (does_raise Q.popExn q); - assert (q = Q.create ()); - Q.addDone q 42; + assert (q = Q.make ()); + Q.add q 42; assert (Q.popExn q = 42); ;; let () = - let q1 = Q.create () in - for i = 1 to 10 do Q.addDone q1 i done; + let q1 = Q.make () in + for i = 1 to 10 do Q.add q1 i done; let q2 = Q.copy q1 in assert (Q.toArray q1 = [|1; 2; 3; 4; 5; 6; 7; 8; 9; 10|]); assert (Q.toArray q2 = [|1; 2; 3; 4; 5; 6; 7; 8; 9; 10|]); - assert (Q.length q1 = 10); - assert (Q.length q2 = 10); + assert (Q.size q1 = 10); + assert (Q.size q2 = 10); for i = 1 to 10 do assert (Q.popExn q1 = i); done; @@ -72,68 +77,68 @@ let () = ;; let () = - let q = Q.create () in + let q = Q.make () in assert (Q.isEmpty q); for i = 1 to 10 do - Q.addDone q i; - assert (Q.length q = i); + Q.add q i; + assert (Q.size q = i); assert (not (Q.isEmpty q)); done; for i = 10 downto 1 do - assert (Q.length q = i); + assert (Q.size q = i); assert (not (Q.isEmpty q)); ignore (Q.popExn q : int); done; - assert (Q.length q = 0); + assert (Q.size q = 0); assert (Q.isEmpty q); ;; let () = - let q = Q.create () in - for i = 1 to 10 do Q.addDone q i done; + let q = Q.make () in + for i = 1 to 10 do Q.add q i done; let i = ref 1 in Q.forEach q (fun[@bs] j -> assert (!i = j); incr i); ;; let () = - let q1 = Q.create () and q2 = Q.create () in - assert (Q.length q1 = 0); assert (Q.toArray q1 = [||]); - assert (Q.length q2 = 0); assert (Q.toArray q2 = [||]); + let q1 = Q.make () and q2 = Q.make () in + assert (Q.size q1 = 0); assert (Q.toArray q1 = [||]); + assert (Q.size q2 = 0); assert (Q.toArray q2 = [||]); Q.transfer q1 q2; - assert (Q.length q1 = 0); assert (Q.toArray q1 = [||]); - assert (Q.length q2 = 0); assert (Q.toArray q2 = [||]); + assert (Q.size q1 = 0); assert (Q.toArray q1 = [||]); + assert (Q.size q2 = 0); assert (Q.toArray q2 = [||]); ;; let () = - let q1 = Q.create () and q2 = Q.create () in - for i = 1 to 4 do Q.addDone q1 i done; - assert (Q.length q1 = 4); assert (Q.toArray q1 = [|1; 2; 3; 4|]); - assert (Q.length q2 = 0); assert (Q.toArray q2 = [| |]); + let q1 = Q.make () and q2 = Q.make () in + for i = 1 to 4 do Q.add q1 i done; + assert (Q.size q1 = 4); assert (Q.toArray q1 = [|1; 2; 3; 4|]); + assert (Q.size q2 = 0); assert (Q.toArray q2 = [| |]); Q.transfer q1 q2; - assert (Q.length q1 = 0); assert (Q.toArray q1 = [| |]); - assert (Q.length q2 = 4); assert (Q.toArray q2 = [|1; 2; 3; 4|]); + assert (Q.size q1 = 0); assert (Q.toArray q1 = [| |]); + assert (Q.size q2 = 4); assert (Q.toArray q2 = [|1; 2; 3; 4|]); ;; let () = - let q1 = Q.create () and q2 = Q.create () in - for i = 5 to 8 do Q.addDone q2 i done; - assert (Q.length q1 = 0); assert (Q.toArray q1 = [| |]); - assert (Q.length q2 = 4); assert (Q.toArray q2 = [|5; 6; 7; 8|]); + let q1 = Q.make () and q2 = Q.make () in + for i = 5 to 8 do Q.add q2 i done; + assert (Q.size q1 = 0); assert (Q.toArray q1 = [| |]); + assert (Q.size q2 = 4); assert (Q.toArray q2 = [|5; 6; 7; 8|]); Q.transfer q1 q2; - assert (Q.length q1 = 0); assert (Q.toArray q1 = [| |]); - assert (Q.length q2 = 4); assert (Q.toArray q2 = [|5; 6; 7; 8|]); + assert (Q.size q1 = 0); assert (Q.toArray q1 = [| |]); + assert (Q.size q2 = 4); assert (Q.toArray q2 = [|5; 6; 7; 8|]); ;; let () = - let q1 = Q.create () and q2 = Q.create () in - for i = 1 to 4 do Q.addDone q1 i done; - for i = 5 to 8 do Q.addDone q2 i done; - assert (Q.length q1 = 4); assert (Q.toArray q1 = [|1; 2; 3; 4|]); - assert (Q.length q2 = 4); assert (Q.toArray q2 = [|5; 6; 7; 8|]); + let q1 = Q.make () and q2 = Q.make () in + for i = 1 to 4 do Q.add q1 i done; + for i = 5 to 8 do Q.add q2 i done; + assert (Q.size q1 = 4); assert (Q.toArray q1 = [|1; 2; 3; 4|]); + assert (Q.size q2 = 4); assert (Q.toArray q2 = [|5; 6; 7; 8|]); Q.transfer q1 q2; - assert (Q.length q1 = 0); assert (Q.toArray q1 = [| |]); + assert (Q.size q1 = 0); assert (Q.toArray q1 = [| |]); let v = [|5; 6; 7; 8; 1; 2; 3; 4|] in - assert (Q.length q2 = 8); assert (Q.toArray q2 = v ); + assert (Q.size q2 = 8); assert (Q.toArray q2 = v ); assert (Q.reduce q2 0 (fun[@bs] x y -> x - y ) = Bs.Array.reduce v 0 (fun [@bs] x y -> x - y) ) @@ -141,4 +146,13 @@ let () = ;; -let () = Js.log "OK" \ No newline at end of file +let () = Js.log "OK" + +let () = + let q = Q.ofArray [|1;2;3;4|] in + let q1 = Q.map q (fun[@bs] x -> x - 1 ) in + eq __LOC__ (Q.toArray q1 ) [|0;1;2;3|]; + b __LOC__ (Q.isEmpty (Q.ofArray [||])); + b __LOC__ ( Q.isEmpty (Q.map ( (Q.ofArray [||])) (fun[@bs] x -> x + 1))) + +;; Mt.from_pair_suites __FILE__ !suites \ No newline at end of file diff --git a/jscomp/test/bs_stack_test.js b/jscomp/test/bs_stack_test.js index 6b3feba62c0..4c5dd26676b 100644 --- a/jscomp/test/bs_stack_test.js +++ b/jscomp/test/bs_stack_test.js @@ -9,7 +9,7 @@ function inOrder(v) { var s = { root: null }; - var q = Bs_Queue.create(/* () */0); + var q = Bs_Queue.make(/* () */0); while(current !== null) { var v$1 = current; Bs_Stack.push(s, v$1); @@ -18,7 +18,7 @@ function inOrder(v) { while(s.root !== null) { current = Bs_Stack.popNull(s); var v$2 = current; - Bs_Queue.addDone(q, v$2.value); + Bs_Queue.add(q, v$2.value); current = v$2.right; while(current !== null) { var v$3 = current; @@ -34,14 +34,14 @@ function inOrder3(v) { var s = { root: null }; - var q = Bs_Queue.create(/* () */0); + var q = Bs_Queue.make(/* () */0); while(current !== null) { var v$1 = current; Bs_Stack.push(s, v$1); current = v$1.left; }; Bs_Stack.dynamicPopIter(s, (function (popped) { - Bs_Queue.addDone(q, popped.value); + Bs_Queue.add(q, popped.value); var current = popped.right; while(current !== null) { var v = current; @@ -59,7 +59,7 @@ function inOrder2(v) { var s = { root: null }; - var q = Bs_Queue.create(/* () */0); + var q = Bs_Queue.make(/* () */0); while(todo) { if (cursor !== null) { var v$1 = cursor; @@ -68,7 +68,7 @@ function inOrder2(v) { } else if (s.root !== null) { cursor = Bs_Stack.popNull(s); var current = cursor; - Bs_Queue.addDone(q, current.value); + Bs_Queue.add(q, current.value); cursor = current.right; } else { todo = /* false */0; diff --git a/jscomp/test/bs_stack_test.ml b/jscomp/test/bs_stack_test.ml index 24895f96148..bc75f6230b7 100644 --- a/jscomp/test/bs_stack_test.ml +++ b/jscomp/test/bs_stack_test.ml @@ -16,7 +16,7 @@ module Q = Bs.Queue let inOrder (v : t) = let current = ref v in let s : node S.t = S.create () in - let q : int Q.t = Q.create () in + let q : int Q.t = Q.make () in while !current != Js.null do let v = Js.Null.getUnsafe !current in S.push s v; @@ -25,7 +25,7 @@ let inOrder (v : t) = while not (S.isEmpty s ) do current := S.popNull s ; let v = Js.Null.getUnsafe !current in - Q.addDone q (value v); + Q.add q (value v); current := right v ; while !current != Js.null do let v = Js.Null.getUnsafe !current in @@ -38,14 +38,14 @@ let inOrder (v : t) = let inOrder3 (v : t) = let current = ref v in let s : node S.t = S.create () in - let q : int Q.t = Q.create () in + let q : int Q.t = Q.make () in while !current != Js.null do let v = Js.Null.getUnsafe !current in S.push s v; current := left v; done ; S.dynamicPopIter s begin fun [@bs] popped -> - Q.addDone q (value popped); + Q.add q (value popped); let current = ref (right popped) in while !current != Js.null do let v = Js.Null.getUnsafe !current in @@ -59,7 +59,7 @@ let inOrder2 (v : t) = let todo = ref true in let cursor = ref v in let s : node S.t = S.create () in - let q : int Q.t = Q.create () in + let q : int Q.t = Q.make () in while !todo do if !cursor != Js.null then ( @@ -71,7 +71,7 @@ let inOrder2 (v : t) = if not (S.isEmpty s) then (cursor := S.popNull s ; let current = Js.Null.getUnsafe !cursor in - Q.addDone q (value current); + Q.add q (value current); cursor := right current) else todo := false diff --git a/lib/js/bs_Queue.js b/lib/js/bs_Queue.js index a0d17e2c075..90ea9129dc9 100644 --- a/lib/js/bs_Queue.js +++ b/lib/js/bs_Queue.js @@ -3,7 +3,7 @@ var $$null = null; -function create() { +function make() { return { length: 0, first: $$null, @@ -18,7 +18,7 @@ function clear(q) { return /* () */0; } -function addDone(q, x) { +function add(q, x) { var cell = { content: x, next: $$null @@ -37,11 +37,6 @@ function addDone(q, x) { } } -function add(q, x) { - addDone(q, x); - return q; -} - function peek(q) { var match = q.first; if (match !== null) { @@ -51,12 +46,12 @@ function peek(q) { } } -function peekNull(q) { +function peekUndefined(q) { var match = q.first; if (match !== null) { return match.content; } else { - return $$null; + return undefined; } } @@ -103,7 +98,7 @@ function popExn(q) { } } -function popNull(q) { +function popUndefined(q) { var match = q.first; if (match !== null) { var next = match.next; @@ -116,7 +111,7 @@ function popNull(q) { return match.content; } } else { - return $$null; + return undefined; } } @@ -153,17 +148,51 @@ function copy(q) { }; } +function map(q, f) { + var qRes = { + length: q.length, + first: $$null, + last: $$null + }; + var _prev = $$null; + var _cell = q.first; + var f$1 = f; + while(true) { + var cell = _cell; + var prev = _prev; + if (cell !== null) { + var content = f$1(cell.content); + var res = { + content: content, + next: $$null + }; + if (prev !== null) { + prev.next = res; + } else { + qRes.first = res; + } + _cell = cell.next; + _prev = res; + continue ; + + } else { + qRes.last = prev; + return qRes; + } + }; +} + function isEmpty(q) { return +(q.length === 0); } -function length(q) { +function size(q) { return q.length; } function forEach(q, f) { - var f$1 = f; var _cell = q.first; + var f$1 = f; while(true) { var cell = _cell; if (cell !== null) { @@ -237,19 +266,28 @@ function toArray(x) { return v; } +function ofArray(arr) { + var q = make(/* () */0); + for(var i = 0 ,i_finish = arr.length - 1 | 0; i <= i_finish; ++i){ + add(q, arr[i]); + } + return q; +} + +exports.make = make; exports.clear = clear; -exports.create = create; -exports.addDone = addDone; +exports.isEmpty = isEmpty; +exports.ofArray = ofArray; exports.add = add; exports.peek = peek; -exports.peekNull = peekNull; +exports.peekUndefined = peekUndefined; exports.peekExn = peekExn; exports.pop = pop; -exports.popNull = popNull; +exports.popUndefined = popUndefined; exports.popExn = popExn; exports.copy = copy; -exports.isEmpty = isEmpty; -exports.length = length; +exports.size = size; +exports.map = map; exports.forEach = forEach; exports.reduce = reduce; exports.transfer = transfer; From 9387d386441c87f1abd6b64dc5e0d9fc91e629f9 Mon Sep 17 00:00:00 2001 From: Hongbo Zhang Date: Fri, 26 Jan 2018 13:58:12 +0800 Subject: [PATCH 03/17] address comments --- jscomp/others/.depend | 3 +- jscomp/others/bs_Map.ml | 4 +- jscomp/others/bs_Map.mli | 2 +- jscomp/others/bs_MapInt.ml | 2 +- jscomp/others/bs_MapInt.mli | 5 +- jscomp/others/bs_MapIntM.ml | 2 +- jscomp/others/bs_MapIntM.mli | 2 +- jscomp/others/bs_MapM.ml | 4 +- jscomp/others/bs_MapM.mli | 2 +- jscomp/others/bs_MapString.ml | 2 +- jscomp/others/bs_MapString.mli | 5 +- jscomp/others/bs_MapStringM.ml | 2 +- jscomp/others/bs_MapStringM.mli | 2 +- jscomp/others/bs_Range.ml | 38 +++++++++++-- jscomp/others/bs_Range.mli | 34 ++++++++++++ jscomp/others/bs_Set.ml | 2 +- jscomp/others/bs_Set.mli | 2 +- jscomp/others/bs_SetInt.ml | 2 +- jscomp/others/bs_SetInt.mli | 4 +- jscomp/others/bs_SetIntM.ml | 6 +- jscomp/others/bs_SetIntM.mli | 2 +- jscomp/others/bs_SetM.ml | 33 +++++++++-- jscomp/others/bs_SetM.mli | 2 +- jscomp/others/bs_SetString.ml | 2 +- jscomp/others/bs_SetString.mli | 4 +- jscomp/others/bs_SetStringM.ml | 6 +- jscomp/others/bs_SetStringM.mli | 2 +- jscomp/others/bs_Sort.ml | 18 ++---- jscomp/others/bs_Sort.mli | 22 +++----- jscomp/others/bs_SortInt.ml | 32 ++++++----- jscomp/others/bs_SortInt.mli | 72 ++++++++++++++++-------- jscomp/others/bs_SortString.ml | 32 ++++++----- jscomp/others/bs_SortString.mli | 74 +++++++++++++++++-------- jscomp/others/bs_internalAVLset.ml | 4 +- jscomp/others/bs_internalAVLset.mli | 2 +- jscomp/others/bs_internalAVLtree.ml | 4 +- jscomp/others/bs_internalAVLtree.mli | 2 +- jscomp/others/map.cppo.ml | 2 +- jscomp/others/map.cppo.mli | 4 +- jscomp/others/mapm.cppo.ml | 2 +- jscomp/others/mapm.cppo.mli | 2 +- jscomp/others/set.cppo.ml | 2 +- jscomp/others/set.cppo.mli | 2 +- jscomp/others/setm.cppo.ml | 6 +- jscomp/others/setm.cppo.mli | 2 +- jscomp/others/sort.cppo.ml | 34 ++++++------ jscomp/others/sort.cppo.mli | 71 ++++++++++++++++-------- jscomp/test/bs_hashmap_test.js | 2 +- jscomp/test/bs_hashmap_test.ml | 2 +- jscomp/test/bs_hashset_int_test.js | 4 +- jscomp/test/bs_hashset_int_test.ml | 4 +- jscomp/test/bs_list_test.ml | 2 +- jscomp/test/bs_map_int_test.js | 6 +- jscomp/test/bs_map_int_test.ml | 6 +- jscomp/test/bs_mutable_set_test.js | 4 +- jscomp/test/bs_mutable_set_test.ml | 6 +- jscomp/test/bs_poly_mutable_set_test.js | 2 +- jscomp/test/bs_poly_mutable_set_test.ml | 4 +- jscomp/test/bs_poly_set_test.js | 2 +- jscomp/test/bs_poly_set_test.ml | 2 +- jscomp/test/bs_set_int_test.js | 4 +- jscomp/test/bs_set_int_test.ml | 4 +- jscomp/test/bs_sort_test.js | 52 ++++++++--------- jscomp/test/bs_sort_test.ml | 40 ++++++------- lib/js/bs_Map.js | 6 +- lib/js/bs_MapInt.js | 4 +- lib/js/bs_MapIntM.js | 6 +- lib/js/bs_MapM.js | 6 +- lib/js/bs_MapString.js | 4 +- lib/js/bs_MapStringM.js | 6 +- lib/js/bs_Range.js | 8 +++ lib/js/bs_Set.js | 6 +- lib/js/bs_SetInt.js | 4 +- lib/js/bs_SetIntM.js | 8 +-- lib/js/bs_SetM.js | 10 ++-- lib/js/bs_SetString.js | 4 +- lib/js/bs_SetStringM.js | 8 +-- lib/js/bs_Sort.js | 19 ++++--- lib/js/bs_SortInt.js | 13 ++++- lib/js/bs_SortString.js | 13 ++++- lib/js/bs_internalAVLset.js | 6 +- lib/js/bs_internalAVLtree.js | 6 +- 82 files changed, 520 insertions(+), 328 deletions(-) create mode 100644 jscomp/others/bs_Range.mli diff --git a/jscomp/others/.depend b/jscomp/others/.depend index 34a361ae449..9e4bb8e249f 100644 --- a/jscomp/others/.depend +++ b/jscomp/others/.depend @@ -27,7 +27,7 @@ bs_Hash.cmj : bs_Hash.cmi bs_Queue.cmj : bs_Array.cmj bs_Queue.cmi bs_List.cmj : bs_Array.cmj bs_List.cmi bs_Sort.cmj : bs_Array.cmj bs_Sort.cmi -bs_Range.cmj : +bs_Range.cmj : bs_Range.cmi bs_internalBucketsType.cmj : bs_Array.cmj bs_internalBucketsType.cmi bs_internalSetBuckets.cmj : bs_internalBucketsType.cmj bs_Array.cmj bs.cmj \ bs_internalSetBuckets.cmi @@ -108,6 +108,7 @@ bs_Hash.cmi : bs_Queue.cmi : bs_List.cmi : bs_Sort.cmi : +bs_Range.cmi : bs_internalBucketsType.cmi : bs_internalSetBuckets.cmi : bs_internalBucketsType.cmi bs_internalBuckets.cmi : bs_internalBucketsType.cmi diff --git a/jscomp/others/bs_Map.ml b/jscomp/others/bs_Map.ml index 0890c02d052..202f21c5a2e 100644 --- a/jscomp/others/bs_Map.ml +++ b/jscomp/others/bs_Map.ml @@ -350,8 +350,8 @@ let has (type k) (type id) (map : (k,_,id) t) x = let module X = (val B.dict map) in N.mem0 ~cmp:X.cmp (B.data map) x -let checkInvariant m = - N.checkInvariant (B.data m) +let checkInvariantInternal m = + N.checkInvariantInternal (B.data m) let empty0 = N.empty0 let ofArray0 = N.ofArray0 let isEmpty0 = N.isEmpty0 diff --git a/jscomp/others/bs_Map.mli b/jscomp/others/bs_Map.mli index df499aced75..455085ee6f0 100644 --- a/jscomp/others/bs_Map.mli +++ b/jscomp/others/bs_Map.mli @@ -96,7 +96,7 @@ val getNull: ('k, 'a, 'id) t -> 'k -> 'a Js.null val getWithDefault: ('k, 'a, 'id) t -> 'k -> 'a -> 'a val getExn: ('k, 'a, 'id) t -> 'k -> 'a -val checkInvariant: _ t -> bool +val checkInvariantInternal: _ t -> bool (****************************************************************************) val remove: ('k, 'a, 'id) t -> 'k -> ('k, 'a, 'id) t diff --git a/jscomp/others/bs_MapInt.ml b/jscomp/others/bs_MapInt.ml index 6deb23e26b9..681877d0b13 100644 --- a/jscomp/others/bs_MapInt.ml +++ b/jscomp/others/bs_MapInt.ml @@ -34,7 +34,7 @@ let toList = N.toList0 let toArray = N.toArray0 let keysToArray = N.keysToArray0 let valuesToArray = N.valuesToArray0 -let checkInvariant = N.checkInvariant +let checkInvariantInternal = N.checkInvariantInternal let rec set t (newK : key) (newD : _) = match N.toOpt t with diff --git a/jscomp/others/bs_MapInt.mli b/jscomp/others/bs_MapInt.mli index e0481ce4e08..1b1b0145115 100644 --- a/jscomp/others/bs_MapInt.mli +++ b/jscomp/others/bs_MapInt.mli @@ -6,7 +6,6 @@ type 'a t val empty: 'a t val isEmpty: 'a t -> bool - val has: 'a t -> key -> bool val cmp: 'a t -> 'a t -> ('a -> 'a -> int [@bs]) -> int @@ -55,7 +54,7 @@ val get: 'a t -> key -> 'a option val getNull: 'a t -> key -> 'a Js.null val getWithDefault: 'a t -> key -> 'a -> 'a val getExn: 'a t -> key -> 'a -val checkInvariant: _ t -> bool +val checkInvariantInternal: _ t -> bool (****************************************************************************) val remove: 'a t -> key -> 'a t @@ -122,4 +121,4 @@ val map: 'a t -> ('a -> 'b [@bs]) -> 'b t val mapWithKey: 'a t -> (key -> 'a -> 'b [@bs]) -> 'b t -val checkInvariant: _ t -> bool +val checkInvariantInternal: _ t -> bool diff --git a/jscomp/others/bs_MapIntM.ml b/jscomp/others/bs_MapIntM.ml index d4ef9c30781..686dcaddb31 100644 --- a/jscomp/others/bs_MapIntM.ml +++ b/jscomp/others/bs_MapIntM.ml @@ -45,7 +45,7 @@ let toList d = N.toList0 (data d) let toArray d = N.toArray0 (data d) let keysToArray d = N.keysToArray0 (data d) let valuesToArray d = N.valuesToArray0 (data d) -let checkInvariant d = N.checkInvariant (data d) +let checkInvariantInternal d = N.checkInvariantInternal (data d) let has d v = I.mem (data d) v diff --git a/jscomp/others/bs_MapIntM.mli b/jscomp/others/bs_MapIntM.mli index 4a85b0474d8..5621d7b6230 100644 --- a/jscomp/others/bs_MapIntM.mli +++ b/jscomp/others/bs_MapIntM.mli @@ -86,7 +86,7 @@ val get: 'a t -> key -> 'a option val getNull: 'a t -> key -> 'a Js.null val getWithDefault: 'a t -> key -> 'a -> 'a val getExn: 'a t -> key -> 'a -val checkInvariant: _ t -> bool +val checkInvariantInternal: _ t -> bool (****************************************************************************) diff --git a/jscomp/others/bs_MapM.ml b/jscomp/others/bs_MapM.ml index 63dddc3cf5c..360bc43db42 100644 --- a/jscomp/others/bs_MapM.ml +++ b/jscomp/others/bs_MapM.ml @@ -170,8 +170,8 @@ let valuesToArray d = N.valuesToArray0 (B.data d) let ofSortedArrayUnsafe ~dict xs : _ t = B.bag ~data:(N.ofSortedArrayUnsafe0 xs) ~dict -let checkInvariant d = - N.checkInvariant (B.data d) +let checkInvariantInternal d = + N.checkInvariantInternal (B.data d) let cmp (type k) (type id) (m1 : (k,'v,id) t) (m2 : (k,'v,id) t) cmp = let dict, m1_data, m2_data = B.(dict m1, data m1, data m2) in let module X = (val dict) in diff --git a/jscomp/others/bs_MapM.mli b/jscomp/others/bs_MapM.mli index e4daedfb78a..5cae2bceba0 100644 --- a/jscomp/others/bs_MapM.mli +++ b/jscomp/others/bs_MapM.mli @@ -86,7 +86,7 @@ val getNull: ('k, 'a, 'id) t -> 'k -> 'a Js.null val getWithDefault: ('k, 'a, 'id) t -> 'k -> 'a -> 'a val getExn: ('k, 'a, 'id) t -> 'k -> 'a -val checkInvariant: _ t -> bool +val checkInvariantInternal: _ t -> bool (****************************************************************************) (*TODO: add functional [merge, partition, keepBy, split]*) diff --git a/jscomp/others/bs_MapString.ml b/jscomp/others/bs_MapString.ml index 77f12e4e955..e468d703c1d 100644 --- a/jscomp/others/bs_MapString.ml +++ b/jscomp/others/bs_MapString.ml @@ -34,7 +34,7 @@ let toList = N.toList0 let toArray = N.toArray0 let keysToArray = N.keysToArray0 let valuesToArray = N.valuesToArray0 -let checkInvariant = N.checkInvariant +let checkInvariantInternal = N.checkInvariantInternal let rec set t (newK : key) (newD : _) = match N.toOpt t with diff --git a/jscomp/others/bs_MapString.mli b/jscomp/others/bs_MapString.mli index c6735410b66..76b0c4b80f5 100644 --- a/jscomp/others/bs_MapString.mli +++ b/jscomp/others/bs_MapString.mli @@ -6,7 +6,6 @@ type 'a t val empty: 'a t val isEmpty: 'a t -> bool - val has: 'a t -> key -> bool val cmp: 'a t -> 'a t -> ('a -> 'a -> int [@bs]) -> int @@ -55,7 +54,7 @@ val get: 'a t -> key -> 'a option val getNull: 'a t -> key -> 'a Js.null val getWithDefault: 'a t -> key -> 'a -> 'a val getExn: 'a t -> key -> 'a -val checkInvariant: _ t -> bool +val checkInvariantInternal: _ t -> bool (****************************************************************************) val remove: 'a t -> key -> 'a t @@ -122,4 +121,4 @@ val map: 'a t -> ('a -> 'b [@bs]) -> 'b t val mapWithKey: 'a t -> (key -> 'a -> 'b [@bs]) -> 'b t -val checkInvariant: _ t -> bool +val checkInvariantInternal: _ t -> bool diff --git a/jscomp/others/bs_MapStringM.ml b/jscomp/others/bs_MapStringM.ml index fd056ee9dac..2afde6b329c 100644 --- a/jscomp/others/bs_MapStringM.ml +++ b/jscomp/others/bs_MapStringM.ml @@ -45,7 +45,7 @@ let toList d = N.toList0 (data d) let toArray d = N.toArray0 (data d) let keysToArray d = N.keysToArray0 (data d) let valuesToArray d = N.valuesToArray0 (data d) -let checkInvariant d = N.checkInvariant (data d) +let checkInvariantInternal d = N.checkInvariantInternal (data d) let has d v = I.mem (data d) v diff --git a/jscomp/others/bs_MapStringM.mli b/jscomp/others/bs_MapStringM.mli index fb0a6a6c4a2..69371824c1a 100644 --- a/jscomp/others/bs_MapStringM.mli +++ b/jscomp/others/bs_MapStringM.mli @@ -86,7 +86,7 @@ val get: 'a t -> key -> 'a option val getNull: 'a t -> key -> 'a Js.null val getWithDefault: 'a t -> key -> 'a -> 'a val getExn: 'a t -> key -> 'a -val checkInvariant: _ t -> bool +val checkInvariantInternal: _ t -> bool (****************************************************************************) diff --git a/jscomp/others/bs_Range.ml b/jscomp/others/bs_Range.ml index 402139e833b..a7c871591ab 100644 --- a/jscomp/others/bs_Range.ml +++ b/jscomp/others/bs_Range.ml @@ -1,5 +1,35 @@ +(* Copyright (C) 2017 Authors of BuckleScript + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * In addition to the permissions granted to you by the LGPL, you may combine + * or link a "work that uses the Library" with a publicly distributed version + * of this file to produce a combined library or application, then distribute + * that combined work under the terms of your choosing, with no requirement + * to comply with the obligations normally placed on you by section 4 of the + * LGPL version 3 (or the corresponding section of a later version of the LGPL + * should you choose to use a later version). + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) + + +let forEach s f action = + for i = s to f do + (action i [@bs] : unit) + done + let rec every s f p = if s > f then true else @@ -7,11 +37,11 @@ let rec every s f p = (every (s + 1) f p ) -let rec everyBy s f step p = +let rec everyBy s f ~step p = if s > f then true else p s [@bs] && - (everyBy (s + step) f step p ) + (everyBy (s + step) f ~step p ) @@ -22,9 +52,9 @@ let rec some s f p = (some (s + 1) f p ) -let rec someBy s f step p = +let rec someBy s f ~step p = if s > f then false else p s [@bs] || - (someBy (s + step) f step p ) + (someBy (s + step) f ~step p ) diff --git a/jscomp/others/bs_Range.mli b/jscomp/others/bs_Range.mli new file mode 100644 index 00000000000..95256b9c50b --- /dev/null +++ b/jscomp/others/bs_Range.mli @@ -0,0 +1,34 @@ + +(* Copyright (C) 2017 Authors of BuckleScript + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * In addition to the permissions granted to you by the LGPL, you may combine + * or link a "work that uses the Library" with a publicly distributed version + * of this file to produce a combined library or application, then distribute + * that combined work under the terms of your choosing, with no requirement + * to comply with the obligations normally placed on you by section 4 of the + * LGPL version 3 (or the corresponding section of a later version of the LGPL + * should you choose to use a later version). + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) + +val forEach: int -> int -> (int -> unit [@bs]) -> unit + +val every: int -> int -> (int -> bool [@bs]) -> bool + +val everyBy: int -> int -> step:int -> (int -> bool [@bs]) -> bool + +val some: int -> int -> (int -> bool [@bs]) -> bool + +val someBy: int -> int -> step:int -> (int -> bool [@bs]) -> bool diff --git a/jscomp/others/bs_Set.ml b/jscomp/others/bs_Set.ml index 639880dd820..6b2c32688b4 100644 --- a/jscomp/others/bs_Set.ml +++ b/jscomp/others/bs_Set.ml @@ -347,7 +347,7 @@ let partition0 = N.partitionShared0 let getData = B.data let getDict = B.dict let packDictData = B.bag -let checkInvariant d = N.checkInvariant (B.data d) +let checkInvariantInternal d = N.checkInvariantInternal (B.data d) diff --git a/jscomp/others/bs_Set.mli b/jscomp/others/bs_Set.mli index 79e27d90c42..ccb410c1fdf 100644 --- a/jscomp/others/bs_Set.mli +++ b/jscomp/others/bs_Set.mli @@ -96,7 +96,7 @@ val getExn: ('elt, 'id) t -> 'elt -> 'elt val split: ('elt, 'id) t -> 'elt -> (('elt, 'id) t * ('elt, 'id) t) * bool -val checkInvariant: _ t -> bool +val checkInvariantInternal: _ t -> bool (****************************************************************************) (** Below are operations only when better performance needed, diff --git a/jscomp/others/bs_SetInt.ml b/jscomp/others/bs_SetInt.ml index ceac3d668ff..89c07c1900f 100644 --- a/jscomp/others/bs_SetInt.ml +++ b/jscomp/others/bs_SetInt.ml @@ -25,7 +25,7 @@ let size = N.length0 let toList = N.toList0 let toArray = N.toArray0 let ofSortedArrayUnsafe = N.ofSortedArrayUnsafe0 -let checkInvariant = N.checkInvariant +let checkInvariantInternal = N.checkInvariantInternal let rec add (t : t) (x : elt) : t = match N.toOpt t with diff --git a/jscomp/others/bs_SetInt.mli b/jscomp/others/bs_SetInt.mli index ebfff60f44b..76aad5a2f00 100644 --- a/jscomp/others/bs_SetInt.mli +++ b/jscomp/others/bs_SetInt.mli @@ -33,6 +33,8 @@ type t (** The type of sets. *) val empty: t + + val ofArray: elt array -> t val ofSortedArrayUnsafe: elt array -> t val isEmpty: t -> bool @@ -112,4 +114,4 @@ val split: t -> elt -> (t * t) * bool -val checkInvariant: t -> bool +val checkInvariantInternal: t -> bool diff --git a/jscomp/others/bs_SetIntM.ml b/jscomp/others/bs_SetIntM.ml index 6d1bbebbc47..2dfd4bc7a8a 100644 --- a/jscomp/others/bs_SetIntM.ml +++ b/jscomp/others/bs_SetIntM.ml @@ -98,8 +98,8 @@ let toArray d = N.toArray0 (data d) let ofSortedArrayUnsafe xs = t ~data:(N.ofSortedArrayUnsafe0 xs) -let checkInvariant d = - N.checkInvariant (data d) +let checkInvariantInternal d = + N.checkInvariantInternal (data d) let add d k = let old_data = data d in @@ -272,7 +272,7 @@ let intersect dataa datab = then empty () else let tmp2 = A.makeUninitializedUnsafe (min sizea sizeb) in - let k = S.inter tmp 0 sizea tmp sizea sizeb tmp2 0 in + let k = S.intersect tmp 0 sizea tmp sizea sizeb tmp2 0 in t ~data:(N.ofSortedArrayAux tmp2 0 k) let diff dataa datab : t = diff --git a/jscomp/others/bs_SetIntM.mli b/jscomp/others/bs_SetIntM.mli index c099b66e4c3..e9ea8fe74e3 100644 --- a/jscomp/others/bs_SetIntM.mli +++ b/jscomp/others/bs_SetIntM.mli @@ -96,6 +96,6 @@ val split: t -> elt -> (t * t) * bool [split s key] return a fresh copy of each *) -val checkInvariant: t -> bool +val checkInvariantInternal: t -> bool diff --git a/jscomp/others/bs_SetM.ml b/jscomp/others/bs_SetM.ml index cd864682fc0..8b47c8350d6 100644 --- a/jscomp/others/bs_SetM.ml +++ b/jscomp/others/bs_SetM.ml @@ -1,4 +1,29 @@ +(* Copyright (C) 2017 Authors of BuckleScript + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * In addition to the permissions granted to you by the LGPL, you may combine + * or link a "work that uses the Library" with a publicly distributed version + * of this file to produce a combined library or application, then distribute + * that combined work under the terms of your choosing, with no requirement + * to comply with the obligations normally placed on you by section 4 of the + * LGPL version 3 (or the corresponding section of a later version of the LGPL + * should you choose to use a later version). + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) + + module N = Bs_internalAVLset module B = Bs_BagM module A = Bs_Array @@ -147,7 +172,7 @@ let split (type elt) (type id) (d : (elt,id) t) key = let dict, s = B.dict d, B.data d in let module M = (val dict ) in let arr = N.toArray0 s in - let i = S.binarySearch arr key (Bs_Cmp.getCmp M.cmp) in + let i = S.binarySearchBy arr key (Bs_Cmp.getCmp M.cmp) in let len = A.length arr in if i < 0 then let next = - i -1 in @@ -206,8 +231,8 @@ let toArray d = N.toArray0 (B.data d) let ofSortedArrayUnsafe xs ~dict : _ t = B.bag ~data:(N.ofSortedArrayUnsafe0 xs) ~dict -let checkInvariant d = - N.checkInvariant (B.data d) +let checkInvariantInternal d = + N.checkInvariantInternal (B.data d) let cmp (type elt) (type id) (d0 : (elt,id) t) d1 = let module M = (val B.dict d0) in N.cmp0 ~cmp:M.cmp (B.data d0) (B.data d1) @@ -285,7 +310,7 @@ let intersect (type elt) (type id) (a : (elt,id) t) b : _ t = then empty dict else let tmp2 = A.makeUninitializedUnsafe (min sizea sizeb) in - let k = S.inter tmp 0 sizea tmp sizea sizeb tmp2 0 p in + let k = S.intersect tmp 0 sizea tmp sizea sizeb tmp2 0 p in B.bag ~data:(N.ofSortedArrayAux tmp2 0 k) ~dict let diff (type elt) (type id) (a : (elt,id) t) b : _ t = diff --git a/jscomp/others/bs_SetM.mli b/jscomp/others/bs_SetM.mli index 51f0ae4ff86..7db76d55eeb 100644 --- a/jscomp/others/bs_SetM.mli +++ b/jscomp/others/bs_SetM.mli @@ -108,7 +108,7 @@ val split: ('elt, 'id) t -> 'elt -> (('elt, 'id) t * ('elt, 'id) t) * bool [l,r] are freshly made, no sharing with [s] *) -val checkInvariant: _ t -> bool +val checkInvariantInternal: _ t -> bool (* [add0] was not exposed for various reasons: diff --git a/jscomp/others/bs_SetString.ml b/jscomp/others/bs_SetString.ml index 6f9f6f04c8d..a9585b66365 100644 --- a/jscomp/others/bs_SetString.ml +++ b/jscomp/others/bs_SetString.ml @@ -25,7 +25,7 @@ let size = N.length0 let toList = N.toList0 let toArray = N.toArray0 let ofSortedArrayUnsafe = N.ofSortedArrayUnsafe0 -let checkInvariant = N.checkInvariant +let checkInvariantInternal = N.checkInvariantInternal let rec add (t : t) (x : elt) : t = match N.toOpt t with diff --git a/jscomp/others/bs_SetString.mli b/jscomp/others/bs_SetString.mli index df439bd925d..fd81524ec8f 100644 --- a/jscomp/others/bs_SetString.mli +++ b/jscomp/others/bs_SetString.mli @@ -33,6 +33,8 @@ type t (** The type of sets. *) val empty: t + + val ofArray: elt array -> t val ofSortedArrayUnsafe: elt array -> t val isEmpty: t -> bool @@ -112,4 +114,4 @@ val split: t -> elt -> (t * t) * bool -val checkInvariant: t -> bool +val checkInvariantInternal: t -> bool diff --git a/jscomp/others/bs_SetStringM.ml b/jscomp/others/bs_SetStringM.ml index ab3539172c2..383f334ae6f 100644 --- a/jscomp/others/bs_SetStringM.ml +++ b/jscomp/others/bs_SetStringM.ml @@ -98,8 +98,8 @@ let toArray d = N.toArray0 (data d) let ofSortedArrayUnsafe xs = t ~data:(N.ofSortedArrayUnsafe0 xs) -let checkInvariant d = - N.checkInvariant (data d) +let checkInvariantInternal d = + N.checkInvariantInternal (data d) let add d k = let old_data = data d in @@ -272,7 +272,7 @@ let intersect dataa datab = then empty () else let tmp2 = A.makeUninitializedUnsafe (min sizea sizeb) in - let k = S.inter tmp 0 sizea tmp sizea sizeb tmp2 0 in + let k = S.intersect tmp 0 sizea tmp sizea sizeb tmp2 0 in t ~data:(N.ofSortedArrayAux tmp2 0 k) let diff dataa datab : t = diff --git a/jscomp/others/bs_SetStringM.mli b/jscomp/others/bs_SetStringM.mli index 4f758eb3dba..40e343e8aea 100644 --- a/jscomp/others/bs_SetStringM.mli +++ b/jscomp/others/bs_SetStringM.mli @@ -96,6 +96,6 @@ val split: t -> elt -> (t * t) * bool [split s key] return a fresh copy of each *) -val checkInvariant: t -> bool +val checkInvariantInternal: t -> bool diff --git a/jscomp/others/bs_Sort.ml b/jscomp/others/bs_Sort.ml index e7700375ba2..63184ab50fc 100644 --- a/jscomp/others/bs_Sort.ml +++ b/jscomp/others/bs_Sort.ml @@ -143,7 +143,7 @@ let union src src1ofs src1len src2 src2ofs src2len dst dstofs cmp = (A.getUnsafe src2 src2ofs) dstofs -let inter src src1ofs src1len src2 src2ofs src2len dst dstofs cmp = +let intersect src src1ofs src1len src2 src2ofs src2len dst dstofs cmp = let src1r = src1ofs + src1len in let src2r = src2ofs + src2len in let rec loop i1 s1 i2 s2 d = @@ -244,7 +244,7 @@ let rec sortTo src srcofs dst dstofs len cmp = -let stableSortBy a cmp = +let stableSortInPlaceBy a cmp = let l = A.length a in if l <= cutoff then insertionSort a 0 a 0 l cmp else begin @@ -256,16 +256,8 @@ let stableSortBy a cmp = merge a l2 l1 t 0 l2 a 0 cmp; end - - -external sortBy : - 'a array -> ('a -> 'a -> int [@bs]) -> unit = - "sort" [@@bs.send] - -let sortByCont xs cmp = - sortBy xs cmp ; - xs - +let stableSortBy a cmp = let b = A.copy a in stableSortInPlaceBy b cmp; b + (* [binarySearchAux arr lo hi key cmp] range [lo, hi] @@ -288,7 +280,7 @@ let rec binarySearchAux arr lo hi key cmp = else - (hi + 1) else binarySearchAux arr mid hi key cmp -let binarySearch sorted key cmp : int = +let binarySearchBy sorted key cmp : int = let len = A.length sorted in if len = 0 then -1 else diff --git a/jscomp/others/bs_Sort.mli b/jscomp/others/bs_Sort.mli index 2a311b3d8a6..2ac1be66c67 100644 --- a/jscomp/others/bs_Sort.mli +++ b/jscomp/others/bs_Sort.mli @@ -26,7 +26,7 @@ -val strictlySortedLength : +val strictlySortedLength: 'a array -> ('a -> 'a -> bool [@bs]) -> int @@ -36,7 +36,7 @@ val strictlySortedLength : [-n] means negative order *) -val isSorted : 'a array -> ('a -> 'a -> int [@bs]) -> bool +val isSorted: 'a array -> ('a -> 'a -> int [@bs]) -> bool (** [isSorted arr cmp] returns true if array is increeasingly sorted , equal is okay @@ -46,13 +46,11 @@ val isSorted : 'a array -> ('a -> 'a -> int [@bs]) -> bool ]} *) -val stableSortBy : 'a array -> ('a -> 'a -> int [@bs]) -> unit +val stableSortInPlaceBy: 'a array -> ('a -> 'a -> int [@bs]) -> unit -external sortBy : - 'a array -> ('a -> 'a -> int [@bs]) -> unit = - "sort" [@@bs.send] - -val union : +val stableSortBy: 'a array -> ('a -> 'a -> int [@bs]) -> 'a array + +val union: 'a array -> int -> int -> 'a array -> int -> int -> 'a array -> int -> ('a -> 'a -> int [@bs]) @@ -64,7 +62,7 @@ val union : also assume that [dst] is large enough to store all elements *) -val inter : +val intersect: 'a array -> int -> int -> 'a array -> int -> int -> 'a array -> int -> ('a -> 'a -> int [@bs]) @@ -73,17 +71,15 @@ val inter : return the [offset] in the output array *) -val diff : +val diff: 'a array -> int -> int -> 'a array -> int -> int -> 'a array -> int -> ('a -> 'a -> int [@bs]) -> int -val sortByCont : - 'a array -> ('a -> 'a -> int [@bs]) -> 'a array -val binarySearch: +val binarySearchBy: 'a array -> 'a -> ('a -> 'a -> int [@bs]) -> int (** diff --git a/jscomp/others/bs_SortInt.ml b/jscomp/others/bs_SortInt.ml index 279986bdd09..05ddac1e9ca 100644 --- a/jscomp/others/bs_SortInt.ml +++ b/jscomp/others/bs_SortInt.ml @@ -1,10 +1,10 @@ # 2 "sort.cppo.ml" -type elt = int +type element = int # 9 module A = Bs_Array -let rec sortedLengthAuxMore (xs : elt array) prec acc len = +let rec sortedLengthAuxMore (xs : element array) prec acc len = if acc >= len then acc else let v = A.getUnsafe xs acc in @@ -12,7 +12,7 @@ let rec sortedLengthAuxMore (xs : elt array) prec acc len = sortedLengthAuxMore xs v (acc + 1) len else acc -let rec sortedLengthAuxLess (xs : elt array) prec acc len = +let rec sortedLengthAuxLess (xs : element array) prec acc len = if acc >= len then acc else let v = A.getUnsafe xs acc in @@ -20,7 +20,7 @@ let rec sortedLengthAuxLess (xs : elt array) prec acc len = sortedLengthAuxLess xs v (acc + 1) len else acc -let strictlySortedLength (xs : elt array) = +let strictlySortedLength (xs : element array) = let len = A.length xs in match len with | 0 | 1 -> len @@ -33,11 +33,11 @@ let strictlySortedLength (xs : elt array) = - (sortedLengthAuxMore xs x1 2 len) else 1 -let rec isSortedAux (a : elt array) i last_bound = +let rec isSortedAux (a : element array) i last_bound = (* when [i = len - 1], it reaches the last element*) if i = last_bound then true else - if (A.getUnsafe a i) <= (A.getUnsafe a (i+1)) then + if A.getUnsafe a i <= A.getUnsafe a (i+1) then isSortedAux a (i + 1) last_bound else false @@ -50,7 +50,7 @@ let isSorted a = let cutoff = 5 -let merge (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = +let merge (src : element array) src1ofs src1len src2 src2ofs src2len dst dstofs = let src1r = src1ofs + src1len and src2r = src2ofs + src2len in let rec loop i1 s1 i2 s2 d = if s1 <= s2 then begin @@ -73,7 +73,7 @@ let merge (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = -let union (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = +let union (src : element array) src1ofs src1len src2 src2ofs src2len dst dstofs = let src1r = src1ofs + src1len in let src2r = src2ofs + src2len in let rec loop i1 s1 i2 s2 d = @@ -122,7 +122,7 @@ let union (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = src2ofs (A.getUnsafe src2 src2ofs) dstofs -let inter (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = +let intersect (src : element array) src1ofs src1len src2 src2ofs src2len dst dstofs = let src1r = src1ofs + src1len in let src2r = src2ofs + src2len in let rec loop i1 s1 i2 s2 d = @@ -158,7 +158,7 @@ let inter (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = src2ofs (A.getUnsafe src2 src2ofs) dstofs -let diff (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = +let diff (src : element array) src1ofs src1len src2 src2ofs src2len dst dstofs = let src1r = src1ofs + src1len in let src2r = src2ofs + src2len in let rec loop i1 s1 i2 s2 d = @@ -197,7 +197,7 @@ let diff (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = src2ofs (A.getUnsafe src2 src2ofs) dstofs -let insertionSort (src : elt array) srcofs dst dstofs len = +let insertionSort (src : element array) srcofs dst dstofs len = for i = 0 to len - 1 do let e = (A.getUnsafe src (srcofs + i)) in let j = ref (dstofs + i - 1) in @@ -208,7 +208,7 @@ let insertionSort (src : elt array) srcofs dst dstofs len = A.setUnsafe dst (!j + 1) e; done -let rec sortTo (src : elt array) srcofs dst dstofs len = +let rec sortTo (src : element array) srcofs dst dstofs len = if len <= cutoff then insertionSort src srcofs dst dstofs len else begin let l1 = len / 2 in @@ -218,7 +218,7 @@ let rec sortTo (src : elt array) srcofs dst dstofs len = merge src (srcofs + l2) l1 dst (dstofs + l1) l2 dst dstofs ; end -let stableSort (a : elt array) = +let stableSortInPlace (a : element array) = let l = A.length a in if l <= cutoff then insertionSort a 0 a 0 l else begin @@ -230,7 +230,9 @@ let stableSort (a : elt array) = merge a l2 l1 t 0 l2 a 0 ; end -let rec binarySearchAux (arr : elt array) lo hi key = +let stableSort a = let b = A.copy a in stableSortInPlace b; b + +let rec binarySearchAux (arr : element array) lo hi key = let mid = (lo + hi)/2 in let midVal = A.getUnsafe arr mid in @@ -247,7 +249,7 @@ let rec binarySearchAux (arr : elt array) lo hi key = else - (hi + 1) else binarySearchAux arr mid hi key -let binarySearch (sorted : elt array) key : int = +let binarySearch (sorted : element array) key : int = let len = A.length sorted in if len = 0 then -1 else diff --git a/jscomp/others/bs_SortInt.mli b/jscomp/others/bs_SortInt.mli index 4f7a9ba84cb..8a3feca8c4c 100644 --- a/jscomp/others/bs_SortInt.mli +++ b/jscomp/others/bs_SortInt.mli @@ -1,23 +1,51 @@ + # 2 "sort.cppo.mli" -type elt = int +(* Copyright (C) 2017 Authors of BuckleScript + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * In addition to the permissions granted to you by the LGPL, you may combine + * or link a "work that uses the Library" with a publicly distributed version + * of this file to produce a combined library or application, then distribute + * that combined work under the terms of your choosing, with no requirement + * to comply with the obligations normally placed on you by section 4 of the + * LGPL version 3 (or the corresponding section of a later version of the LGPL + * should you choose to use a later version). + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) + + -# 9 -val strictlySortedLength : - elt array -> - int +# 29 +type element = int + +# 36 +val strictlySortedLength: element array -> int (** [strictlySortedLenght xs] return [+n] means increasing order [-n] means negative order -*) +*) -val isSorted : elt array -> bool -(** strictly sorted *) -val stableSort : elt array -> unit +val isSorted: element array -> bool +(** [sorted xs] return true if [xs] is in non strict increasing order *) -val binarySearch : - elt array -> elt -> int +val stableSortInPlace: element array -> unit + +val stableSort: element array -> element array + +val binarySearch: element array -> element -> int (** If value is not found and value is less than one or more elements in array, @@ -33,10 +61,10 @@ val binarySearch : *) -val union : - elt array -> int -> int -> - elt array -> int -> int -> - elt array -> int +val union: + element array -> int -> int -> + element array -> int -> int -> + element array -> int -> int (** [union src src1ofs src1len src2 src2ofs src2len dst dstofs cmp] @@ -45,14 +73,14 @@ val union : also assume that [dst] is large enough to store all elements *) -val inter: - elt array -> int -> int -> - elt array -> int -> int -> - elt array -> int +val intersect: + element array -> int -> int -> + element array -> int -> int -> + element array -> int -> int val diff: - elt array -> int -> int -> - elt array -> int -> int -> - elt array -> int + element array -> int -> int -> + element array -> int -> int -> + element array -> int -> int diff --git a/jscomp/others/bs_SortString.ml b/jscomp/others/bs_SortString.ml index 446ec9d4e0c..d9117b28657 100644 --- a/jscomp/others/bs_SortString.ml +++ b/jscomp/others/bs_SortString.ml @@ -1,10 +1,10 @@ # 4 "sort.cppo.ml" -type elt = string +type element = string # 9 module A = Bs_Array -let rec sortedLengthAuxMore (xs : elt array) prec acc len = +let rec sortedLengthAuxMore (xs : element array) prec acc len = if acc >= len then acc else let v = A.getUnsafe xs acc in @@ -12,7 +12,7 @@ let rec sortedLengthAuxMore (xs : elt array) prec acc len = sortedLengthAuxMore xs v (acc + 1) len else acc -let rec sortedLengthAuxLess (xs : elt array) prec acc len = +let rec sortedLengthAuxLess (xs : element array) prec acc len = if acc >= len then acc else let v = A.getUnsafe xs acc in @@ -20,7 +20,7 @@ let rec sortedLengthAuxLess (xs : elt array) prec acc len = sortedLengthAuxLess xs v (acc + 1) len else acc -let strictlySortedLength (xs : elt array) = +let strictlySortedLength (xs : element array) = let len = A.length xs in match len with | 0 | 1 -> len @@ -33,11 +33,11 @@ let strictlySortedLength (xs : elt array) = - (sortedLengthAuxMore xs x1 2 len) else 1 -let rec isSortedAux (a : elt array) i last_bound = +let rec isSortedAux (a : element array) i last_bound = (* when [i = len - 1], it reaches the last element*) if i = last_bound then true else - if (A.getUnsafe a i) <= (A.getUnsafe a (i+1)) then + if A.getUnsafe a i <= A.getUnsafe a (i+1) then isSortedAux a (i + 1) last_bound else false @@ -50,7 +50,7 @@ let isSorted a = let cutoff = 5 -let merge (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = +let merge (src : element array) src1ofs src1len src2 src2ofs src2len dst dstofs = let src1r = src1ofs + src1len and src2r = src2ofs + src2len in let rec loop i1 s1 i2 s2 d = if s1 <= s2 then begin @@ -73,7 +73,7 @@ let merge (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = -let union (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = +let union (src : element array) src1ofs src1len src2 src2ofs src2len dst dstofs = let src1r = src1ofs + src1len in let src2r = src2ofs + src2len in let rec loop i1 s1 i2 s2 d = @@ -122,7 +122,7 @@ let union (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = src2ofs (A.getUnsafe src2 src2ofs) dstofs -let inter (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = +let intersect (src : element array) src1ofs src1len src2 src2ofs src2len dst dstofs = let src1r = src1ofs + src1len in let src2r = src2ofs + src2len in let rec loop i1 s1 i2 s2 d = @@ -158,7 +158,7 @@ let inter (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = src2ofs (A.getUnsafe src2 src2ofs) dstofs -let diff (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = +let diff (src : element array) src1ofs src1len src2 src2ofs src2len dst dstofs = let src1r = src1ofs + src1len in let src2r = src2ofs + src2len in let rec loop i1 s1 i2 s2 d = @@ -197,7 +197,7 @@ let diff (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = src2ofs (A.getUnsafe src2 src2ofs) dstofs -let insertionSort (src : elt array) srcofs dst dstofs len = +let insertionSort (src : element array) srcofs dst dstofs len = for i = 0 to len - 1 do let e = (A.getUnsafe src (srcofs + i)) in let j = ref (dstofs + i - 1) in @@ -208,7 +208,7 @@ let insertionSort (src : elt array) srcofs dst dstofs len = A.setUnsafe dst (!j + 1) e; done -let rec sortTo (src : elt array) srcofs dst dstofs len = +let rec sortTo (src : element array) srcofs dst dstofs len = if len <= cutoff then insertionSort src srcofs dst dstofs len else begin let l1 = len / 2 in @@ -218,7 +218,7 @@ let rec sortTo (src : elt array) srcofs dst dstofs len = merge src (srcofs + l2) l1 dst (dstofs + l1) l2 dst dstofs ; end -let stableSort (a : elt array) = +let stableSortInPlace (a : element array) = let l = A.length a in if l <= cutoff then insertionSort a 0 a 0 l else begin @@ -230,7 +230,9 @@ let stableSort (a : elt array) = merge a l2 l1 t 0 l2 a 0 ; end -let rec binarySearchAux (arr : elt array) lo hi key = +let stableSort a = let b = A.copy a in stableSortInPlace b; b + +let rec binarySearchAux (arr : element array) lo hi key = let mid = (lo + hi)/2 in let midVal = A.getUnsafe arr mid in @@ -247,7 +249,7 @@ let rec binarySearchAux (arr : elt array) lo hi key = else - (hi + 1) else binarySearchAux arr mid hi key -let binarySearch (sorted : elt array) key : int = +let binarySearch (sorted : element array) key : int = let len = A.length sorted in if len = 0 then -1 else diff --git a/jscomp/others/bs_SortString.mli b/jscomp/others/bs_SortString.mli index f16a2aa0a75..72339b5509b 100644 --- a/jscomp/others/bs_SortString.mli +++ b/jscomp/others/bs_SortString.mli @@ -1,23 +1,51 @@ -# 4 "sort.cppo.mli" -type elt = string -# 9 -val strictlySortedLength : - elt array -> - int +# 2 "sort.cppo.mli" +(* Copyright (C) 2017 Authors of BuckleScript + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * In addition to the permissions granted to you by the LGPL, you may combine + * or link a "work that uses the Library" with a publicly distributed version + * of this file to produce a combined library or application, then distribute + * that combined work under the terms of your choosing, with no requirement + * to comply with the obligations normally placed on you by section 4 of the + * LGPL version 3 (or the corresponding section of a later version of the LGPL + * should you choose to use a later version). + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) + + + +# 31 +type element = string + +# 36 +val strictlySortedLength: element array -> int (** [strictlySortedLenght xs] return [+n] means increasing order [-n] means negative order -*) +*) -val isSorted : elt array -> bool -(** strictly sorted *) -val stableSort : elt array -> unit +val isSorted: element array -> bool +(** [sorted xs] return true if [xs] is in non strict increasing order *) -val binarySearch : - elt array -> elt -> int +val stableSortInPlace: element array -> unit + +val stableSort: element array -> element array + +val binarySearch: element array -> element -> int (** If value is not found and value is less than one or more elements in array, @@ -33,10 +61,10 @@ val binarySearch : *) -val union : - elt array -> int -> int -> - elt array -> int -> int -> - elt array -> int +val union: + element array -> int -> int -> + element array -> int -> int -> + element array -> int -> int (** [union src src1ofs src1len src2 src2ofs src2len dst dstofs cmp] @@ -45,14 +73,14 @@ val union : also assume that [dst] is large enough to store all elements *) -val inter: - elt array -> int -> int -> - elt array -> int -> int -> - elt array -> int +val intersect: + element array -> int -> int -> + element array -> int -> int -> + element array -> int -> int val diff: - elt array -> int -> int -> - elt array -> int -> int -> - elt array -> int + element array -> int -> int -> + element array -> int -> int -> + element array -> int -> int diff --git a/jscomp/others/bs_internalAVLset.ml b/jscomp/others/bs_internalAVLset.ml index f867acb4995..6a30066d80e 100644 --- a/jscomp/others/bs_internalAVLset.ml +++ b/jscomp/others/bs_internalAVLset.ml @@ -282,13 +282,13 @@ let rec toListAux accu n = let toList0 s = toListAux [] s -let rec checkInvariant (v : _ t0) = +let rec checkInvariantInternal (v : _ t0) = match toOpt v with | None -> true | Some n -> let l,r = left n , right n in let diff = height l - height r in - diff <=2 && diff >= -2 && checkInvariant l && checkInvariant r + diff <=2 && diff >= -2 && checkInvariantInternal l && checkInvariantInternal r diff --git a/jscomp/others/bs_internalAVLset.mli b/jscomp/others/bs_internalAVLset.mli index 03388c06f88..464e7212208 100644 --- a/jscomp/others/bs_internalAVLset.mli +++ b/jscomp/others/bs_internalAVLset.mli @@ -81,7 +81,7 @@ val lengthNode : 'a node -> int val length0 : 'a t0 -> int val toList0 : 'a t0 -> 'a list -val checkInvariant : _ t0 -> bool +val checkInvariantInternal : _ t0 -> bool val fillArray: 'a node -> int -> 'a array -> int val toArray0 : 'a t0 -> 'a array val ofSortedArrayAux : 'a array -> int -> int -> 'a t0 diff --git a/jscomp/others/bs_internalAVLtree.ml b/jscomp/others/bs_internalAVLtree.ml index c02c2ddbdd9..0d8f3c6f5ab 100644 --- a/jscomp/others/bs_internalAVLtree.ml +++ b/jscomp/others/bs_internalAVLtree.ml @@ -341,13 +341,13 @@ let toList0 s = toListAux [] s -let rec checkInvariant (v : _ t0) = +let rec checkInvariantInternal (v : _ t0) = match toOpt v with | None -> true | Some n -> let l,r = left n , right n in let diff = height l - height r in - diff <=2 && diff >= -2 && checkInvariant l && checkInvariant r + diff <=2 && diff >= -2 && checkInvariantInternal l && checkInvariantInternal r let rec fillArrayKey n i arr = diff --git a/jscomp/others/bs_internalAVLtree.mli b/jscomp/others/bs_internalAVLtree.mli index c358b62eb79..9ef8d6a0e2c 100644 --- a/jscomp/others/bs_internalAVLtree.mli +++ b/jscomp/others/bs_internalAVLtree.mli @@ -101,7 +101,7 @@ val lengthNode : ('a, 'b) node -> int val length0 : ('a,'b) t0 -> int val toList0 : ('a,'b) t0 -> ('a * 'b) list -val checkInvariant : ('a,'b) t0 -> bool +val checkInvariantInternal : ('a,'b) t0 -> bool val fillArray : ('a,'b) node -> int -> ('a * 'b) array -> int diff --git a/jscomp/others/map.cppo.ml b/jscomp/others/map.cppo.ml index 85e0c8b1b68..0f7768c9f1b 100644 --- a/jscomp/others/map.cppo.ml +++ b/jscomp/others/map.cppo.ml @@ -39,7 +39,7 @@ let toList = N.toList0 let toArray = N.toArray0 let keysToArray = N.keysToArray0 let valuesToArray = N.valuesToArray0 -let checkInvariant = N.checkInvariant +let checkInvariantInternal = N.checkInvariantInternal let rec set t (newK : key) (newD : _) = match N.toOpt t with diff --git a/jscomp/others/map.cppo.mli b/jscomp/others/map.cppo.mli index 1080c37856b..e2fd047da08 100644 --- a/jscomp/others/map.cppo.mli +++ b/jscomp/others/map.cppo.mli @@ -58,7 +58,7 @@ val get: 'a t -> key -> 'a option val getNull: 'a t -> key -> 'a Js.null val getWithDefault: 'a t -> key -> 'a -> 'a val getExn: 'a t -> key -> 'a -val checkInvariant: _ t -> bool +val checkInvariantInternal: _ t -> bool (****************************************************************************) val remove: 'a t -> key -> 'a t @@ -125,4 +125,4 @@ val map: 'a t -> ('a -> 'b [@bs]) -> 'b t val mapWithKey: 'a t -> (key -> 'a -> 'b [@bs]) -> 'b t -val checkInvariant: _ t -> bool +val checkInvariantInternal: _ t -> bool diff --git a/jscomp/others/mapm.cppo.ml b/jscomp/others/mapm.cppo.ml index d1580dc1cd0..a5e0c97c79f 100644 --- a/jscomp/others/mapm.cppo.ml +++ b/jscomp/others/mapm.cppo.ml @@ -51,7 +51,7 @@ let toList d = N.toList0 (data d) let toArray d = N.toArray0 (data d) let keysToArray d = N.keysToArray0 (data d) let valuesToArray d = N.valuesToArray0 (data d) -let checkInvariant d = N.checkInvariant (data d) +let checkInvariantInternal d = N.checkInvariantInternal (data d) let has d v = I.mem (data d) v diff --git a/jscomp/others/mapm.cppo.mli b/jscomp/others/mapm.cppo.mli index 849c326e0e6..bd810b1a0d8 100644 --- a/jscomp/others/mapm.cppo.mli +++ b/jscomp/others/mapm.cppo.mli @@ -89,7 +89,7 @@ val get: 'a t -> key -> 'a option val getNull: 'a t -> key -> 'a Js.null val getWithDefault: 'a t -> key -> 'a -> 'a val getExn: 'a t -> key -> 'a -val checkInvariant: _ t -> bool +val checkInvariantInternal: _ t -> bool (****************************************************************************) diff --git a/jscomp/others/set.cppo.ml b/jscomp/others/set.cppo.ml index d3b42b60bc8..873116db417 100644 --- a/jscomp/others/set.cppo.ml +++ b/jscomp/others/set.cppo.ml @@ -29,7 +29,7 @@ let size = N.length0 let toList = N.toList0 let toArray = N.toArray0 let ofSortedArrayUnsafe = N.ofSortedArrayUnsafe0 -let checkInvariant = N.checkInvariant +let checkInvariantInternal = N.checkInvariantInternal let rec add (t : t) (x : elt) : t = match N.toOpt t with diff --git a/jscomp/others/set.cppo.mli b/jscomp/others/set.cppo.mli index fcaa860c189..f3aeeddca81 100644 --- a/jscomp/others/set.cppo.mli +++ b/jscomp/others/set.cppo.mli @@ -117,4 +117,4 @@ val split: t -> elt -> (t * t) * bool -val checkInvariant: t -> bool +val checkInvariantInternal: t -> bool diff --git a/jscomp/others/setm.cppo.ml b/jscomp/others/setm.cppo.ml index 9290a878683..0fa55f99384 100644 --- a/jscomp/others/setm.cppo.ml +++ b/jscomp/others/setm.cppo.ml @@ -103,8 +103,8 @@ let toArray d = N.toArray0 (data d) let ofSortedArrayUnsafe xs = t ~data:(N.ofSortedArrayUnsafe0 xs) -let checkInvariant d = - N.checkInvariant (data d) +let checkInvariantInternal d = + N.checkInvariantInternal (data d) let add d k = let old_data = data d in @@ -277,7 +277,7 @@ let intersect dataa datab = then empty () else let tmp2 = A.makeUninitializedUnsafe (min sizea sizeb) in - let k = S.inter tmp 0 sizea tmp sizea sizeb tmp2 0 in + let k = S.intersect tmp 0 sizea tmp sizea sizeb tmp2 0 in t ~data:(N.ofSortedArrayAux tmp2 0 k) let diff dataa datab : t = diff --git a/jscomp/others/setm.cppo.mli b/jscomp/others/setm.cppo.mli index f78e3ca5776..c326e4306a4 100644 --- a/jscomp/others/setm.cppo.mli +++ b/jscomp/others/setm.cppo.mli @@ -99,6 +99,6 @@ val split: t -> elt -> (t * t) * bool [split s key] return a fresh copy of each *) -val checkInvariant: t -> bool +val checkInvariantInternal: t -> bool diff --git a/jscomp/others/sort.cppo.ml b/jscomp/others/sort.cppo.ml index eaf5d97bc6c..5996910d3d3 100644 --- a/jscomp/others/sort.cppo.ml +++ b/jscomp/others/sort.cppo.ml @@ -1,14 +1,14 @@ #ifdef TYPE_INT -type elt = int +type element = int #elif defined TYPE_STRING -type elt = string +type element = string #else [%error "unknown type"] #endif module A = Bs_Array -let rec sortedLengthAuxMore (xs : elt array) prec acc len = +let rec sortedLengthAuxMore (xs : element array) prec acc len = if acc >= len then acc else let v = A.getUnsafe xs acc in @@ -16,7 +16,7 @@ let rec sortedLengthAuxMore (xs : elt array) prec acc len = sortedLengthAuxMore xs v (acc + 1) len else acc -let rec sortedLengthAuxLess (xs : elt array) prec acc len = +let rec sortedLengthAuxLess (xs : element array) prec acc len = if acc >= len then acc else let v = A.getUnsafe xs acc in @@ -24,7 +24,7 @@ let rec sortedLengthAuxLess (xs : elt array) prec acc len = sortedLengthAuxLess xs v (acc + 1) len else acc -let strictlySortedLength (xs : elt array) = +let strictlySortedLength (xs : element array) = let len = A.length xs in match len with | 0 | 1 -> len @@ -37,11 +37,11 @@ let strictlySortedLength (xs : elt array) = - (sortedLengthAuxMore xs x1 2 len) else 1 -let rec isSortedAux (a : elt array) i last_bound = +let rec isSortedAux (a : element array) i last_bound = (* when [i = len - 1], it reaches the last element*) if i = last_bound then true else - if (A.getUnsafe a i) <= (A.getUnsafe a (i+1)) then + if A.getUnsafe a i <= A.getUnsafe a (i+1) then isSortedAux a (i + 1) last_bound else false @@ -54,7 +54,7 @@ let isSorted a = let cutoff = 5 -let merge (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = +let merge (src : element array) src1ofs src1len src2 src2ofs src2len dst dstofs = let src1r = src1ofs + src1len and src2r = src2ofs + src2len in let rec loop i1 s1 i2 s2 d = if s1 <= s2 then begin @@ -77,7 +77,7 @@ let merge (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = -let union (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = +let union (src : element array) src1ofs src1len src2 src2ofs src2len dst dstofs = let src1r = src1ofs + src1len in let src2r = src2ofs + src2len in let rec loop i1 s1 i2 s2 d = @@ -126,7 +126,7 @@ let union (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = src2ofs (A.getUnsafe src2 src2ofs) dstofs -let inter (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = +let intersect (src : element array) src1ofs src1len src2 src2ofs src2len dst dstofs = let src1r = src1ofs + src1len in let src2r = src2ofs + src2len in let rec loop i1 s1 i2 s2 d = @@ -162,7 +162,7 @@ let inter (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = src2ofs (A.getUnsafe src2 src2ofs) dstofs -let diff (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = +let diff (src : element array) src1ofs src1len src2 src2ofs src2len dst dstofs = let src1r = src1ofs + src1len in let src2r = src2ofs + src2len in let rec loop i1 s1 i2 s2 d = @@ -201,7 +201,7 @@ let diff (src : elt array) src1ofs src1len src2 src2ofs src2len dst dstofs = src2ofs (A.getUnsafe src2 src2ofs) dstofs -let insertionSort (src : elt array) srcofs dst dstofs len = +let insertionSort (src : element array) srcofs dst dstofs len = for i = 0 to len - 1 do let e = (A.getUnsafe src (srcofs + i)) in let j = ref (dstofs + i - 1) in @@ -212,7 +212,7 @@ let insertionSort (src : elt array) srcofs dst dstofs len = A.setUnsafe dst (!j + 1) e; done -let rec sortTo (src : elt array) srcofs dst dstofs len = +let rec sortTo (src : element array) srcofs dst dstofs len = if len <= cutoff then insertionSort src srcofs dst dstofs len else begin let l1 = len / 2 in @@ -222,7 +222,7 @@ let rec sortTo (src : elt array) srcofs dst dstofs len = merge src (srcofs + l2) l1 dst (dstofs + l1) l2 dst dstofs ; end -let stableSort (a : elt array) = +let stableSortInPlace (a : element array) = let l = A.length a in if l <= cutoff then insertionSort a 0 a 0 l else begin @@ -234,7 +234,9 @@ let stableSort (a : elt array) = merge a l2 l1 t 0 l2 a 0 ; end -let rec binarySearchAux (arr : elt array) lo hi key = +let stableSort a = let b = A.copy a in stableSortInPlace b; b + +let rec binarySearchAux (arr : element array) lo hi key = let mid = (lo + hi)/2 in let midVal = A.getUnsafe arr mid in @@ -251,7 +253,7 @@ let rec binarySearchAux (arr : elt array) lo hi key = else - (hi + 1) else binarySearchAux arr mid hi key -let binarySearch (sorted : elt array) key : int = +let binarySearch (sorted : element array) key : int = let len = A.length sorted in if len = 0 then -1 else diff --git a/jscomp/others/sort.cppo.mli b/jscomp/others/sort.cppo.mli index 4381713ef94..641211d110e 100644 --- a/jscomp/others/sort.cppo.mli +++ b/jscomp/others/sort.cppo.mli @@ -1,27 +1,54 @@ + +(* Copyright (C) 2017 Authors of BuckleScript + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * In addition to the permissions granted to you by the LGPL, you may combine + * or link a "work that uses the Library" with a publicly distributed version + * of this file to produce a combined library or application, then distribute + * that combined work under the terms of your choosing, with no requirement + * to comply with the obligations normally placed on you by section 4 of the + * LGPL version 3 (or the corresponding section of a later version of the LGPL + * should you choose to use a later version). + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) + + + #ifdef TYPE_INT -type elt = int +type element = int #elif defined TYPE_STRING -type elt = string +type element = string #else [%error "unknown type"] #endif -val strictlySortedLength : - elt array -> - int +val strictlySortedLength: element array -> int (** [strictlySortedLenght xs] return [+n] means increasing order [-n] means negative order -*) +*) -val isSorted : elt array -> bool -(** strictly sorted *) -val stableSort : elt array -> unit +val isSorted: element array -> bool +(** [sorted xs] return true if [xs] is in non strict increasing order *) -val binarySearch : - elt array -> elt -> int +val stableSortInPlace: element array -> unit + +val stableSort: element array -> element array + +val binarySearch: element array -> element -> int (** If value is not found and value is less than one or more elements in array, @@ -37,10 +64,10 @@ val binarySearch : *) -val union : - elt array -> int -> int -> - elt array -> int -> int -> - elt array -> int +val union: + element array -> int -> int -> + element array -> int -> int -> + element array -> int -> int (** [union src src1ofs src1len src2 src2ofs src2len dst dstofs cmp] @@ -49,14 +76,14 @@ val union : also assume that [dst] is large enough to store all elements *) -val inter: - elt array -> int -> int -> - elt array -> int -> int -> - elt array -> int +val intersect: + element array -> int -> int -> + element array -> int -> int -> + element array -> int -> int val diff: - elt array -> int -> int -> - elt array -> int -> int -> - elt array -> int + element array -> int -> int -> + element array -> int -> int -> + element array -> int -> int diff --git a/jscomp/test/bs_hashmap_test.js b/jscomp/test/bs_hashmap_test.js index bcb72b4763f..eea02674a0a 100644 --- a/jscomp/test/bs_hashmap_test.js +++ b/jscomp/test/bs_hashmap_test.js @@ -75,7 +75,7 @@ var xx = Bs_HashMap.ofArray(v, Y); eqx("File \"bs_hashmap_test.ml\", line 40, characters 6-13", xx.data.size, 91); -eqx("File \"bs_hashmap_test.ml\", line 41, characters 6-13", Bs_Sort.sortByCont(Bs_internalBuckets.keys0(xx.data), cmp), Array_data_util.range(30, 120)); +eqx("File \"bs_hashmap_test.ml\", line 41, characters 6-13", Bs_Sort.stableSortBy(Bs_internalBuckets.keys0(xx.data), cmp), Array_data_util.range(30, 120)); var u$1 = Bs_Array.concat(Array_data_util.randomRange(0, 100000), Array_data_util.randomRange(0, 100)); diff --git a/jscomp/test/bs_hashmap_test.ml b/jscomp/test/bs_hashmap_test.ml index 742890f0b2a..80f4d20928f 100644 --- a/jscomp/test/bs_hashmap_test.ml +++ b/jscomp/test/bs_hashmap_test.ml @@ -38,7 +38,7 @@ let () = let v = A.zip u u in let xx = N.ofArray ~dict:(module Y) v in eqx __LOC__ (N.size xx) 91; - eqx __LOC__ (So.sortByCont (N.keysToArray xx) cmp) (I.range 30 120) + eqx __LOC__ (So.stableSortBy (N.keysToArray xx) cmp) (I.range 30 120) let () = let u = I.randomRange 0 100_000 ++ I.randomRange 0 100 in diff --git a/jscomp/test/bs_hashset_int_test.js b/jscomp/test/bs_hashset_int_test.js index df991389497..db36ef696ab 100644 --- a/jscomp/test/bs_hashset_int_test.js +++ b/jscomp/test/bs_hashset_int_test.js @@ -84,9 +84,9 @@ var v0 = Bs_Array.concat(Array_data_util.range(0, 1000), Bs_HashSetInt.toArray(u var v1 = Bs_Array.concat(Array_data_util.range(0, 2000), Bs_HashSetInt.toArray(u1)); -Bs_SortInt.stableSort(v0); +Bs_SortInt.stableSortInPlace(v0); -Bs_SortInt.stableSort(v1); +Bs_SortInt.stableSortInPlace(v1); eq("File \"bs_hashset_int_test.ml\", line 55, characters 5-12", v0, v1); diff --git a/jscomp/test/bs_hashset_int_test.ml b/jscomp/test/bs_hashset_int_test.ml index b6fa63dad63..de4bf0867ae 100644 --- a/jscomp/test/bs_hashset_int_test.ml +++ b/jscomp/test/bs_hashset_int_test.ml @@ -50,8 +50,8 @@ let () = done ; let v0 = (A.concat (I.range 0 1000) (N.toArray u0)) in let v1 = (A.concat (I.range 0 2000) (N.toArray u1)) in - SI.stableSort v0; - SI.stableSort v1; + SI.stableSortInPlace v0; + SI.stableSortInPlace v1; eq __LOC__ v0 v1 let () = diff --git a/jscomp/test/bs_list_test.ml b/jscomp/test/bs_list_test.ml index 2265f79476e..f16f3ae2c2e 100644 --- a/jscomp/test/bs_list_test.ml +++ b/jscomp/test/bs_list_test.ml @@ -27,7 +27,7 @@ let sum2 xs ys = let () = let u = (N.makeBy 5 (fun[@bs] i -> i * i )) in - (* N.checkInvariant u ; *) + (* N.checkInvariantInternal u ; *) let f i = eq __LOC__ (N.getExn u i) (i * i) in for i = 0 to 4 do diff --git a/jscomp/test/bs_map_int_test.js b/jscomp/test/bs_map_int_test.js index 77ce13412e0..867a718cdad 100644 --- a/jscomp/test/bs_map_int_test.js +++ b/jscomp/test/bs_map_int_test.js @@ -49,7 +49,7 @@ var v = Bs_Array.makeByAndShuffle(1000000, (function (i) { var u = Bs_MapInt.ofArray(v); -b("File \"bs_map_int_test.ml\", line 20, characters 4-11", Bs_MapInt.checkInvariant(u)); +b("File \"bs_map_int_test.ml\", line 20, characters 4-11", Bs_MapInt.checkInvariantInternal(u)); var firstHalf = Bs_Array.slice(v, 0, 2000); @@ -57,9 +57,9 @@ var xx = Bs_Array.reduce(firstHalf, u, (function (acc, param) { return Bs_MapInt.remove(acc, param[0]); })); -b("File \"bs_map_int_test.ml\", line 24, characters 4-11", Bs_MapInt.checkInvariant(u)); +b("File \"bs_map_int_test.ml\", line 24, characters 4-11", Bs_MapInt.checkInvariantInternal(u)); -b("File \"bs_map_int_test.ml\", line 25, characters 4-11", Bs_MapInt.checkInvariant(xx)); +b("File \"bs_map_int_test.ml\", line 25, characters 4-11", Bs_MapInt.checkInvariantInternal(xx)); Mt.from_pair_suites("bs_map_int_test.ml", suites[0]); diff --git a/jscomp/test/bs_map_int_test.ml b/jscomp/test/bs_map_int_test.ml index 65940837070..25198e5e298 100644 --- a/jscomp/test/bs_map_int_test.ml +++ b/jscomp/test/bs_map_int_test.ml @@ -17,12 +17,12 @@ let () = let v = (A.makeByAndShuffle 1_000_000 (fun[@bs] i -> (i,i))) in let u = N.ofArray v in - b __LOC__ (N.checkInvariant u); + b __LOC__ (N.checkInvariantInternal u); let firstHalf = A.slice v 0 2_000 in let xx = A.reduce firstHalf u (fun[@bs] acc (x,_) -> N.remove acc x) in - b __LOC__ (N.checkInvariant u); - b __LOC__ (N.checkInvariant xx); + b __LOC__ (N.checkInvariantInternal u); + b __LOC__ (N.checkInvariantInternal xx); ;; Mt.from_pair_suites __FILE__ !suites diff --git a/jscomp/test/bs_mutable_set_test.js b/jscomp/test/bs_mutable_set_test.js index 1988d2318e0..e57aa097573 100644 --- a/jscomp/test/bs_mutable_set_test.js +++ b/jscomp/test/bs_mutable_set_test.js @@ -29,7 +29,7 @@ for(var i = 0; i <= 100000; ++i){ Bs_SetIntM.add(v, i); } -b("File \"bs_mutable_set_test.ml\", line 19, characters 4-11", Bs_internalAVLset.checkInvariant(v.data)); +b("File \"bs_mutable_set_test.ml\", line 19, characters 4-11", Bs_internalAVLset.checkInvariantInternal(v.data)); b("File \"bs_mutable_set_test.ml\", line 20, characters 4-11", Bs_Range.every(0, 100000, (function (i) { return Bs_internalSetInt.mem(v.data, i); @@ -107,7 +107,7 @@ function id(loc, x) { var u = { data: Bs_internalAVLset.ofSortedArrayUnsafe0(x) }; - b(loc, Bs_internalAVLset.checkInvariant(u.data)); + b(loc, Bs_internalAVLset.checkInvariantInternal(u.data)); return b(loc, Bs_Array.every2(Bs_internalAVLset.toArray0(u.data), x, (function (x, y) { return +(x === y); }))); diff --git a/jscomp/test/bs_mutable_set_test.ml b/jscomp/test/bs_mutable_set_test.ml index cbc975a2c68..590afddf245 100644 --- a/jscomp/test/bs_mutable_set_test.ml +++ b/jscomp/test/bs_mutable_set_test.ml @@ -13,10 +13,10 @@ let (++) = A.concat let () = let v = N.empty () in for i = 0 to 1_00_000 do - (* [%assert (N.checkInvariant !v)]; *) + (* [%assert (N.checkInvariantInternal !v)]; *) N.add v i done ; - b __LOC__ (N.checkInvariant v); + b __LOC__ (N.checkInvariantInternal v); b __LOC__ @@ R.every 0 1_00_000 (fun [@bs] i -> N.has v i ); @@ -65,7 +65,7 @@ let () = let () = let id loc x = let u = (N.ofSortedArrayUnsafe x) in - b loc (N.checkInvariant u ); + b loc (N.checkInvariantInternal u ); b loc (A.every2 (N.toArray u) x (fun[@bs] x y -> x = y) ) in id __LOC__ [||] ; diff --git a/jscomp/test/bs_poly_mutable_set_test.js b/jscomp/test/bs_poly_mutable_set_test.js index 6233f4dd645..09832a05952 100644 --- a/jscomp/test/bs_poly_mutable_set_test.js +++ b/jscomp/test/bs_poly_mutable_set_test.js @@ -188,7 +188,7 @@ b("File \"bs_poly_mutable_set_test.ml\", line 120, characters 4-11", Bs_List.eve ] ] ], (function (x) { - return Bs_internalAVLset.checkInvariant(x.data); + return Bs_internalAVLset.checkInvariantInternal(x.data); }))); Mt.from_pair_suites("bs_poly_mutable_set_test.ml", suites[0]); diff --git a/jscomp/test/bs_poly_mutable_set_test.ml b/jscomp/test/bs_poly_mutable_set_test.ml index 7fc2c1579e3..1379ba89781 100644 --- a/jscomp/test/bs_poly_mutable_set_test.ml +++ b/jscomp/test/bs_poly_mutable_set_test.ml @@ -117,8 +117,8 @@ let () = let a3, a4 = N.partition a0 (fun [@bs] x -> x mod 2 = 0) in b __LOC__ (N.eq a1 a3); b __LOC__ (N.eq a2 a4); - b __LOC__ (L.every [a0;a1;a2;a3;a4] (fun [@bs] x -> N.checkInvariant x)) + b __LOC__ (L.every [a0;a1;a2;a3;a4] (fun [@bs] x -> N.checkInvariantInternal x)) -;; Mt.from_pair_suites __FILE__ !suites \ No newline at end of file +;; Mt.from_pair_suites __FILE__ !suites diff --git a/jscomp/test/bs_poly_set_test.js b/jscomp/test/bs_poly_set_test.js index 78d74a0ea3c..1217cea656b 100644 --- a/jscomp/test/bs_poly_set_test.js +++ b/jscomp/test/bs_poly_set_test.js @@ -339,7 +339,7 @@ b("File \"bs_poly_set_test.ml\", line 129, characters 4-11", Bs_List.every(/* :: ] ] ], (function (x) { - return Bs_internalAVLset.checkInvariant(x.data); + return Bs_internalAVLset.checkInvariantInternal(x.data); }))); var a = Bs_Set.ofArray(IntCmp, /* int array */[]); diff --git a/jscomp/test/bs_poly_set_test.ml b/jscomp/test/bs_poly_set_test.ml index aad08ff91c6..c9146c3f9fe 100644 --- a/jscomp/test/bs_poly_set_test.ml +++ b/jscomp/test/bs_poly_set_test.ml @@ -126,7 +126,7 @@ let () = eq __LOC__ (N.toList a9) (L.makeBy 800 (fun[@bs] i -> i + 201)); eq __LOC__ (N.minimum a8) (Some 0); eq __LOC__ (N.minimum a9) (Some 201); - b __LOC__ (L.every [a0;a1;a2;a3;a4] (fun [@bs] x -> N.checkInvariant x)) + b __LOC__ (L.every [a0;a1;a2;a3;a4] (fun [@bs] x -> N.checkInvariantInternal x)) let () = diff --git a/jscomp/test/bs_set_int_test.js b/jscomp/test/bs_set_int_test.js index ece5f31697c..d5ba33fb450 100644 --- a/jscomp/test/bs_set_int_test.js +++ b/jscomp/test/bs_set_int_test.js @@ -213,13 +213,13 @@ var v$11 = Bs_Array.makeByAndShuffle(1000000, (function (i) { var u$1 = Bs_SetInt.ofArray(v$11); -b("File \"bs_set_int_test.ml\", line 102, characters 4-11", Bs_SetInt.checkInvariant(u$1)); +b("File \"bs_set_int_test.ml\", line 102, characters 4-11", Bs_SetInt.checkInvariantInternal(u$1)); var firstHalf = Bs_Array.slice(v$11, 0, 2000); var xx = Bs_Array.reduce(firstHalf, u$1, Bs_SetInt.remove); -b("File \"bs_set_int_test.ml\", line 106, characters 4-11", Bs_SetInt.checkInvariant(u$1)); +b("File \"bs_set_int_test.ml\", line 106, characters 4-11", Bs_SetInt.checkInvariantInternal(u$1)); b("File \"bs_set_int_test.ml\", line 107, characters 4-11", Bs_SetInt.eq(Bs_SetInt.union(Bs_SetInt.ofArray(firstHalf), xx), u$1)); diff --git a/jscomp/test/bs_set_int_test.ml b/jscomp/test/bs_set_int_test.ml index 81614d2bfe6..aaa8fd39ddb 100644 --- a/jscomp/test/bs_set_int_test.ml +++ b/jscomp/test/bs_set_int_test.ml @@ -99,11 +99,11 @@ let () = let count = 1_000_000 in let v = ((A.makeByAndShuffle count (fun [@bs] i -> i))) in let u = N.ofArray v in - b __LOC__ (N.checkInvariant u ); + b __LOC__ (N.checkInvariantInternal u ); let firstHalf = A.slice v 0 2_000 in let xx = Bs.Array.reduce firstHalf u (fun[@bs] acc x -> N.remove acc x ) in - b __LOC__ (N.checkInvariant u); + b __LOC__ (N.checkInvariantInternal u); b __LOC__ N.(eq (union (ofArray firstHalf) xx) u) let () = diff --git a/jscomp/test/bs_sort_test.js b/jscomp/test/bs_sort_test.js index a1df640e228..d0e8352703e 100644 --- a/jscomp/test/bs_sort_test.js +++ b/jscomp/test/bs_sort_test.js @@ -36,7 +36,7 @@ function inters(xs, ys) { var lenX = xs.length; var lenY = ys.length; var o = new Array(lenX); - var v = Bs_Sort.inter(xs, 0, lenX, ys, 0, lenY, o, 0, cmp); + var v = Bs_Sort.intersect(xs, 0, lenX, ys, 0, lenY, o, 0, cmp); o.length = v; return o; } @@ -88,13 +88,13 @@ eq("File \"bs_sort_test.ml\", line 48, characters 5-12", diffs(Array_data_util.r b("File \"bs_sort_test.ml\", line 50, characters 4-11", Bs_Range.every(0, 200, (function (i) { var v = Array_data_util.randomRange(0, i); - Bs_Sort.stableSortBy(v, cmp); + Bs_Sort.stableSortInPlaceBy(v, cmp); return Bs_Sort.isSorted(v, cmp); }))); b("File \"bs_sort_test.ml\", line 56, characters 4-11", Bs_Range.every(0, 200, (function (i) { var v = Array_data_util.randomRange(0, i); - v.sort(cmp); + Bs_Sort.stableSortInPlaceBy(v, cmp); return Bs_Sort.isSorted(v, cmp); }))); @@ -120,7 +120,7 @@ var u2 = Bs_Array.copy(u); console.time("bs_sort_test.ml 80"); -Bs_Sort.stableSortBy(u, cmp); +Bs_Sort.stableSortInPlaceBy(u, cmp); console.timeEnd("bs_sort_test.ml 80"); @@ -128,7 +128,7 @@ b("File \"bs_sort_test.ml\", line 81, characters 4-11", Bs_Sort.isSorted(u, cmp) console.time("bs_sort_test.ml 82"); -Bs_SortInt.stableSort(u2); +Bs_SortInt.stableSortInPlace(u2); console.timeEnd("bs_sort_test.ml 82"); @@ -136,7 +136,7 @@ b("File \"bs_sort_test.ml\", line 83, characters 4-11", Bs_Sort.isSorted(u2, cmp console.time("bs_sort_test.ml 84"); -u1.sort(cmp); +Bs_Sort.stableSortInPlaceBy(u1, cmp); console.timeEnd("bs_sort_test.ml 84"); @@ -157,9 +157,9 @@ var u$1 = /* array */[ ] ]; -eq("File \"bs_sort_test.ml\", line 90, characters 5-12", (Bs_Sort.stableSortBy(u$1, (function (param, param$1) { - return param[0] - param$1[0] | 0; - })), u$1), /* array */[ +eq("File \"bs_sort_test.ml\", line 90, characters 5-12", Bs_Sort.stableSortBy(u$1, (function (param, param$1) { + return param[0] - param$1[0] | 0; + })), /* array */[ /* tuple */[ 1, "a" @@ -193,9 +193,9 @@ var u$2 = /* array */[ ] ]; -eq("File \"bs_sort_test.ml\", line 96, characters 5-12", (Bs_Sort.stableSortBy(u$2, (function (param, param$1) { - return param[0] - param$1[0] | 0; - })), u$2), /* array */[ +eq("File \"bs_sort_test.ml\", line 96, characters 5-12", Bs_Sort.stableSortBy(u$2, (function (param, param$1) { + return param[0] - param$1[0] | 0; + })), /* array */[ /* tuple */[ 1, "b" @@ -241,9 +241,9 @@ var u$3 = /* array */[ ] ]; -eq("File \"bs_sort_test.ml\", line 102, characters 5-12", (Bs_Sort.stableSortBy(u$3, (function (param, param$1) { - return param[0] - param$1[0] | 0; - })), u$3), /* array */[ +eq("File \"bs_sort_test.ml\", line 102, characters 5-12", Bs_Sort.stableSortBy(u$3, (function (param, param$1) { + return param[0] - param$1[0] | 0; + })), /* array */[ /* tuple */[ 1, "c" @@ -270,7 +270,7 @@ eq("File \"bs_sort_test.ml\", line 102, characters 5-12", (Bs_Sort.stableSortBy( ] ]); -eq("File \"bs_sort_test.ml\", line 111, characters 5-12", Bs_Sort.binarySearch(/* array */[ +eq("File \"bs_sort_test.ml\", line 111, characters 5-12", Bs_Sort.binarySearchBy(/* array */[ 1, 2, 3, @@ -280,7 +280,7 @@ eq("File \"bs_sort_test.ml\", line 111, characters 5-12", Bs_Sort.binarySearch(/ 36 ], 33, cmp), 4); -eq("File \"bs_sort_test.ml\", line 112, characters 5-12", Bs_Sort.binarySearch(/* array */[ +eq("File \"bs_sort_test.ml\", line 112, characters 5-12", Bs_Sort.binarySearchBy(/* array */[ 1, 2, 3, @@ -290,7 +290,7 @@ eq("File \"bs_sort_test.ml\", line 112, characters 5-12", Bs_Sort.binarySearch(/ 36 ], 1, cmp), 0); -eq("File \"bs_sort_test.ml\", line 113, characters 5-12", Bs_Sort.binarySearch(/* array */[ +eq("File \"bs_sort_test.ml\", line 113, characters 5-12", Bs_Sort.binarySearchBy(/* array */[ 1, 2, 3, @@ -300,7 +300,7 @@ eq("File \"bs_sort_test.ml\", line 113, characters 5-12", Bs_Sort.binarySearch(/ 36 ], 2, cmp), 1); -eq("File \"bs_sort_test.ml\", line 114, characters 5-12", Bs_Sort.binarySearch(/* array */[ +eq("File \"bs_sort_test.ml\", line 114, characters 5-12", Bs_Sort.binarySearchBy(/* array */[ 1, 2, 3, @@ -310,7 +310,7 @@ eq("File \"bs_sort_test.ml\", line 114, characters 5-12", Bs_Sort.binarySearch(/ 36 ], 3, cmp), 2); -eq("File \"bs_sort_test.ml\", line 115, characters 5-12", Bs_Sort.binarySearch(/* array */[ +eq("File \"bs_sort_test.ml\", line 115, characters 5-12", Bs_Sort.binarySearchBy(/* array */[ 1, 2, 3, @@ -323,23 +323,23 @@ eq("File \"bs_sort_test.ml\", line 115, characters 5-12", Bs_Sort.binarySearch(/ var aa = Array_data_util.range(0, 1000); b("File \"bs_sort_test.ml\", line 117, characters 4-11", Bs_Range.every(0, 1000, (function (i) { - return +(Bs_Sort.binarySearch(aa, i, cmp) === i); + return +(Bs_Sort.binarySearchBy(aa, i, cmp) === i); }))); var cc = Bs_Array.map(Array_data_util.range(0, 2000), (function (x) { return (x << 1); })); -eq("File \"bs_sort_test.ml\", line 122, characters 5-12", Bs_Sort.binarySearch(cc, 5000, cmp) ^ -1, 2001); +eq("File \"bs_sort_test.ml\", line 122, characters 5-12", Bs_Sort.binarySearchBy(cc, 5000, cmp) ^ -1, 2001); -eq("File \"bs_sort_test.ml\", line 123, characters 5-12", Bs_Sort.binarySearch(cc, -1, cmp) ^ -1, 0); +eq("File \"bs_sort_test.ml\", line 123, characters 5-12", Bs_Sort.binarySearchBy(cc, -1, cmp) ^ -1, 0); -eq("File \"bs_sort_test.ml\", line 124, characters 5-12", Bs_Sort.binarySearch(cc, 0, cmp), 0); +eq("File \"bs_sort_test.ml\", line 124, characters 5-12", Bs_Sort.binarySearchBy(cc, 0, cmp), 0); -eq("File \"bs_sort_test.ml\", line 126, characters 5-12", Bs_Sort.binarySearch(cc, 1, cmp) ^ -1, 1); +eq("File \"bs_sort_test.ml\", line 126, characters 5-12", Bs_Sort.binarySearchBy(cc, 1, cmp) ^ -1, 1); b("File \"bs_sort_test.ml\", line 127, characters 4-11", Bs_Range.every(0, 1999, (function (i) { - return +((Bs_Sort.binarySearch(cc, (i << 1) + 1 | 0, cmp) ^ -1) === (i + 1 | 0)); + return +((Bs_Sort.binarySearchBy(cc, (i << 1) + 1 | 0, cmp) ^ -1) === (i + 1 | 0)); }))); function lt(x, y) { diff --git a/jscomp/test/bs_sort_test.ml b/jscomp/test/bs_sort_test.ml index 3e57247346d..c999f45d1d2 100644 --- a/jscomp/test/bs_sort_test.ml +++ b/jscomp/test/bs_sort_test.ml @@ -18,7 +18,7 @@ let unions xs ys = let inters xs ys = let lenX, lenY = A.length xs, A.length ys in let o = Bs_Array.makeUninitializedUnsafe lenX in - let v = S.inter xs 0 lenX ys 0 lenY o 0 cmp in + let v = S.intersect xs 0 lenX ys 0 lenY o 0 cmp in A.truncateToLengthUnsafe o v ; o let diffs xs ys = @@ -50,13 +50,13 @@ let () = b __LOC__ ( R.every 0 200 (fun [@bs] i -> let v = I.randomRange 0 i in - S.stableSortBy v cmp ; + S.stableSortInPlaceBy v cmp ; S.isSorted v cmp )); b __LOC__ ( R.every 0 200 (fun [@bs] i -> let v = I.randomRange 0 i in - S.sortBy v cmp ; + S.stableSortInPlaceBy v cmp ; S.isSorted v cmp )); b __LOC__ @@ -77,11 +77,11 @@ let () = let u1 = A.copy u in let u2 = A.copy u in (* let u3 = A.map u (fun[@bs] x -> float x) in *) - [%time S.stableSortBy u cmp]; + [%time S.stableSortInPlaceBy u cmp]; b __LOC__ (S.isSorted u cmp); - [%time SI.stableSort u2 ]; + [%time SI.stableSortInPlace u2 ]; b __LOC__ (S.isSorted u2 cmp); - [%time S.sortBy u1 cmp]; + [%time S.stableSortInPlaceBy u1 cmp]; b __LOC__ (S.isSorted u1 cmp) @@ -90,42 +90,42 @@ let () = eq __LOC__ (S.stableSortBy u - (fun [@bs] (a,_) (b,_) -> a - b); u) + (fun [@bs] (a,_) (b,_) -> a - b)) [|1,"a"; 1, "b"; 2 ,"a"|]; let u = [|1, "b"; 1,"a"; 1, "b"; 2, "a"|] in eq __LOC__ (S.stableSortBy u - (fun [@bs] (a,_) (b,_) -> a - b); u) + (fun [@bs] (a,_) (b,_) -> a - b)) [|1, "b"; 1,"a"; 1, "b"; 2 ,"a"|] ; let u = [|1, "c"; 1, "b"; 1,"a"; 1, "b"; 1, "c"; 2, "a"|] in eq __LOC__ (S.stableSortBy u - (fun [@bs] (a,_) (b,_) -> a - b); u) + (fun [@bs] (a,_) (b,_) -> a - b)) [|1, "c"; 1, "b"; 1,"a"; 1, "b"; 1, "c"; 2 ,"a"|] let () = - eq __LOC__ (S.binarySearch [|1;2;3;4;33;35;36|] 33 cmp ) 4 ; - eq __LOC__ (S.binarySearch [|1;2;3;4;33;35;36|] 1 cmp ) 0; - eq __LOC__ (S.binarySearch [|1;2;3;4;33;35;36|] 2 cmp ) 1; - eq __LOC__ (S.binarySearch [|1;2;3;4;33;35;36|] 3 cmp ) 2; - eq __LOC__ (S.binarySearch [|1;2;3;4;33;35;36|] 4 cmp ) 3; + eq __LOC__ (S.binarySearchBy [|1;2;3;4;33;35;36|] 33 cmp ) 4 ; + eq __LOC__ (S.binarySearchBy [|1;2;3;4;33;35;36|] 1 cmp ) 0; + eq __LOC__ (S.binarySearchBy [|1;2;3;4;33;35;36|] 2 cmp ) 1; + eq __LOC__ (S.binarySearchBy [|1;2;3;4;33;35;36|] 3 cmp ) 2; + eq __LOC__ (S.binarySearchBy [|1;2;3;4;33;35;36|] 4 cmp ) 3; let aa = I.range 0 1000 in b __LOC__ @@ R.every 0 1000 (fun [@bs] i -> - S.binarySearch aa i cmp = i + S.binarySearchBy aa i cmp = i ); (* 0, 2, 4, ... 4000 *) let cc = A.map (I.range 0 2000 ) (fun [@bs] x -> x * 2) in - eq __LOC__ (lnot (S.binarySearch cc 5000 cmp)) (2001); - eq __LOC__ (lnot (S.binarySearch cc (-1) cmp)) (0); - eq __LOC__ (S.binarySearch cc 0 cmp) 0; + eq __LOC__ (lnot (S.binarySearchBy cc 5000 cmp)) (2001); + eq __LOC__ (lnot (S.binarySearchBy cc (-1) cmp)) (0); + eq __LOC__ (S.binarySearchBy cc 0 cmp) 0; - eq __LOC__ ( lnot (S.binarySearch cc 1 cmp)) (1); + eq __LOC__ ( lnot (S.binarySearchBy cc 1 cmp)) (1); b __LOC__ @@ R.every 0 1999 (fun [@bs] i -> - lnot (S.binarySearch cc (2 * i + 1) cmp) = (i + 1) + lnot (S.binarySearchBy cc (2 * i + 1) cmp) = (i + 1) (* 1, 3, 5, ... , 3999 *) ) diff --git a/lib/js/bs_Map.js b/lib/js/bs_Map.js index d9f26040cb4..2fdaf904980 100644 --- a/lib/js/bs_Map.js +++ b/lib/js/bs_Map.js @@ -531,8 +531,8 @@ function has(map, x) { return Bs_internalAVLtree.mem0(map.data, x, X[/* cmp */0]); } -function checkInvariant(m) { - return Bs_internalAVLtree.checkInvariant(m.data); +function checkInvariantInternal(m) { + return Bs_internalAVLtree.checkInvariantInternal(m.data); } function getData(prim) { @@ -621,7 +621,7 @@ exports.get = get; exports.getNull = getNull; exports.getWithDefault = getWithDefault; exports.getExn = getExn; -exports.checkInvariant = checkInvariant; +exports.checkInvariantInternal = checkInvariantInternal; exports.remove = remove; exports.removeArray = removeArray; exports.set = set; diff --git a/lib/js/bs_MapInt.js b/lib/js/bs_MapInt.js index e9e3f9e3035..88b0462e63e 100644 --- a/lib/js/bs_MapInt.js +++ b/lib/js/bs_MapInt.js @@ -224,7 +224,7 @@ var map = Bs_internalAVLtree.map0; var mapWithKey = Bs_internalAVLtree.mapi0; -var checkInvariant = Bs_internalAVLtree.checkInvariant; +var checkInvariantInternal = Bs_internalAVLtree.checkInvariantInternal; exports.empty = empty; exports.isEmpty = isEmpty; @@ -264,5 +264,5 @@ exports.partition = partition; exports.split = split; exports.map = map; exports.mapWithKey = mapWithKey; -exports.checkInvariant = checkInvariant; +exports.checkInvariantInternal = checkInvariantInternal; /* No side effect */ diff --git a/lib/js/bs_MapIntM.js b/lib/js/bs_MapIntM.js index c489abf1265..9f86054ca2d 100644 --- a/lib/js/bs_MapIntM.js +++ b/lib/js/bs_MapIntM.js @@ -104,8 +104,8 @@ function valuesToArray(d) { return Bs_internalAVLtree.valuesToArray0(d.data); } -function checkInvariant(d) { - return Bs_internalAVLtree.checkInvariant(d.data); +function checkInvariantInternal(d) { + return Bs_internalAVLtree.checkInvariantInternal(d.data); } function has(d, v) { @@ -317,7 +317,7 @@ exports.get = get; exports.getNull = getNull; exports.getWithDefault = getWithDefault; exports.getExn = getExn; -exports.checkInvariant = checkInvariant; +exports.checkInvariantInternal = checkInvariantInternal; exports.remove = remove; exports.removeMany = removeMany; exports.set = set; diff --git a/lib/js/bs_MapM.js b/lib/js/bs_MapM.js index 4d9374ad7d3..fc3b475476e 100644 --- a/lib/js/bs_MapM.js +++ b/lib/js/bs_MapM.js @@ -232,8 +232,8 @@ function valuesToArray(d) { return Bs_internalAVLtree.valuesToArray0(d.data); } -function checkInvariant(d) { - return Bs_internalAVLtree.checkInvariant(d.data); +function checkInvariantInternal(d) { + return Bs_internalAVLtree.checkInvariantInternal(d.data); } function cmp(m1, m2, cmp$1) { @@ -365,7 +365,7 @@ exports.get = get; exports.getNull = getNull; exports.getWithDefault = getWithDefault; exports.getExn = getExn; -exports.checkInvariant = checkInvariant; +exports.checkInvariantInternal = checkInvariantInternal; exports.remove = remove; exports.removeMany = removeMany; exports.set = set; diff --git a/lib/js/bs_MapString.js b/lib/js/bs_MapString.js index 10256df8598..b56325d703d 100644 --- a/lib/js/bs_MapString.js +++ b/lib/js/bs_MapString.js @@ -224,7 +224,7 @@ var map = Bs_internalAVLtree.map0; var mapWithKey = Bs_internalAVLtree.mapi0; -var checkInvariant = Bs_internalAVLtree.checkInvariant; +var checkInvariantInternal = Bs_internalAVLtree.checkInvariantInternal; exports.empty = empty; exports.isEmpty = isEmpty; @@ -264,5 +264,5 @@ exports.partition = partition; exports.split = split; exports.map = map; exports.mapWithKey = mapWithKey; -exports.checkInvariant = checkInvariant; +exports.checkInvariantInternal = checkInvariantInternal; /* No side effect */ diff --git a/lib/js/bs_MapStringM.js b/lib/js/bs_MapStringM.js index c1237589e2b..7dbafc37b66 100644 --- a/lib/js/bs_MapStringM.js +++ b/lib/js/bs_MapStringM.js @@ -104,8 +104,8 @@ function valuesToArray(d) { return Bs_internalAVLtree.valuesToArray0(d.data); } -function checkInvariant(d) { - return Bs_internalAVLtree.checkInvariant(d.data); +function checkInvariantInternal(d) { + return Bs_internalAVLtree.checkInvariantInternal(d.data); } function has(d, v) { @@ -317,7 +317,7 @@ exports.get = get; exports.getNull = getNull; exports.getWithDefault = getWithDefault; exports.getExn = getExn; -exports.checkInvariant = checkInvariant; +exports.checkInvariantInternal = checkInvariantInternal; exports.remove = remove; exports.removeMany = removeMany; exports.set = set; diff --git a/lib/js/bs_Range.js b/lib/js/bs_Range.js index 75cd8e33d8a..db8274aa96f 100644 --- a/lib/js/bs_Range.js +++ b/lib/js/bs_Range.js @@ -1,6 +1,13 @@ 'use strict'; +function forEach(s, f, action) { + for(var i = s; i <= f; ++i){ + action(i); + } + return /* () */0; +} + function every(_s, f, p) { while(true) { var s = _s; @@ -61,6 +68,7 @@ function someBy(_s, f, step, p) { }; } +exports.forEach = forEach; exports.every = every; exports.everyBy = everyBy; exports.some = some; diff --git a/lib/js/bs_Set.js b/lib/js/bs_Set.js index 7cc58450fcf..741d651d8ab 100644 --- a/lib/js/bs_Set.js +++ b/lib/js/bs_Set.js @@ -522,8 +522,8 @@ function packDictData(prim, prim$1) { }; } -function checkInvariant(d) { - return Bs_internalAVLset.checkInvariant(d.data); +function checkInvariantInternal(d) { + return Bs_internalAVLset.checkInvariantInternal(d.data); } var empty0 = Bs_internalAVLset.empty0; @@ -600,7 +600,7 @@ exports.get = get; exports.getNull = getNull; exports.getExn = getExn; exports.split = split; -exports.checkInvariant = checkInvariant; +exports.checkInvariantInternal = checkInvariantInternal; exports.getData = getData; exports.getDict = getDict; exports.packDictData = packDictData; diff --git a/lib/js/bs_SetInt.js b/lib/js/bs_SetInt.js index 47ea346f2a9..185c2c37f46 100644 --- a/lib/js/bs_SetInt.js +++ b/lib/js/bs_SetInt.js @@ -307,7 +307,7 @@ var getNull = Bs_internalSetInt.findNull; var getExn = Bs_internalSetInt.findExn; -var checkInvariant = Bs_internalAVLset.checkInvariant; +var checkInvariantInternal = Bs_internalAVLset.checkInvariantInternal; exports.empty = empty; exports.ofArray = ofArray; @@ -341,5 +341,5 @@ exports.get = get; exports.getNull = getNull; exports.getExn = getExn; exports.split = split; -exports.checkInvariant = checkInvariant; +exports.checkInvariantInternal = checkInvariantInternal; /* No side effect */ diff --git a/lib/js/bs_SetIntM.js b/lib/js/bs_SetIntM.js index d579968eac5..c32cfbed72e 100644 --- a/lib/js/bs_SetIntM.js +++ b/lib/js/bs_SetIntM.js @@ -134,8 +134,8 @@ function ofSortedArrayUnsafe(xs) { }; } -function checkInvariant(d) { - return Bs_internalAVLset.checkInvariant(d.data); +function checkInvariantInternal(d) { + return Bs_internalAVLset.checkInvariantInternal(d.data); } function add(d, k) { @@ -371,7 +371,7 @@ function intersect(dataa, datab) { }; } else { var tmp2 = new Array(sizea < sizeb ? sizea : sizeb); - var k = Bs_SortInt.inter(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0); + var k = Bs_SortInt.intersect(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0); return { data: Bs_internalAVLset.ofSortedArrayAux(tmp2, 0, k) }; @@ -501,5 +501,5 @@ exports.get = get; exports.getNull = getNull; exports.getExn = getExn; exports.split = split; -exports.checkInvariant = checkInvariant; +exports.checkInvariantInternal = checkInvariantInternal; /* No side effect */ diff --git a/lib/js/bs_SetM.js b/lib/js/bs_SetM.js index faea868c68f..7f8ede1305f 100644 --- a/lib/js/bs_SetM.js +++ b/lib/js/bs_SetM.js @@ -189,7 +189,7 @@ function split(d, key) { var dict = d.dict; var s = d.data; var arr = Bs_internalAVLset.toArray0(s); - var i = Bs_Sort.binarySearch(arr, key, dict[/* cmp */0]); + var i = Bs_Sort.binarySearchBy(arr, key, dict[/* cmp */0]); var len = arr.length; if (i < 0) { var next = (-i | 0) - 1 | 0; @@ -310,8 +310,8 @@ function ofSortedArrayUnsafe(xs, dict) { }; } -function checkInvariant(d) { - return Bs_internalAVLset.checkInvariant(d.data); +function checkInvariantInternal(d) { + return Bs_internalAVLset.checkInvariantInternal(d.data); } function cmp(d0, d1) { @@ -408,7 +408,7 @@ function intersect(a, b) { }; } else { var tmp2 = new Array(sizea < sizeb ? sizea : sizeb); - var k = Bs_Sort.inter(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0, p); + var k = Bs_Sort.intersect(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0, p); return { dict: dict, data: Bs_internalAVLset.ofSortedArrayAux(tmp2, 0, k) @@ -550,5 +550,5 @@ exports.get = get; exports.getNull = getNull; exports.getExn = getExn; exports.split = split; -exports.checkInvariant = checkInvariant; +exports.checkInvariantInternal = checkInvariantInternal; /* No side effect */ diff --git a/lib/js/bs_SetString.js b/lib/js/bs_SetString.js index 3fcd8d3db35..ab3182c7df3 100644 --- a/lib/js/bs_SetString.js +++ b/lib/js/bs_SetString.js @@ -307,7 +307,7 @@ var getNull = Bs_internalSetString.findNull; var getExn = Bs_internalSetString.findExn; -var checkInvariant = Bs_internalAVLset.checkInvariant; +var checkInvariantInternal = Bs_internalAVLset.checkInvariantInternal; exports.empty = empty; exports.ofArray = ofArray; @@ -341,5 +341,5 @@ exports.get = get; exports.getNull = getNull; exports.getExn = getExn; exports.split = split; -exports.checkInvariant = checkInvariant; +exports.checkInvariantInternal = checkInvariantInternal; /* No side effect */ diff --git a/lib/js/bs_SetStringM.js b/lib/js/bs_SetStringM.js index 26cd01567fd..d655afbf312 100644 --- a/lib/js/bs_SetStringM.js +++ b/lib/js/bs_SetStringM.js @@ -134,8 +134,8 @@ function ofSortedArrayUnsafe(xs) { }; } -function checkInvariant(d) { - return Bs_internalAVLset.checkInvariant(d.data); +function checkInvariantInternal(d) { + return Bs_internalAVLset.checkInvariantInternal(d.data); } function add(d, k) { @@ -371,7 +371,7 @@ function intersect(dataa, datab) { }; } else { var tmp2 = new Array(sizea < sizeb ? sizea : sizeb); - var k = Bs_SortString.inter(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0); + var k = Bs_SortString.intersect(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0); return { data: Bs_internalAVLset.ofSortedArrayAux(tmp2, 0, k) }; @@ -501,5 +501,5 @@ exports.get = get; exports.getNull = getNull; exports.getExn = getExn; exports.split = split; -exports.checkInvariant = checkInvariant; +exports.checkInvariantInternal = checkInvariantInternal; /* No side effect */ diff --git a/lib/js/bs_Sort.js b/lib/js/bs_Sort.js index 9312549b257..10586b2c49a 100644 --- a/lib/js/bs_Sort.js +++ b/lib/js/bs_Sort.js @@ -193,7 +193,7 @@ function union(src, src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs, cmp) }; } -function inter(src, src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs, cmp) { +function intersect(src, src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs, cmp) { var src1r = src1ofs + src1len | 0; var src2r = src2ofs + src2len | 0; var _i1 = src1ofs; @@ -332,7 +332,7 @@ function sortTo(src, srcofs, dst, dstofs, len, cmp) { } } -function stableSortBy(a, cmp) { +function stableSortInPlaceBy(a, cmp) { var l = a.length; if (l <= 5) { return insertionSort(a, 0, a, 0, l, cmp); @@ -346,12 +346,13 @@ function stableSortBy(a, cmp) { } } -function sortByCont(xs, cmp) { - xs.sort(cmp); - return xs; +function stableSortBy(a, cmp) { + var b = Bs_Array.copy(a); + stableSortInPlaceBy(b, cmp); + return b; } -function binarySearch(sorted, key, cmp) { +function binarySearchBy(sorted, key, cmp) { var len = sorted.length; if (len) { var lo = sorted[0]; @@ -412,10 +413,10 @@ function binarySearch(sorted, key, cmp) { exports.strictlySortedLength = strictlySortedLength; exports.isSorted = isSorted; +exports.stableSortInPlaceBy = stableSortInPlaceBy; exports.stableSortBy = stableSortBy; exports.union = union; -exports.inter = inter; +exports.intersect = intersect; exports.diff = diff; -exports.sortByCont = sortByCont; -exports.binarySearch = binarySearch; +exports.binarySearchBy = binarySearchBy; /* No side effect */ diff --git a/lib/js/bs_SortInt.js b/lib/js/bs_SortInt.js index 2d2ec71e8b1..4d98f5c4d0b 100644 --- a/lib/js/bs_SortInt.js +++ b/lib/js/bs_SortInt.js @@ -190,7 +190,7 @@ function union(src, src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs) { }; } -function inter(src, src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs) { +function intersect(src, src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs) { var src1r = src1ofs + src1len | 0; var src2r = src2ofs + src2len | 0; var _i1 = src1ofs; @@ -327,7 +327,7 @@ function sortTo(src, srcofs, dst, dstofs, len) { } } -function stableSort(a) { +function stableSortInPlace(a) { var l = a.length; if (l <= 5) { return insertionSort(a, 0, a, 0, l); @@ -341,6 +341,12 @@ function stableSort(a) { } } +function stableSort(a) { + var b = Bs_Array.copy(a); + stableSortInPlace(b); + return b; +} + function binarySearch(sorted, key) { var len = sorted.length; if (len) { @@ -396,9 +402,10 @@ function binarySearch(sorted, key) { exports.strictlySortedLength = strictlySortedLength; exports.isSorted = isSorted; +exports.stableSortInPlace = stableSortInPlace; exports.stableSort = stableSort; exports.binarySearch = binarySearch; exports.union = union; -exports.inter = inter; +exports.intersect = intersect; exports.diff = diff; /* No side effect */ diff --git a/lib/js/bs_SortString.js b/lib/js/bs_SortString.js index 2d2ec71e8b1..4d98f5c4d0b 100644 --- a/lib/js/bs_SortString.js +++ b/lib/js/bs_SortString.js @@ -190,7 +190,7 @@ function union(src, src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs) { }; } -function inter(src, src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs) { +function intersect(src, src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs) { var src1r = src1ofs + src1len | 0; var src2r = src2ofs + src2len | 0; var _i1 = src1ofs; @@ -327,7 +327,7 @@ function sortTo(src, srcofs, dst, dstofs, len) { } } -function stableSort(a) { +function stableSortInPlace(a) { var l = a.length; if (l <= 5) { return insertionSort(a, 0, a, 0, l); @@ -341,6 +341,12 @@ function stableSort(a) { } } +function stableSort(a) { + var b = Bs_Array.copy(a); + stableSortInPlace(b); + return b; +} + function binarySearch(sorted, key) { var len = sorted.length; if (len) { @@ -396,9 +402,10 @@ function binarySearch(sorted, key) { exports.strictlySortedLength = strictlySortedLength; exports.isSorted = isSorted; +exports.stableSortInPlace = stableSortInPlace; exports.stableSort = stableSort; exports.binarySearch = binarySearch; exports.union = union; -exports.inter = inter; +exports.intersect = intersect; exports.diff = diff; /* No side effect */ diff --git a/lib/js/bs_internalAVLset.js b/lib/js/bs_internalAVLset.js index 6725b9d3932..396c88069c5 100644 --- a/lib/js/bs_internalAVLset.js +++ b/lib/js/bs_internalAVLset.js @@ -384,7 +384,7 @@ function toList0(s) { return toListAux(/* [] */0, s); } -function checkInvariant(_v) { +function checkInvariantInternal(_v) { while(true) { var v = _v; if (v !== null) { @@ -393,7 +393,7 @@ function checkInvariant(_v) { var diff = height(l) - height(r) | 0; if (diff <= 2) { if (diff >= -2) { - if (checkInvariant(l)) { + if (checkInvariantInternal(l)) { _v = r; continue ; @@ -954,7 +954,7 @@ exports.partitionCopy = partitionCopy; exports.lengthNode = lengthNode; exports.length0 = length0; exports.toList0 = toList0; -exports.checkInvariant = checkInvariant; +exports.checkInvariantInternal = checkInvariantInternal; exports.fillArray = fillArray; exports.toArray0 = toArray0; exports.ofSortedArrayAux = ofSortedArrayAux; diff --git a/lib/js/bs_internalAVLtree.js b/lib/js/bs_internalAVLtree.js index d25af65feba..c79f78cc15d 100644 --- a/lib/js/bs_internalAVLtree.js +++ b/lib/js/bs_internalAVLtree.js @@ -565,7 +565,7 @@ function toList0(s) { return toListAux(/* [] */0, s); } -function checkInvariant(_v) { +function checkInvariantInternal(_v) { while(true) { var v = _v; if (v !== null) { @@ -574,7 +574,7 @@ function checkInvariant(_v) { var diff = height(l) - height(r) | 0; if (diff <= 2) { if (diff >= -2) { - if (checkInvariant(l)) { + if (checkInvariantInternal(l)) { _v = r; continue ; @@ -1132,7 +1132,7 @@ exports.partitionShared0 = partitionShared0; exports.lengthNode = lengthNode; exports.length0 = length0; exports.toList0 = toList0; -exports.checkInvariant = checkInvariant; +exports.checkInvariantInternal = checkInvariantInternal; exports.fillArray = fillArray; exports.toArray0 = toArray0; exports.keysToArray0 = keysToArray0; From c27c44388ae404c44b6114f164675a11c4b49939 Mon Sep 17 00:00:00 2001 From: Hongbo Zhang Date: Sat, 27 Jan 2018 10:06:36 +0800 Subject: [PATCH 04/17] no t0 anymore --- jscomp/others/.depend | 8 +- jscomp/others/Makefile | 1 + jscomp/others/bs_Map.ml | 418 +++++---------------- jscomp/others/bs_Map.mli | 156 +------- jscomp/others/bs_MapM.ml | 2 +- jscomp/others/bs_SortedMapDict.ml | 257 +++++++++++++ jscomp/others/bs_SortedMapDict.mli | 177 +++++++++ jscomp/others/bs_internalAVLtree.ml | 10 +- jscomp/others/bs_internalAVLtree.mli | 2 +- lib/js/bs_Map.js | 521 ++++----------------------- lib/js/bs_SortedMapDict.js | 375 +++++++++++++++++++ lib/js/bs_internalAVLtree.js | 6 +- 12 files changed, 1005 insertions(+), 928 deletions(-) create mode 100644 jscomp/others/bs_SortedMapDict.ml create mode 100644 jscomp/others/bs_SortedMapDict.mli create mode 100644 lib/js/bs_SortedMapDict.js diff --git a/jscomp/others/.depend b/jscomp/others/.depend index 9e4bb8e249f..99bd5692106 100644 --- a/jscomp/others/.depend +++ b/jscomp/others/.depend @@ -46,8 +46,9 @@ bs_HashSetInt.cmj : bs_internalSetBuckets.cmj bs_internalBucketsType.cmj \ bs_Bag.cmj : bs_BagM.cmj : bs_Cmp.cmj : bs_Cmp.cmi -bs_Map.cmj : bs_internalAVLtree.cmj bs_Cmp.cmj bs_Bag.cmj bs_Array.cmj \ - bs_Map.cmi +bs_SortedMapDict.cmj : bs_internalAVLtree.cmj bs_Cmp.cmj bs_Array.cmj \ + bs_SortedMapDict.cmi +bs_Map.cmj : bs_SortedMapDict.cmj bs_Cmp.cmj bs_Array.cmj bs_Map.cmi bs_internalMapInt.cmj : bs_internalAVLtree.cmj bs_Sort.cmj bs_Array.cmj bs_internalMapString.cmj : bs_internalAVLtree.cmj bs_Sort.cmj bs_Array.cmj bs_MapString.cmj : bs_internalMapString.cmj bs_internalAVLtree.cmj \ @@ -118,7 +119,8 @@ bs_HashSet.cmi : bs_Hash.cmi bs_HashSetString.cmi : bs_HashSetInt.cmi : bs_Cmp.cmi : -bs_Map.cmi : bs_Cmp.cmi +bs_SortedMapDict.cmi : bs_Cmp.cmi +bs_Map.cmi : bs_SortedMapDict.cmi bs_Cmp.cmi bs_MapString.cmi : bs_MapInt.cmi : bs_MapStringM.cmi : diff --git a/jscomp/others/Makefile b/jscomp/others/Makefile index 27b0240f62b..8e45db0bb2e 100644 --- a/jscomp/others/Makefile +++ b/jscomp/others/Makefile @@ -31,6 +31,7 @@ SOURCE_LIST= node_path node_fs node_process dict node_module js_array js_string bs_Bag\ bs_BagM\ bs_Cmp\ + bs_SortedMapDict\ bs_Map\ bs_internalMapInt\ bs_internalMapString\ diff --git a/jscomp/others/bs_Map.ml b/jscomp/others/bs_Map.ml index 202f21c5a2e..f33d6d3b1c9 100644 --- a/jscomp/others/bs_Map.ml +++ b/jscomp/others/bs_Map.ml @@ -12,377 +12,133 @@ (***********************************************************************) (** Adapted by authors of BuckleScript without using functors *) -module N = Bs_internalAVLtree -module B = Bs_Bag +module N = Bs_SortedMapDict module A = Bs_Array -type ('key, 'a, 'id) t0 = ('key, 'a) N.t0 +type ('key, 'a, 'id) t0 = ('key, 'a, 'id ) N.t +type ('key, 'id ) dict = ('key, 'id) Bs_Cmp.t +type ('k,'v,'id) t = { + dict : ('k,'id) dict; + data : ('k,'v, 'id) t0 +} +[@@bs.deriving abstract] -type ('k,'v,'id) t = - (('k,'id) Bs_Cmp.t, - ('k,'v, 'id) t0 ) B.bag -let rec set0 (t : _ t0) newK newD ~cmp = - match N.toOpt t with - | None -> N.singleton0 newK newD - | Some n -> - let k= N.key n in - let c = (Bs_Cmp.getCmp cmp) newK k [@bs] in - if c = 0 then - N.return (N.updateValue n newD) - else - let l,r,v = N.left n, N.right n, N.value n in - if c < 0 then (* Worth optimize for reference equality? *) - N.bal (set0 ~cmp l newK newD ) k v r - else - N.bal l k v (set0 ~cmp r newK newD ) - -let rec update0 (t : _ t0) newK f ~cmp = - match N.toOpt t with - | None -> - begin match f None [@bs] with - | None -> t - | Some newD -> N.singleton0 newK newD - end - | Some n -> - let k= N.key n in - let c = (Bs_Cmp.getCmp cmp) newK k [@bs] in - if c = 0 then - match f (Some (N.value n)) [@bs] with - | None -> - let l, r = N.left n , N.right n in - begin match N.toOpt l, N.toOpt r with - | None, _ -> r - | _, None -> l - | _, Some rn -> - let kr, vr = ref (N.key rn), ref (N.value rn) in - let r = N.removeMinAuxWithRef rn kr vr in - N.bal l !kr !vr r - end - | Some newD -> N.return (N.updateValue n newD) - else - let l,r,v = N.left n, N.right n, N.value n in - if c < 0 then - let ll = (update0 ~cmp l newK f ) in - if l == ll then - t - else - N.bal ll k v r - else - let rr = (update0 ~cmp r newK f) in - if r == rr then t - else N.bal l k v rr - -(* unboxing API was not exported - since the correct API is really awkard - [bool -> 'k Js.null -> ('a Js.null * bool)] - even for specialized [k] the first [bool] can - be erased, maybe the perf boost does not justify the inclusion of such API - - [updateWithNull m x f] - the callback to [f exist v] - when [v] is non-null, - [exist] is guaranteed to be true - [v] is guranteed to be [null], - when [exist] is [true], [v] could be [null], - since ['a] is polymorphic -*) - - -let rec removeAux0 n x ~cmp = - let l,v,r = N.(left n, key n, right n ) in - let c = (Bs_Cmp.getCmp cmp) x v [@bs] in - if c = 0 then - match N.toOpt l, N.toOpt r with - | None, _ -> r - | _, None -> l - | _, Some rn -> - let kr, vr = ref (N.key rn), ref (N.value rn) in - let r = N.removeMinAuxWithRef rn kr vr in - N.bal l !kr !vr r - else if c < 0 then - match N.toOpt l with - | None -> N.return n (* Nothing to remove *) - | Some left -> - let ll = removeAux0 left x ~cmp in - if ll == l then (N.return n) - else N.bal ll v (N.value n) r - else - match N.toOpt r with - | None -> N.return n (* Nothing to remove *) - | Some right -> - let rr = removeAux0 ~cmp right x in - if rr == r then N.return n - else N.bal l v (N.value n) rr - -let remove0 n x ~cmp = - match N.toOpt n with - | None -> N.empty0 - | Some n -> removeAux0 n x ~cmp - -let mergeArray0 h arr ~cmp = - let len = A.length arr in - let v = ref h in - for i = 0 to len - 1 do - let key,value = A.getUnsafe arr i in - v := set0 !v ~cmp key value - done ; - !v - -let rec splitAuxPivot n x pres ~cmp = - let l,v,d,r = N.(left n , key n, value n, right n) in - let c = (Bs_Cmp.getCmp cmp) x v [@bs] in - if c = 0 then begin - pres := Some d; - (l, r) - end - else - if c < 0 then - match N.toOpt l with - | None -> - N.(empty, return n) - | Some l -> - let (ll,rl) = splitAuxPivot ~cmp l x pres in - (ll, N.join rl v d r) - else - match N.toOpt r with - | None -> - N.(return n, empty) - | Some r -> - let (lr, rr) = splitAuxPivot ~cmp r x pres in - (N.join l v d lr, rr) - - -let split0 n x ~cmp = - match N.toOpt n with - | None -> - N.(empty, empty), None - | Some n -> - let pres = ref None in - let v = splitAuxPivot ~cmp n x pres in - v, !pres - -let rec merge0 s1 s2 f ~cmp = - match N.(toOpt s1, toOpt s2) with - (None, None) -> N.empty - | Some _, None -> - N.filterMap0 s1 (fun[@bs] k v -> - f k (Some v) None [@bs] - ) - | None, Some _ -> - N.filterMap0 s2 (fun[@bs] k v -> - f k None (Some v) [@bs] - ) - | Some s1n , Some s2n -> - if N.h s1n >= N.h s2n then - let l1, v1, d1, r1 = N.(left s1n, key s1n, value s1n, right s1n) in - let d2 = ref None in - let (l2, r2) = splitAuxPivot ~cmp s2n v1 d2 in - let d2 = !d2 in - let newLeft = merge0 ~cmp l1 l2 f in - let newD = f v1 (Some d1) d2 [@bs] in - let newRight = merge0 ~cmp r1 r2 f in - N.concatOrJoin newLeft v1 newD newRight - else - let l2,v2,d2,r2 = N.(left s2n, key s2n, value s2n, right s2n) in - let d1 = ref None in - let (l1, r1) = splitAuxPivot ~cmp s1n v2 d1 in - let d1 = !d1 in - let newLeft = merge0 ~cmp l1 l2 f in - let newD = (f v2 d1 (Some d2) [@bs]) in - let newRight = (merge0 ~cmp r1 r2 f) in - N.concatOrJoin newLeft v2 newD newRight - -let rec removeArrayAux t xs i len ~cmp = - if i < len then - let ele = A.getUnsafe xs i in - let u = removeAux0 t ele ~cmp in - match N.toOpt u with - | None -> u - | Some t -> removeArrayAux t xs (i + 1) len ~cmp - else - N.return t - -let removeArray0 t keys ~cmp = - let len = A.length keys in - match N.toOpt t with - | None -> N.empty0 - | Some t -> removeArrayAux t keys 0 len ~cmp - -let ofArray (type k) (type id) data ~(dict : (k,id) Bs_Cmp.t) = - let module M = (val dict ) in - B.bag ~dict ~data:(N.ofArray0 ~cmp:M.cmp data) - -let remove (type k) (type id) (m : (k,_,id) t) x = - let odata = B.data m in - match N.toOpt odata with - | None -> m - | Some data -> - let dict = B.dict m in - let module M = (val dict) in - let newData = removeAux0 ~cmp:M.cmp data x in - if newData == odata then m - else B.bag ~dict ~data:newData - -let removeArray (type k) (type id) (m : (k,_,id) t) xs = - let odata = B.data m in - match N.toOpt odata with - | None -> m - | Some data -> - let dict = B.dict m in - let module M = (val dict) in - let len = A.length xs in - let newData = removeArrayAux data xs 0 len ~cmp:M.cmp in - if newData == odata then m - else B.bag ~dict ~data:newData - -let set (type k) (type id) (map : (k,_,id) t) key data = - let dict,map = B.(dict map, data map) in - let module X = (val dict) in - B.bag ~dict ~data:(set0 ~cmp:X.cmp map key data ) - -let mergeArray (type elt) (type id) (m : (elt,_,id) t) e = - let dict, data = B.(dict m, data m) in +let ofArray (type k) (type id) data ~(dict : (k,id) Bs_Cmp.t) = let module M = (val dict) in - let newData = mergeArray0 ~cmp:M.cmp data e in - B.bag ~dict ~data:newData + t ~dict ~data:(N.ofArray ~cmp:M.cmp data) -let update (type k) (type id) (map : (k,_,id) t) key f = - let dict,map = B.(dict map, data map) in - let module X = (val dict) in - B.bag ~dict ~data:(update0 ~cmp:X.cmp map key f ) -let split (type k) (type id) (map : (k,_,id) t) x = - let dict,map = B.(dict map, data map) in - let module M = (val dict) in - let (l,r),b = split0 ~cmp:M.cmp map x in - (B.bag ~dict ~data:l, B.bag ~dict ~data:r), b +let remove (type k) (type id) (m : (k,_,id) t) x = + let module M = (val dict m) in + let odata = data m in + let newData = N.remove odata x ~cmp:M.cmp in + if newData == odata then m + else t ~dict:(module M) ~data:newData + +let removeMany (type k) (type id) (m : (k,_,id) t) x = + let module M = (val dict m) in + let odata = data m in + let newData = N.removeMany odata x ~cmp:M.cmp in + if newData == odata then m + else t ~dict:(module M) ~data:newData + +let set (type k) (type id) (m : (k,_,id) t) key d = + let module X = (val dict m) in + t ~dict:(module X) ~data:(N.set ~cmp:X.cmp (data m) key d) + +let mergeMany (type elt) (type id) (m : (elt,_,id) t) e = + let module M = (val dict m) in + t ~dict:(module M) ~data:(N.mergeMany ~cmp:M.cmp (data m) e) + +let update (type k) (type id) (m : (k,_,id) t) key f = + let module X = (val dict m) in + t ~dict:(module X) ~data:(N.update ~cmp:X.cmp (data m) key f ) + +let split (type k) (type id) (m : (k,_,id) t) x = + let module M = (val dict m) in + let (l,r),b = N.split ~cmp:M.cmp (data m) x in + (t ~dict:(module M) ~data:l, t ~dict:(module M) ~data:r), b let merge (type k) (type id) (s1 : (k,_,id) t) (s2 : (k,_,id) t) f = - let dict, s1_data, s2_data = B.(dict s1, data s1, data s2) in - let module X = (val dict) in - B.bag ~data:(merge0 ~cmp:X.cmp s1_data s2_data f) - ~dict + let module X = (val dict s1) in + t ~dict:(module X) ~data:(N.merge ~cmp:X.cmp (data s1) (data s2) f) let empty ~dict = - B.bag ~dict ~data:N.empty0 + t ~dict ~data:N.empty let isEmpty map = - N.isEmpty0 (B.data map) - -let singleton k v ~dict = - B.bag ~dict ~data:(N.singleton0 k v) + N.isEmpty (data map) let cmp (type k) (type id) (m1 : (k,'v,id) t) (m2 : (k,'v,id) t) cmp = - let dict, m1_data, m2_data = B.(dict m1, data m1, data m2) in - let module X = (val dict) in - N.cmp0 ~kcmp:X.cmp ~vcmp:cmp m1_data m2_data + let module X = (val dict m1) in + N.cmp ~kcmp:X.cmp ~vcmp:cmp (data m1) (data m2) let eq (type k) (type id) (m1 : (k,'v,id) t) (m2 : (k,'v,id) t) cmp = - let dict, m1_data, m2_data = B.(dict m1, data m1, data m2) in - let module X = (val dict) in - N.eq0 ~kcmp:X.cmp ~vcmp:cmp m1_data m2_data + let module X = (val dict m1) in + N.eq ~kcmp:X.cmp ~veq:cmp (data m1) (data m2) -let forEach m f = N.iter0 (B.data m) f +let forEach m f = N.forEach (data m) f -let reduce m acc f = N.fold0 (B.data m) acc f +let reduce m acc f = N.reduce (data m) acc f -let every m f = N.every0 (B.data m) f +let every m f = N.every (data m) f -let some m f = N.some0 (B.data m) f +let some m f = N.some (data m) f let keepBy m f = - let dict, map = B.(dict m, data m) in - B.bag ~dict ~data:(N.filterShared0 map f) + t ~dict:(dict m) ~data:(N.keepBy (data m) f) let partition m p = - let dict, map = B.(dict m, data m) in - let l,r = N.partitionShared0 map p in - B.bag ~dict ~data:l, B.bag ~dict ~data:r + let dict = dict m in + let l,r = N.partition (data m) p in + t ~dict ~data:l, t ~dict ~data:r let map m f = - let dict, map = B.(dict m, data m) in - B.bag ~dict ~data:(N.map0 map f) + t ~dict:(dict m) ~data:(N.map (data m) f) + let mapWithKey m f = - let dict,map = B.(dict m, data m) in - B.bag ~dict ~data:(N.mapi0 map f) - -let size map = - N.length0 (B.data map) - -let toList map = - N.toList0 (B.data map) -let toArray m = - N.toArray0 (B.data m) -let keysToArray m = - N.keysToArray0 (B.data m) -let valuesToArray m = - N.valuesToArray0 (B.data m) - -let minKey m = N.minKeyOpt0 (B.data m) -let minKeyNull m = N.minKeyNull0 (B.data m) -let maxKey m = N.maxKeyOpt0 (B.data m) -let maxKeyNull m = N.maxKeyNull0 (B.data m) -let minimum m = N.minKVOpt0 (B.data m) -let minNull m = N.minKVNull0 (B.data m) -let maximum m = N.maxKVOpt0 (B.data m) -let maxNull m = N.maxKVNull0 (B.data m) + t ~dict:(dict m) ~data:(N.mapWithKey (data m) f) + +let size map = N.size (data map) +let toList map = N.toList (data map) +let toArray m = N.toArray (data m) +let keysToArray m = N.keysToArray (data m) +let valuesToArray m = N.valuesToArray (data m) +let minKey m = N.minKey (data m) +let minKeyNull m = N.minKeyNull (data m) +let maxKey m = N.maxKey (data m) +let maxKeyNull m = N.maxKeyNull (data m) +let minimum m = N.minimum (data m) +let minNull m = N.minNull (data m) +let maximum m = N.maximum (data m) +let maxNull m = N.maxNull (data m) let get (type k) (type id) (map : (k,_,id) t) x = - let module X = (val B.dict map) in - N.findOpt0 ~cmp:X.cmp (B.data map) x + let module X = (val dict map) in + N.get ~cmp:X.cmp (data map) x let getNull (type k) (type id) (map : (k,_,id) t) x = - let module X = (val B.dict map) in - N.findNull0 ~cmp:X.cmp (B.data map) x + let module X = (val dict map) in + N.getNull ~cmp:X.cmp (data map) x let getWithDefault (type k) (type id) (map : (k,_,id) t) x def = - let module X = (val B.dict map) in - N.findWithDefault0 ~cmp:X.cmp (B.data map) x def + let module X = (val dict map) in + N.getWithDefault ~cmp:X.cmp (data map) x def let getExn (type k) (type id) (map : (k,_,id) t) x = - let module X = (val B.dict map) in - N.findExn0 ~cmp:X.cmp (B.data map) x + let module X = (val dict map) in + N.getExn ~cmp:X.cmp (data map) x let has (type k) (type id) (map : (k,_,id) t) x = - let module X = (val B.dict map) in - N.mem0 ~cmp:X.cmp (B.data map) x + let module X = (val dict map) in + N.has ~cmp:X.cmp (data map) x let checkInvariantInternal m = - N.checkInvariantInternal (B.data m) -let empty0 = N.empty0 -let ofArray0 = N.ofArray0 -let isEmpty0 = N.isEmpty0 -let singleton0 = N.singleton0 - -let cmp0 = N.cmp0 -let eq0 = N.eq0 -let has0 = N.mem0 -let forEach0 = N.iter0 -let reduce0 = N.fold0 -let every0 = N.every0 -let some0 = N.some0 -let size0 = N.length0 -let toList0 = N.toList0 -let toArray0 = N.toArray0 - -let keysToArray0 = N.keysToArray0 -let valuesToArray0 = N.valuesToArray0 - -let minimum0 = N.minKVOpt0 -let maximum0 = N.maxKVOpt0 -let get0 = N.findOpt0 -let getNull0 = N.findNull0 -let getWithDefault0 = N.findWithDefault0 -let getExn0 = N.findExn0 - -let mapi0 = N.mapi0 -let map0 = N.map0 + N.checkInvariantInternal (data m) -let filter0 = N.filterShared0 -let partition0 = N.partitionShared0 -let getData = B.data -let getDict = B.dict -let packDictData = B.bag +let getData = data +let getDict = dict +let packDictData = t diff --git a/jscomp/others/bs_Map.mli b/jscomp/others/bs_Map.mli index 455085ee6f0..b572fecd13d 100644 --- a/jscomp/others/bs_Map.mli +++ b/jscomp/others/bs_Map.mli @@ -13,7 +13,9 @@ (** Adapted by authors of BuckleScript without using functors *) -type ('k,'v,'id) t +type ('k,'v,'id) t + +type ('key, 'id ) dict = ('key, 'id) Bs_Cmp.t (** The data associated with a comparison function *) (* @@ -38,7 +40,7 @@ type ('k,'v,'id) t (* should not export [Bs_Cmp.compare]. should only export [Bs_Cmp.t] or [Bs_Cmp.cmp] instead *) -val empty: dict:('k, 'id) Bs_Cmp.t -> ('k, 'a, 'id) t +val empty: dict:('k, 'id) dict -> ('k, 'a, 'id) t val isEmpty: _ t -> bool val has: ('k, 'a, 'id) t -> 'k -> bool @@ -80,7 +82,7 @@ val size: ('k, 'a, 'id) t -> int val toList: ('k, 'a, 'id) t -> ('k * 'a) list (** In increasing order*) val toArray: ('k, 'a, 'id) t -> ('k * 'a) array -val ofArray: ('k * 'a) array -> dict:('k,'id) Bs_Cmp.t -> ('k,'a,'id) t +val ofArray: ('k * 'a) array -> dict:('k,'id) dict -> ('k,'a,'id) t val keysToArray: ('k, 'a, 'id) t -> 'k array val valuesToArray: ('k, 'a, 'id) t -> 'a array val minKey: ('k, _, _) t -> 'k option @@ -101,7 +103,7 @@ val checkInvariantInternal: _ t -> bool val remove: ('k, 'a, 'id) t -> 'k -> ('k, 'a, 'id) t (** [remove m x] when [x] is not in [m], [m] is returned reference unchanged *) -val removeArray: ('k, 'a, 'id) t -> 'k array -> ('k, 'a, 'id) t +val removeMany: ('k, 'a, 'id) t -> 'k array -> ('k, 'a, 'id) t val set: ('k, 'a, 'id) t -> 'k -> 'a -> ('k, 'a, 'id) t @@ -109,7 +111,7 @@ val set: [m], with a new binding of [x] to [y]. If [x] was already bound in [m], its previous binding disappears. *) val update: ('k, 'a, 'id) t -> 'k -> ('a option -> 'a option [@bs]) -> ('k, 'a, 'id) t -val mergeArray: +val merge: ('k, 'a, 'id) t -> ('k * 'a) array -> ('k, 'a, 'id) t val merge: @@ -122,6 +124,11 @@ val merge: value, is determined with the function [f]. *) +val mergeMany: + ('a, 'b, 'id) t -> + ('a * 'b) array -> + ('a, 'b, 'id) t + val keepBy: ('k, 'a, 'id) t -> ('k -> 'a -> bool [@bs]) -> @@ -161,141 +168,8 @@ val map: ('k, 'a, 'id) t -> ('a -> 'b [@bs]) -> ('k ,'b,'id ) t val mapWithKey: ('k, 'a, 'id) t -> ('k -> 'a -> 'b [@bs]) -> ('k, 'b, 'id) t -(****************************************************************************) - -type ('k, 'v, 'id) t0 -(** - ['k] the key type - ['v] the value type - ['id] is a unique type for each keyed module -*) - - -val getData: ('k,'v,'id) t -> ('k,'v,'id) t0 -val getDict: ('k,'v,'id) t -> ('k,'id) Bs_Cmp.t -val packDictData: dict:('k, 'id) Bs_Cmp.t -> data:('k, 'v, 'id) t0 -> ('k, 'v, 'id) t - -val empty0 : ('k, 'a, 'id) t0 +val getDict: ('a, 'b, 'c) t -> ('a, 'c) dict -val ofArray0: - ('k * 'a) array -> - cmp: ('k,'id) Bs_Cmp.cmp -> - ('k,'a,'id) t0 - -val isEmpty0 : ('k, 'a,'id) t0 -> bool - -val has0: - ('k, 'a, 'id) t0 -> - 'k -> - cmp: ('k,'id) Bs_Cmp.cmp -> - bool - -val set0: - ('k, 'a, 'id) t0 -> - 'k -> - 'a -> - cmp: ('k,'id) Bs_Cmp.cmp -> - ('k, 'a, 'id) t0 - -val update0: - ('k, 'a, 'id) t0 -> - 'k -> - ('a option -> 'a option [@bs]) -> - cmp:('k, 'id) Bs_Cmp.cmp -> - ('k, 'a, 'id) t0 +val getData: ('a, 'b, 'c) t -> ('a, 'b, 'c) Bs_SortedMapDict.t - - -val remove0: - ('k, 'a, 'id) t0 -> - 'k -> - cmp: ('k,'id) Bs_Cmp.cmp -> - ('k, 'a, 'id) t0 - -val removeArray0: - ('k, 'a, 'id) t0 -> - 'k array -> - cmp: ('k,'id) Bs_Cmp.cmp -> - ('k, 'a, 'id) t0 - -val merge0: - ('k, 'a, 'id ) t0 -> - ('k, 'b,'id) t0 -> - ('k -> 'a option -> 'b option -> 'c option [@bs]) -> - cmp: ('k,'id) Bs_Cmp.cmp -> - ('k, 'c,'id) t0 - -val cmp0: - ('k, 'a, 'id) t0 -> ('k, 'a, 'id) t0 -> - kcmp:('k,'id) Bs_Cmp.cmp -> - vcmp:('a -> 'a -> int [@bs]) -> - int - -val eq0: - ('k, 'a, 'id) t0 -> - ('k, 'a, 'id) t0 -> - kcmp: ('k,'id) Bs_Cmp.cmp -> - vcmp:('a -> 'a -> bool [@bs]) -> - bool - - -val forEach0: ('k, 'a, 'id) t0 -> ('k -> 'a -> unit [@bs]) -> unit - -val reduce0: ('k, 'a, 'id) t0 -> 'b -> ('b -> 'k -> 'a -> 'b [@bs]) -> 'b - -val every0: ('k, 'a, 'id) t0 -> ('k -> 'a -> bool [@bs]) -> bool - -val some0: ('k, 'a, 'id) t0 -> ('k -> 'a -> bool [@bs]) -> bool - -val filter0: - ('k, 'a, 'id) t0 -> - ('k -> 'a -> bool [@bs]) -> - ('k, 'a, 'id) t0 - -val partition0: - ('k, 'a, 'id) t0 -> - ('k -> 'a -> bool [@bs]) -> - ('k, 'a, 'id) t0 * ('k, 'a, 'id) t0 - -val size0: ('k, 'a, 'id) t0 -> int - -val toList0: ('k, 'a, 'id) t0 -> ('k * 'a) list - -val minimum0: ('k, 'a, 'id) t0 -> ('k * 'a) option - -val maximum0: ('k, 'a, 'id) t0 -> ('k * 'a) option - -val split0: - ('k, 'a, 'id) t0 -> - 'k -> - cmp: ('k,'id) Bs_Cmp.cmp -> - (('k, 'a, 'id) t0 * ('k, 'a, 'id) t0) * 'a option - -val get0: - ('k, 'a, 'id) t0 -> - 'k -> - cmp: ('k,'id) Bs_Cmp.cmp -> - 'a option - -val getNull0: - ('k, 'a, 'id) t0 -> - 'k -> - cmp: ('k,'id) Bs_Cmp.cmp -> - 'a Js.null - -val getWithDefault0: - ('k, 'a, 'id) t0 -> - 'k -> - 'a -> - cmp: ('k,'id) Bs_Cmp.cmp -> - 'a -val getExn0: - ('k, 'a, 'id) t0 -> - 'k -> - cmp: ('k,'id) Bs_Cmp.cmp -> - 'a - -val map0: ('k, 'a, 'id) t0 -> ('a -> 'b [@bs]) -> ('k ,'b,'id ) t0 - -val mapi0: ('k, 'a, 'id) t0 -> ('k -> 'a -> 'b [@bs]) -> ('k, 'b, 'id) t0 - +val packDictData: dict:('a, 'b) dict -> data:('a, 'c, 'b) Bs_SortedMapDict.t -> ('a, 'c, 'b) t diff --git a/jscomp/others/bs_MapM.ml b/jscomp/others/bs_MapM.ml index 360bc43db42..46840ec1c67 100644 --- a/jscomp/others/bs_MapM.ml +++ b/jscomp/others/bs_MapM.ml @@ -179,7 +179,7 @@ let cmp (type k) (type id) (m1 : (k,'v,id) t) (m2 : (k,'v,id) t) cmp = let eq (type k) (type id) (m1 : (k,'v,id) t) (m2 : (k,'v,id) t) cmp = let dict, m1_data, m2_data = B.(dict m1, data m1, data m2) in let module M = (val dict) in - N.eq0 ~kcmp:M.cmp ~vcmp:cmp m1_data m2_data + N.eq0 ~kcmp:M.cmp ~veq:cmp m1_data m2_data let map m f = let dict, map = B.(dict m, data m) in B.bag ~dict ~data:(N.map0 map f) diff --git a/jscomp/others/bs_SortedMapDict.ml b/jscomp/others/bs_SortedMapDict.ml new file mode 100644 index 00000000000..436b6a7d31c --- /dev/null +++ b/jscomp/others/bs_SortedMapDict.ml @@ -0,0 +1,257 @@ +(* Copyright (C) 2017 Authors of BuckleScript + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * In addition to the permissions granted to you by the LGPL, you may combine + * or link a "work that uses the Library" with a publicly distributed version + * of this file to produce a combined library or application, then distribute + * that combined work under the terms of your choosing, with no requirement + * to comply with the obligations normally placed on you by section 4 of the + * LGPL version 3 (or the corresponding section of a later version of the LGPL + * should you choose to use a later version). + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) + +module N = Bs_internalAVLtree +module A = Bs_Array + +type ('key, 'a, 'id) t = ('key, 'a) N.t0 + +type ('key, 'id) cmp = ('key, 'id) Bs_Cmp.cmp + +let empty = N.empty0 +let ofArray = N.ofArray0 +let isEmpty = N.isEmpty0 +let cmp = N.cmp0 +let eq = N.eq0 +let has = N.mem0 +let forEach = N.iter0 +let reduce = N.fold0 +let every = N.every0 +let some = N.some0 +let size = N.length0 +let toList = N.toList0 +let toArray = N.toArray0 +let keysToArray = N.keysToArray0 +let valuesToArray = N.valuesToArray0 + +let minimum = N.minKVOpt0 +let maximum = N.maxKVOpt0 +let minKey = N.minKeyOpt0 +let maxKey = N.maxKeyOpt0 +let minKeyNull = N.minKeyNull0 +let maxKeyNull = N.maxKeyNull0 +let minNull = N.minKVNull0 +let maxNull = N.maxKVNull0 +let get = N.findOpt0 +let getNull = N.findNull0 +let getWithDefault = N.findWithDefault0 +let getExn = N.findExn0 + +let mapWithKey = N.mapi0 +let map = N.map0 + +let keepBy = N.filterShared0 +let partition = N.partitionShared0 +let checkInvariantInternal = N.checkInvariantInternal +let rec set (t : _ t) newK newD ~cmp = + match N.toOpt t with + | None -> N.singleton0 newK newD + | Some n -> + let k= N.key n in + let c = (Bs_Cmp.getCmp cmp) newK k [@bs] in + if c = 0 then + N.return (N.updateValue n newD) + else + let l,r,v = N.left n, N.right n, N.value n in + if c < 0 then (* Worth optimize for reference equality? *) + N.bal (set ~cmp l newK newD ) k v r + else + N.bal l k v (set ~cmp r newK newD ) + +let rec update (t : _ t) newK f ~cmp : _ t = + match N.toOpt t with + | None -> + begin match f None [@bs] with + | None -> t + | Some newD -> N.singleton0 newK newD + end + | Some n -> + let k= N.key n in + let c = (Bs_Cmp.getCmp cmp) newK k [@bs] in + if c = 0 then + match f (Some (N.value n)) [@bs] with + | None -> + let l, r = N.left n , N.right n in + begin match N.toOpt l, N.toOpt r with + | None, _ -> r + | _, None -> l + | _, Some rn -> + let kr, vr = ref (N.key rn), ref (N.value rn) in + let r = N.removeMinAuxWithRef rn kr vr in + N.bal l !kr !vr r + end + | Some newD -> N.return (N.updateValue n newD) + else + let l,r,v = N.left n, N.right n, N.value n in + if c < 0 then + let ll = (update ~cmp l newK f ) in + if l == ll then + t + else + N.bal ll k v r + else + let rr = (update ~cmp r newK f) in + if r == rr then t + else N.bal l k v rr + +(* unboxing API was not exported + since the correct API is really awkard + [bool -> 'k Js.null -> ('a Js.null * bool)] + even for specialized [k] the first [bool] can + be erased, maybe the perf boost does not justify the inclusion of such API + + [updateWithNull m x f] + the callback to [f exist v] + when [v] is non-null, + [exist] is guaranteed to be true + [v] is guranteed to be [null], + when [exist] is [true], [v] could be [null], + since ['a] is polymorphic +*) + + +let rec removeAux0 n x ~cmp = + let l,v,r = N.(left n, key n, right n ) in + let c = (Bs_Cmp.getCmp cmp) x v [@bs] in + if c = 0 then + match N.toOpt l, N.toOpt r with + | None, _ -> r + | _, None -> l + | _, Some rn -> + let kr, vr = ref (N.key rn), ref (N.value rn) in + let r = N.removeMinAuxWithRef rn kr vr in + N.bal l !kr !vr r + else if c < 0 then + match N.toOpt l with + | None -> N.return n (* Nothing to remove *) + | Some left -> + let ll = removeAux0 left x ~cmp in + if ll == l then (N.return n) + else N.bal ll v (N.value n) r + else + match N.toOpt r with + | None -> N.return n (* Nothing to remove *) + | Some right -> + let rr = removeAux0 ~cmp right x in + if rr == r then N.return n + else N.bal l v (N.value n) rr + + +let remove n x ~cmp = + match N.toOpt n with + | None -> N.empty0 + | Some n -> removeAux0 n x ~cmp + +let mergeMany h arr ~cmp = + let len = A.length arr in + let v = ref h in + for i = 0 to len - 1 do + let key,value = A.getUnsafe arr i in + v := set !v ~cmp key value + done ; + !v + +let rec splitAuxPivot n x pres ~cmp = + let l,v,d,r = N.(left n , key n, value n, right n) in + let c = (Bs_Cmp.getCmp cmp) x v [@bs] in + if c = 0 then begin + pres := Some d; + (l, r) + end + else + if c < 0 then + match N.toOpt l with + | None -> + N.(empty, return n) + | Some l -> + let (ll,rl) = splitAuxPivot ~cmp l x pres in + (ll, N.join rl v d r) + else + match N.toOpt r with + | None -> + N.(return n, empty) + | Some r -> + let (lr, rr) = splitAuxPivot ~cmp r x pres in + (N.join l v d lr, rr) + + +let split n x ~cmp = + match N.toOpt n with + | None -> + N.(empty, empty), None + | Some n -> + let pres = ref None in + let v = splitAuxPivot ~cmp n x pres in + v, !pres + +let rec merge s1 s2 f ~cmp = + match N.(toOpt s1, toOpt s2) with + (None, None) -> N.empty + | Some _, None -> + N.filterMap0 s1 (fun[@bs] k v -> + f k (Some v) None [@bs] + ) + | None, Some _ -> + N.filterMap0 s2 (fun[@bs] k v -> + f k None (Some v) [@bs] + ) + | Some s1n , Some s2n -> + if N.h s1n >= N.h s2n then + let l1, v1, d1, r1 = N.(left s1n, key s1n, value s1n, right s1n) in + let d2 = ref None in + let (l2, r2) = splitAuxPivot ~cmp s2n v1 d2 in + let d2 = !d2 in + let newLeft = merge ~cmp l1 l2 f in + let newD = f v1 (Some d1) d2 [@bs] in + let newRight = merge ~cmp r1 r2 f in + N.concatOrJoin newLeft v1 newD newRight + else + let l2,v2,d2,r2 = N.(left s2n, key s2n, value s2n, right s2n) in + let d1 = ref None in + let (l1, r1) = splitAuxPivot ~cmp s1n v2 d1 in + let d1 = !d1 in + let newLeft = merge ~cmp l1 l2 f in + let newD = (f v2 d1 (Some d2) [@bs]) in + let newRight = (merge ~cmp r1 r2 f) in + N.concatOrJoin newLeft v2 newD newRight + +let rec removeArrayAux t xs i len ~cmp = + if i < len then + let ele = A.getUnsafe xs i in + let u = removeAux0 t ele ~cmp in + match N.toOpt u with + | None -> u + | Some t -> removeArrayAux t xs (i + 1) len ~cmp + else + N.return t + +let removeMany t keys ~cmp = + let len = A.length keys in + match N.toOpt t with + | None -> N.empty0 + | Some t -> removeArrayAux t keys 0 len ~cmp + + + + diff --git a/jscomp/others/bs_SortedMapDict.mli b/jscomp/others/bs_SortedMapDict.mli new file mode 100644 index 00000000000..98cafaa88af --- /dev/null +++ b/jscomp/others/bs_SortedMapDict.mli @@ -0,0 +1,177 @@ +(* Copyright (C) 2017 Authors of BuckleScript + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * In addition to the permissions granted to you by the LGPL, you may combine + * or link a "work that uses the Library" with a publicly distributed version + * of this file to produce a combined library or application, then distribute + * that combined work under the terms of your choosing, with no requirement + * to comply with the obligations normally placed on you by section 4 of the + * LGPL version 3 (or the corresponding section of a later version of the LGPL + * should you choose to use a later version). + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) + +type ('key, 'value, 'id) t + +type ('key, 'id) cmp = ('key, 'id) Bs_Cmp.cmp + +val empty: ('k, 'v, 'id) t + +val isEmpty: ('k, 'v, 'id) t -> bool + +val has: + ('k, 'a, 'id) t -> 'k -> + cmp:('k, 'id) cmp -> + bool + +val cmp: + ('k, 'v, 'id) t -> + ('k, 'v, 'id) t -> + kcmp:('k, 'id) cmp -> + vcmp:('v -> 'v -> int [@bs]) -> + int + +val eq: + ('k, 'a, 'id) t -> + ('k, 'a, 'id) t -> + kcmp:('k, 'id) cmp -> + veq:('a -> 'a -> bool [@bs]) -> + bool +(** [eq m1 m2 cmp] tests whether the maps [m1] and [m2] are + equal, that is, contain equal keys and associate them with + equal data. [cmp] is the equality predicate used to compare + the data associated with the keys. *) + +val forEach: ('k, 'a, 'id) t -> ('k -> 'a -> unit [@bs]) -> unit +(** [forEach m f] applies [f] to all bindings in map [m]. + [f] receives the 'k as first argument, and the associated value + as second argument. The bindings are passed to [f] in increasing + order with respect to the ordering over the type of the keys. *) + +val reduce: ('k, 'a, 'id) t -> 'b -> ('b -> 'k -> 'a -> 'b [@bs]) -> 'b +(** [reduce m a f] computes [(f kN dN ... (f k1 d1 a)...)], + where [k1 ... kN] are the keys of all bindings in [m] + (in increasing order), and [d1 ... dN] are the associated data. *) + +val every: ('k, 'a, 'id) t -> ('k -> 'a -> bool [@bs]) -> bool +(** [every m p] checks if all the bindings of the map + satisfy the predicate [p]. Order unspecified *) + +val some: ('k, 'a, 'id) t -> ('k -> 'a -> bool [@bs]) -> bool +(** [some m p] checks if at least one binding of the map + satisfy the predicate [p]. Order unspecified *) + +val size: ('k, 'a, 'id) t -> int +val toList: ('k, 'a, 'id) t -> ('k * 'a) list +(** In increasing order*) +val toArray: ('k, 'a, 'id) t -> ('k * 'a) array +val ofArray: + ('k * 'a) array -> cmp:('k,'id) cmp -> ('k,'a,'id) t +val keysToArray: ('k, 'a, 'id) t -> 'k array +val valuesToArray: ('k, 'a, 'id) t -> 'a array +val minKey: ('k, _, _) t -> 'k option +val minKeyNull: ('k, _, _) t -> 'k Js.null +val maxKey: ('k, _, _) t -> 'k option +val maxKeyNull: ('k, _, _) t -> 'k Js.null +val minimum: ('k, 'a, _) t -> ('k * 'a) option +val minNull: ('k, 'a, _) t -> ('k * 'a) Js.null +val maximum: ('k, 'a, _) t -> ('k * 'a) option +val maxNull:('k, 'a, _) t -> ('k * 'a) Js.null +val get: + ('k, 'a, 'id) t -> 'k -> + cmp:('k, 'id) cmp -> + 'a option +val getNull: + ('k, 'a, 'id) t -> 'k -> + cmp:('k, 'id) cmp -> + 'a Js.null +val getWithDefault: + ('k, 'a, 'id) t -> 'k -> 'a -> + cmp:('k, 'id) cmp -> + 'a +val getExn: + ('k, 'a, 'id) t -> 'k -> + cmp:('k, 'id) cmp -> + 'a + +val checkInvariantInternal: _ t -> bool + +val remove: + ('a, 'b, 'id) t -> 'a -> + cmp:('a, 'id) cmp -> + ('a, 'b, 'id) t + + +val removeMany: + ('a, 'b, 'id) t -> + 'a array -> + cmp:('a, 'id) cmp -> + ('a, 'b, 'id) t + +val set: + ('a, 'b, 'id) t -> 'a -> 'b -> + cmp:('a, 'id) cmp -> + ('a, 'b, 'id) t + +val update: + ('a, 'b, 'id) t -> + 'a -> + ('b option -> 'b option [@bs]) -> + cmp:('a, 'id) cmp -> + ('a, 'b, 'id) t + +val merge: + ('a, 'b, 'id) t -> + ('a, 'c, 'id) t -> + ('a -> 'b option -> 'c option -> 'd option [@bs]) -> + cmp:('a, 'id) cmp -> ('a, 'd, 'id) t + +val mergeMany: + ('a, 'b, 'id) t -> + ('a * 'b) array -> + cmp:('a, 'id) cmp -> + ('a, 'b, 'id) t + +val keepBy: + ('k, 'a, 'id) t -> + ('k -> 'a -> bool [@bs]) -> + ('k, 'a, 'id) t +(** [keepBy m p] returns the map with all the bindings in [m] + that satisfy predicate [p]. *) + +val partition: + ('k, 'a, 'id) t -> + ('k -> 'a -> bool [@bs]) -> + ('k, 'a, 'id) t * ('k, 'a, 'id) t +(** [partition m p] returns a pair of maps [(m1, m2)], where + [m1] contains all the bindings of [s] that satisfy the + predicate [p], and [m2] is the map with all the bindings of + [s] that do not satisfy [p]. +*) + +val split: + ('a, 'b, 'id) t -> + 'a -> + cmp:('a, 'id) cmp -> + (('a,'b,'id) t * ('a, 'b, 'id) t) * 'b option + + +val map: ('k, 'a, 'id) t -> ('a -> 'b [@bs]) -> ('k ,'b,'id ) t +(** [map m f] returns a map with same domain as [m], where the + associated value [a] of all bindings of [m] has been + replaced by the result of the application of [f] to [a]. + The bindings are passed to [f] in increasing order + with respect to the ordering over the type of the keys. *) + +val mapWithKey: ('k, 'a, 'id) t -> ('k -> 'a -> 'b [@bs]) -> ('k, 'b, 'id) t diff --git a/jscomp/others/bs_internalAVLtree.ml b/jscomp/others/bs_internalAVLtree.ml index 0d8f3c6f5ab..81e5e5e4750 100644 --- a/jscomp/others/bs_internalAVLtree.ml +++ b/jscomp/others/bs_internalAVLtree.ml @@ -531,12 +531,12 @@ let rec compareAux e1 e2 ~kcmp ~vcmp = else c | _, _ -> 0 -let rec eqAux e1 e2 ~kcmp ~vcmp = +let rec eqAux e1 e2 ~kcmp ~veq = match e1,e2 with | h1::t1, h2::t2 -> if (Bs_Cmp.getCmp kcmp) (key h1) (key h2) [@bs] = 0 && - vcmp (value h1) (value h2) [@bs] then - eqAux ~kcmp ~vcmp ( + veq (value h1) (value h2) [@bs] then + eqAux ~kcmp ~veq ( stackAllLeft (right h1) t1 ) (stackAllLeft (right h2) t2) else false | _, _ -> true @@ -547,10 +547,10 @@ let cmp0 s1 s2 ~kcmp ~vcmp = compareAux (stackAllLeft s1 []) (stackAllLeft s2 []) ~kcmp ~vcmp else if len1 < len2 then -1 else 1 -let eq0 s1 s2 ~kcmp ~vcmp = +let eq0 s1 s2 ~kcmp ~veq = let len1, len2 = length0 s1, length0 s2 in if len1 = len2 then - eqAux (stackAllLeft s1 []) (stackAllLeft s2 []) ~kcmp ~vcmp + eqAux (stackAllLeft s1 []) (stackAllLeft s2 []) ~kcmp ~veq else false let rec findOpt0 n x ~cmp = diff --git a/jscomp/others/bs_internalAVLtree.mli b/jscomp/others/bs_internalAVLtree.mli index 9ef8d6a0e2c..8d3f66aaa19 100644 --- a/jscomp/others/bs_internalAVLtree.mli +++ b/jscomp/others/bs_internalAVLtree.mli @@ -121,7 +121,7 @@ val cmp0 : val eq0: ('a, 'b) t0 -> ('a, 'c) t0 -> kcmp:('a,_) Bs_Cmp.cmp -> - vcmp :('b -> 'c -> bool [@bs]) -> + veq:('b -> 'c -> bool [@bs]) -> bool val findOpt0: diff --git a/lib/js/bs_Map.js b/lib/js/bs_Map.js index 2fdaf904980..62e1f771dea 100644 --- a/lib/js/bs_Map.js +++ b/lib/js/bs_Map.js @@ -1,358 +1,78 @@ 'use strict'; -var Bs_internalAVLtree = require("./bs_internalAVLtree.js"); - -function set0(t, newK, newD, cmp) { - if (t !== null) { - var k = t.key; - var c = cmp(newK, k); - if (c) { - var l = t.left; - var r = t.right; - var v = t.value; - if (c < 0) { - return Bs_internalAVLtree.bal(set0(l, newK, newD, cmp), k, v, r); - } else { - return Bs_internalAVLtree.bal(l, k, v, set0(r, newK, newD, cmp)); - } - } else { - return Bs_internalAVLtree.updateValue(t, newD); - } - } else { - return Bs_internalAVLtree.singleton0(newK, newD); - } -} - -function update0(t, newK, f, cmp) { - if (t !== null) { - var k = t.key; - var c = cmp(newK, k); - if (c) { - var l = t.left; - var r = t.right; - var v = t.value; - if (c < 0) { - var ll = update0(l, newK, f, cmp); - if (l === ll) { - return t; - } else { - return Bs_internalAVLtree.bal(ll, k, v, r); - } - } else { - var rr = update0(r, newK, f, cmp); - if (r === rr) { - return t; - } else { - return Bs_internalAVLtree.bal(l, k, v, rr); - } - } - } else { - var match = f(/* Some */[t.value]); - if (match) { - return Bs_internalAVLtree.updateValue(t, match[0]); - } else { - var l$1 = t.left; - var r$1 = t.right; - if (l$1 !== null) { - if (r$1 !== null) { - var kr = [r$1.key]; - var vr = [r$1.value]; - var r$2 = Bs_internalAVLtree.removeMinAuxWithRef(r$1, kr, vr); - return Bs_internalAVLtree.bal(l$1, kr[0], vr[0], r$2); - } else { - return l$1; - } - } else { - return r$1; - } - } - } - } else { - var match$1 = f(/* None */0); - if (match$1) { - return Bs_internalAVLtree.singleton0(newK, match$1[0]); - } else { - return t; - } - } -} - -function removeAux0(n, x, cmp) { - var l = n.left; - var v = n.key; - var r = n.right; - var c = cmp(x, v); - if (c) { - if (c < 0) { - if (l !== null) { - var ll = removeAux0(l, x, cmp); - if (ll === l) { - return n; - } else { - return Bs_internalAVLtree.bal(ll, v, n.value, r); - } - } else { - return n; - } - } else if (r !== null) { - var rr = removeAux0(r, x, cmp); - if (rr === r) { - return n; - } else { - return Bs_internalAVLtree.bal(l, v, n.value, rr); - } - } else { - return n; - } - } else if (l !== null) { - if (r !== null) { - var kr = [r.key]; - var vr = [r.value]; - var r$1 = Bs_internalAVLtree.removeMinAuxWithRef(r, kr, vr); - return Bs_internalAVLtree.bal(l, kr[0], vr[0], r$1); - } else { - return l; - } - } else { - return r; - } -} - -function remove0(n, x, cmp) { - if (n !== null) { - return removeAux0(n, x, cmp); - } else { - return Bs_internalAVLtree.empty0; - } -} - -function mergeArray0(h, arr, cmp) { - var len = arr.length; - var v = h; - for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ - var match = arr[i]; - v = set0(v, match[0], match[1], cmp); - } - return v; -} - -function splitAuxPivot(n, x, pres, cmp) { - var l = n.left; - var v = n.key; - var d = n.value; - var r = n.right; - var c = cmp(x, v); - if (c) { - if (c < 0) { - if (l !== null) { - var match = splitAuxPivot(l, x, pres, cmp); - return /* tuple */[ - match[0], - Bs_internalAVLtree.join(match[1], v, d, r) - ]; - } else { - return /* tuple */[ - null, - n - ]; - } - } else if (r !== null) { - var match$1 = splitAuxPivot(r, x, pres, cmp); - return /* tuple */[ - Bs_internalAVLtree.join(l, v, d, match$1[0]), - match$1[1] - ]; - } else { - return /* tuple */[ - n, - null - ]; - } - } else { - pres[0] = /* Some */[d]; - return /* tuple */[ - l, - r - ]; - } -} - -function split0(n, x, cmp) { - if (n !== null) { - var pres = [/* None */0]; - var v = splitAuxPivot(n, x, pres, cmp); - return /* tuple */[ - v, - pres[0] - ]; - } else { - return /* tuple */[ - /* tuple */[ - null, - null - ], - /* None */0 - ]; - } -} - -function merge0(s1, s2, f, cmp) { - if (s1 !== null) { - if (s2 !== null) { - if (s1.h >= s2.h) { - var l1 = s1.left; - var v1 = s1.key; - var d1 = s1.value; - var r1 = s1.right; - var d2 = [/* None */0]; - var match = splitAuxPivot(s2, v1, d2, cmp); - var d2$1 = d2[0]; - var newLeft = merge0(l1, match[0], f, cmp); - var newD = f(v1, /* Some */[d1], d2$1); - var newRight = merge0(r1, match[1], f, cmp); - return Bs_internalAVLtree.concatOrJoin(newLeft, v1, newD, newRight); - } else { - var l2 = s2.left; - var v2 = s2.key; - var d2$2 = s2.value; - var r2 = s2.right; - var d1$1 = [/* None */0]; - var match$1 = splitAuxPivot(s1, v2, d1$1, cmp); - var d1$2 = d1$1[0]; - var newLeft$1 = merge0(match$1[0], l2, f, cmp); - var newD$1 = f(v2, d1$2, /* Some */[d2$2]); - var newRight$1 = merge0(match$1[1], r2, f, cmp); - return Bs_internalAVLtree.concatOrJoin(newLeft$1, v2, newD$1, newRight$1); - } - } else { - return Bs_internalAVLtree.filterMap0(s1, (function (k, v) { - return f(k, /* Some */[v], /* None */0); - })); - } - } else if (s2 !== null) { - return Bs_internalAVLtree.filterMap0(s2, (function (k, v) { - return f(k, /* None */0, /* Some */[v]); - })); - } else { - return null; - } -} - -function removeArrayAux(_t, xs, _i, len, cmp) { - while(true) { - var i = _i; - var t = _t; - if (i < len) { - var ele = xs[i]; - var u = removeAux0(t, ele, cmp); - if (u !== null) { - _i = i + 1 | 0; - _t = u; - continue ; - - } else { - return u; - } - } else { - return t; - } - }; -} - -function removeArray0(t, keys, cmp) { - var len = keys.length; - if (t !== null) { - return removeArrayAux(t, keys, 0, len, cmp); - } else { - return Bs_internalAVLtree.empty0; - } -} +var Bs_SortedMapDict = require("./bs_SortedMapDict.js"); function ofArray(data, dict) { return { dict: dict, - data: Bs_internalAVLtree.ofArray0(data, dict[/* cmp */0]) + data: Bs_SortedMapDict.ofArray(data, dict[/* cmp */0]) }; } function remove(m, x) { + var M = m.dict; var odata = m.data; - if (odata !== null) { - var dict = m.dict; - var newData = removeAux0(odata, x, dict[/* cmp */0]); - if (newData === odata) { - return m; - } else { - return { - dict: dict, - data: newData - }; - } - } else { + var newData = Bs_SortedMapDict.remove(odata, x, M[/* cmp */0]); + if (newData === odata) { return m; + } else { + return { + dict: M, + data: newData + }; } } -function removeArray(m, xs) { +function removeMany(m, x) { + var M = m.dict; var odata = m.data; - if (odata !== null) { - var dict = m.dict; - var len = xs.length; - var newData = removeArrayAux(odata, xs, 0, len, dict[/* cmp */0]); - if (newData === odata) { - return m; - } else { - return { - dict: dict, - data: newData - }; - } - } else { + var newData = Bs_SortedMapDict.removeMany(odata, x, M[/* cmp */0]); + if (newData === odata) { return m; + } else { + return { + dict: M, + data: newData + }; } } -function set(map, key, data) { - var dict = map.dict; - var map$1 = map.data; +function set(m, key, d) { + var X = m.dict; return { - dict: dict, - data: set0(map$1, key, data, dict[/* cmp */0]) + dict: X, + data: Bs_SortedMapDict.set(m.data, key, d, X[/* cmp */0]) }; } -function mergeArray(m, e) { - var dict = m.dict; - var data = m.data; - var newData = mergeArray0(data, e, dict[/* cmp */0]); +function mergeMany(m, e) { + var M = m.dict; return { - dict: dict, - data: newData + dict: M, + data: Bs_SortedMapDict.mergeMany(m.data, e, M[/* cmp */0]) }; } -function update(map, key, f) { - var dict = map.dict; - var map$1 = map.data; +function update(m, key, f) { + var X = m.dict; return { - dict: dict, - data: update0(map$1, key, f, dict[/* cmp */0]) + dict: X, + data: Bs_SortedMapDict.update(m.data, key, f, X[/* cmp */0]) }; } -function split(map, x) { - var dict = map.dict; - var map$1 = map.data; - var match = split0(map$1, x, dict[/* cmp */0]); +function split(m, x) { + var M = m.dict; + var match = Bs_SortedMapDict.split(m.data, x, M[/* cmp */0]); var match$1 = match[0]; return /* tuple */[ /* tuple */[ { - dict: dict, + dict: M, data: match$1[0] }, { - dict: dict, + dict: M, data: match$1[1] } ], @@ -361,69 +81,60 @@ function split(map, x) { } function merge(s1, s2, f) { - var dict = s1.dict; - var s1_data = s1.data; - var s2_data = s2.data; + var X = s1.dict; return { - dict: dict, - data: merge0(s1_data, s2_data, f, dict[/* cmp */0]) + dict: X, + data: Bs_SortedMapDict.merge(s1.data, s2.data, f, X[/* cmp */0]) }; } function empty(dict) { return { dict: dict, - data: Bs_internalAVLtree.empty0 + data: Bs_SortedMapDict.empty }; } function isEmpty(map) { - return Bs_internalAVLtree.isEmpty0(map.data); + return Bs_SortedMapDict.isEmpty(map.data); } function cmp(m1, m2, cmp$1) { - var dict = m1.dict; - var m1_data = m1.data; - var m2_data = m2.data; - return Bs_internalAVLtree.cmp0(m1_data, m2_data, dict[/* cmp */0], cmp$1); + var X = m1.dict; + return Bs_SortedMapDict.cmp(m1.data, m2.data, X[/* cmp */0], cmp$1); } function eq(m1, m2, cmp) { - var dict = m1.dict; - var m1_data = m1.data; - var m2_data = m2.data; - return Bs_internalAVLtree.eq0(m1_data, m2_data, dict[/* cmp */0], cmp); + var X = m1.dict; + return Bs_SortedMapDict.eq(m1.data, m2.data, X[/* cmp */0], cmp); } function forEach(m, f) { - return Bs_internalAVLtree.iter0(m.data, f); + return Bs_SortedMapDict.forEach(m.data, f); } function reduce(m, acc, f) { - return Bs_internalAVLtree.fold0(m.data, acc, f); + return Bs_SortedMapDict.reduce(m.data, acc, f); } function every(m, f) { - return Bs_internalAVLtree.every0(m.data, f); + return Bs_SortedMapDict.every(m.data, f); } function some(m, f) { - return Bs_internalAVLtree.some0(m.data, f); + return Bs_SortedMapDict.some(m.data, f); } function keepBy(m, f) { - var dict = m.dict; - var map = m.data; return { - dict: dict, - data: Bs_internalAVLtree.filterShared0(map, f) + dict: m.dict, + data: Bs_SortedMapDict.keepBy(m.data, f) }; } function partition(m, p) { var dict = m.dict; - var map = m.data; - var match = Bs_internalAVLtree.partitionShared0(map, p); + var match = Bs_SortedMapDict.partition(m.data, p); return /* tuple */[ { dict: dict, @@ -437,102 +148,98 @@ function partition(m, p) { } function map(m, f) { - var dict = m.dict; - var map$1 = m.data; return { - dict: dict, - data: Bs_internalAVLtree.map0(map$1, f) + dict: m.dict, + data: Bs_SortedMapDict.map(m.data, f) }; } function mapWithKey(m, f) { - var dict = m.dict; - var map = m.data; return { - dict: dict, - data: Bs_internalAVLtree.mapi0(map, f) + dict: m.dict, + data: Bs_SortedMapDict.mapWithKey(m.data, f) }; } function size(map) { - return Bs_internalAVLtree.length0(map.data); + return Bs_SortedMapDict.size(map.data); } function toList(map) { - return Bs_internalAVLtree.toList0(map.data); + return Bs_SortedMapDict.toList(map.data); } function toArray(m) { - return Bs_internalAVLtree.toArray0(m.data); + return Bs_SortedMapDict.toArray(m.data); } function keysToArray(m) { - return Bs_internalAVLtree.keysToArray0(m.data); + return Bs_SortedMapDict.keysToArray(m.data); } function valuesToArray(m) { - return Bs_internalAVLtree.valuesToArray0(m.data); + return Bs_SortedMapDict.valuesToArray(m.data); } function minKey(m) { - return Bs_internalAVLtree.minKeyOpt0(m.data); + return Bs_SortedMapDict.minKey(m.data); } function minKeyNull(m) { - return Bs_internalAVLtree.minKeyNull0(m.data); + return Bs_SortedMapDict.minKeyNull(m.data); } function maxKey(m) { - return Bs_internalAVLtree.maxKeyOpt0(m.data); + return Bs_SortedMapDict.maxKey(m.data); } function maxKeyNull(m) { - return Bs_internalAVLtree.maxKeyNull0(m.data); + return Bs_SortedMapDict.maxKeyNull(m.data); } function minimum(m) { - return Bs_internalAVLtree.minKVOpt0(m.data); + return Bs_SortedMapDict.minimum(m.data); } function minNull(m) { - return Bs_internalAVLtree.minKVNull0(m.data); + return Bs_SortedMapDict.minNull(m.data); } function maximum(m) { - return Bs_internalAVLtree.maxKVOpt0(m.data); + return Bs_SortedMapDict.maximum(m.data); } function maxNull(m) { - return Bs_internalAVLtree.maxKVNull0(m.data); + return Bs_SortedMapDict.maxNull(m.data); } function get(map, x) { var X = map.dict; - return Bs_internalAVLtree.findOpt0(map.data, x, X[/* cmp */0]); + return Bs_SortedMapDict.get(map.data, x, X[/* cmp */0]); } function getNull(map, x) { var X = map.dict; - return Bs_internalAVLtree.findNull0(map.data, x, X[/* cmp */0]); + return Bs_SortedMapDict.getNull(map.data, x, X[/* cmp */0]); } function getWithDefault(map, x, def) { var X = map.dict; - return Bs_internalAVLtree.findWithDefault0(map.data, x, def, X[/* cmp */0]); + return Bs_SortedMapDict.getWithDefault(map.data, x, def, X[/* cmp */0]); } function getExn(map, x) { var X = map.dict; - return Bs_internalAVLtree.findExn0(map.data, x, X[/* cmp */0]); + return Bs_SortedMapDict.getExn(map.data, x, X[/* cmp */0]); } function has(map, x) { var X = map.dict; - return Bs_internalAVLtree.mem0(map.data, x, X[/* cmp */0]); + return Bs_SortedMapDict.has(map.data, x, X[/* cmp */0]); } function checkInvariantInternal(m) { - return Bs_internalAVLtree.checkInvariantInternal(m.data); + return Bs_SortedMapDict.checkInvariantInternal(m.data); } function getData(prim) { @@ -550,50 +257,6 @@ function packDictData(prim, prim$1) { }; } -var empty0 = Bs_internalAVLtree.empty0; - -var ofArray0 = Bs_internalAVLtree.ofArray0; - -var isEmpty0 = Bs_internalAVLtree.isEmpty0; - -var has0 = Bs_internalAVLtree.mem0; - -var cmp0 = Bs_internalAVLtree.cmp0; - -var eq0 = Bs_internalAVLtree.eq0; - -var forEach0 = Bs_internalAVLtree.iter0; - -var reduce0 = Bs_internalAVLtree.fold0; - -var every0 = Bs_internalAVLtree.every0; - -var some0 = Bs_internalAVLtree.some0; - -var filter0 = Bs_internalAVLtree.filterShared0; - -var partition0 = Bs_internalAVLtree.partitionShared0; - -var size0 = Bs_internalAVLtree.length0; - -var toList0 = Bs_internalAVLtree.toList0; - -var minimum0 = Bs_internalAVLtree.minKVOpt0; - -var maximum0 = Bs_internalAVLtree.maxKVOpt0; - -var get0 = Bs_internalAVLtree.findOpt0; - -var getNull0 = Bs_internalAVLtree.findNull0; - -var getWithDefault0 = Bs_internalAVLtree.findWithDefault0; - -var getExn0 = Bs_internalAVLtree.findExn0; - -var map0 = Bs_internalAVLtree.map0; - -var mapi0 = Bs_internalAVLtree.mapi0; - exports.empty = empty; exports.isEmpty = isEmpty; exports.has = has; @@ -623,45 +286,17 @@ exports.getWithDefault = getWithDefault; exports.getExn = getExn; exports.checkInvariantInternal = checkInvariantInternal; exports.remove = remove; -exports.removeArray = removeArray; +exports.removeMany = removeMany; exports.set = set; exports.update = update; -exports.mergeArray = mergeArray; exports.merge = merge; +exports.mergeMany = mergeMany; exports.keepBy = keepBy; exports.partition = partition; exports.split = split; exports.map = map; exports.mapWithKey = mapWithKey; -exports.getData = getData; exports.getDict = getDict; +exports.getData = getData; exports.packDictData = packDictData; -exports.empty0 = empty0; -exports.ofArray0 = ofArray0; -exports.isEmpty0 = isEmpty0; -exports.has0 = has0; -exports.set0 = set0; -exports.update0 = update0; -exports.remove0 = remove0; -exports.removeArray0 = removeArray0; -exports.merge0 = merge0; -exports.cmp0 = cmp0; -exports.eq0 = eq0; -exports.forEach0 = forEach0; -exports.reduce0 = reduce0; -exports.every0 = every0; -exports.some0 = some0; -exports.filter0 = filter0; -exports.partition0 = partition0; -exports.size0 = size0; -exports.toList0 = toList0; -exports.minimum0 = minimum0; -exports.maximum0 = maximum0; -exports.split0 = split0; -exports.get0 = get0; -exports.getNull0 = getNull0; -exports.getWithDefault0 = getWithDefault0; -exports.getExn0 = getExn0; -exports.map0 = map0; -exports.mapi0 = mapi0; /* No side effect */ diff --git a/lib/js/bs_SortedMapDict.js b/lib/js/bs_SortedMapDict.js new file mode 100644 index 00000000000..995f637f64a --- /dev/null +++ b/lib/js/bs_SortedMapDict.js @@ -0,0 +1,375 @@ +'use strict'; + +var Bs_internalAVLtree = require("./bs_internalAVLtree.js"); + +function set(t, newK, newD, cmp) { + if (t !== null) { + var k = t.key; + var c = cmp(newK, k); + if (c) { + var l = t.left; + var r = t.right; + var v = t.value; + if (c < 0) { + return Bs_internalAVLtree.bal(set(l, newK, newD, cmp), k, v, r); + } else { + return Bs_internalAVLtree.bal(l, k, v, set(r, newK, newD, cmp)); + } + } else { + return Bs_internalAVLtree.updateValue(t, newD); + } + } else { + return Bs_internalAVLtree.singleton0(newK, newD); + } +} + +function update(t, newK, f, cmp) { + if (t !== null) { + var k = t.key; + var c = cmp(newK, k); + if (c) { + var l = t.left; + var r = t.right; + var v = t.value; + if (c < 0) { + var ll = update(l, newK, f, cmp); + if (l === ll) { + return t; + } else { + return Bs_internalAVLtree.bal(ll, k, v, r); + } + } else { + var rr = update(r, newK, f, cmp); + if (r === rr) { + return t; + } else { + return Bs_internalAVLtree.bal(l, k, v, rr); + } + } + } else { + var match = f(/* Some */[t.value]); + if (match) { + return Bs_internalAVLtree.updateValue(t, match[0]); + } else { + var l$1 = t.left; + var r$1 = t.right; + if (l$1 !== null) { + if (r$1 !== null) { + var kr = [r$1.key]; + var vr = [r$1.value]; + var r$2 = Bs_internalAVLtree.removeMinAuxWithRef(r$1, kr, vr); + return Bs_internalAVLtree.bal(l$1, kr[0], vr[0], r$2); + } else { + return l$1; + } + } else { + return r$1; + } + } + } + } else { + var match$1 = f(/* None */0); + if (match$1) { + return Bs_internalAVLtree.singleton0(newK, match$1[0]); + } else { + return t; + } + } +} + +function removeAux0(n, x, cmp) { + var l = n.left; + var v = n.key; + var r = n.right; + var c = cmp(x, v); + if (c) { + if (c < 0) { + if (l !== null) { + var ll = removeAux0(l, x, cmp); + if (ll === l) { + return n; + } else { + return Bs_internalAVLtree.bal(ll, v, n.value, r); + } + } else { + return n; + } + } else if (r !== null) { + var rr = removeAux0(r, x, cmp); + if (rr === r) { + return n; + } else { + return Bs_internalAVLtree.bal(l, v, n.value, rr); + } + } else { + return n; + } + } else if (l !== null) { + if (r !== null) { + var kr = [r.key]; + var vr = [r.value]; + var r$1 = Bs_internalAVLtree.removeMinAuxWithRef(r, kr, vr); + return Bs_internalAVLtree.bal(l, kr[0], vr[0], r$1); + } else { + return l; + } + } else { + return r; + } +} + +function remove(n, x, cmp) { + if (n !== null) { + return removeAux0(n, x, cmp); + } else { + return Bs_internalAVLtree.empty0; + } +} + +function mergeMany(h, arr, cmp) { + var len = arr.length; + var v = h; + for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ + var match = arr[i]; + v = set(v, match[0], match[1], cmp); + } + return v; +} + +function splitAuxPivot(n, x, pres, cmp) { + var l = n.left; + var v = n.key; + var d = n.value; + var r = n.right; + var c = cmp(x, v); + if (c) { + if (c < 0) { + if (l !== null) { + var match = splitAuxPivot(l, x, pres, cmp); + return /* tuple */[ + match[0], + Bs_internalAVLtree.join(match[1], v, d, r) + ]; + } else { + return /* tuple */[ + null, + n + ]; + } + } else if (r !== null) { + var match$1 = splitAuxPivot(r, x, pres, cmp); + return /* tuple */[ + Bs_internalAVLtree.join(l, v, d, match$1[0]), + match$1[1] + ]; + } else { + return /* tuple */[ + n, + null + ]; + } + } else { + pres[0] = /* Some */[d]; + return /* tuple */[ + l, + r + ]; + } +} + +function split(n, x, cmp) { + if (n !== null) { + var pres = [/* None */0]; + var v = splitAuxPivot(n, x, pres, cmp); + return /* tuple */[ + v, + pres[0] + ]; + } else { + return /* tuple */[ + /* tuple */[ + null, + null + ], + /* None */0 + ]; + } +} + +function merge(s1, s2, f, cmp) { + if (s1 !== null) { + if (s2 !== null) { + if (s1.h >= s2.h) { + var l1 = s1.left; + var v1 = s1.key; + var d1 = s1.value; + var r1 = s1.right; + var d2 = [/* None */0]; + var match = splitAuxPivot(s2, v1, d2, cmp); + var d2$1 = d2[0]; + var newLeft = merge(l1, match[0], f, cmp); + var newD = f(v1, /* Some */[d1], d2$1); + var newRight = merge(r1, match[1], f, cmp); + return Bs_internalAVLtree.concatOrJoin(newLeft, v1, newD, newRight); + } else { + var l2 = s2.left; + var v2 = s2.key; + var d2$2 = s2.value; + var r2 = s2.right; + var d1$1 = [/* None */0]; + var match$1 = splitAuxPivot(s1, v2, d1$1, cmp); + var d1$2 = d1$1[0]; + var newLeft$1 = merge(match$1[0], l2, f, cmp); + var newD$1 = f(v2, d1$2, /* Some */[d2$2]); + var newRight$1 = merge(match$1[1], r2, f, cmp); + return Bs_internalAVLtree.concatOrJoin(newLeft$1, v2, newD$1, newRight$1); + } + } else { + return Bs_internalAVLtree.filterMap0(s1, (function (k, v) { + return f(k, /* Some */[v], /* None */0); + })); + } + } else if (s2 !== null) { + return Bs_internalAVLtree.filterMap0(s2, (function (k, v) { + return f(k, /* None */0, /* Some */[v]); + })); + } else { + return null; + } +} + +function removeMany(t, keys, cmp) { + var len = keys.length; + if (t !== null) { + var _t = t; + var xs = keys; + var _i = 0; + var len$1 = len; + var cmp$1 = cmp; + while(true) { + var i = _i; + var t$1 = _t; + if (i < len$1) { + var ele = xs[i]; + var u = removeAux0(t$1, ele, cmp$1); + if (u !== null) { + _i = i + 1 | 0; + _t = u; + continue ; + + } else { + return u; + } + } else { + return t$1; + } + }; + } else { + return Bs_internalAVLtree.empty0; + } +} + +var empty = Bs_internalAVLtree.empty0; + +var isEmpty = Bs_internalAVLtree.isEmpty0; + +var has = Bs_internalAVLtree.mem0; + +var cmp = Bs_internalAVLtree.cmp0; + +var eq = Bs_internalAVLtree.eq0; + +var forEach = Bs_internalAVLtree.iter0; + +var reduce = Bs_internalAVLtree.fold0; + +var every = Bs_internalAVLtree.every0; + +var some = Bs_internalAVLtree.some0; + +var size = Bs_internalAVLtree.length0; + +var toList = Bs_internalAVLtree.toList0; + +var toArray = Bs_internalAVLtree.toArray0; + +var ofArray = Bs_internalAVLtree.ofArray0; + +var keysToArray = Bs_internalAVLtree.keysToArray0; + +var valuesToArray = Bs_internalAVLtree.valuesToArray0; + +var minKey = Bs_internalAVLtree.minKeyOpt0; + +var minKeyNull = Bs_internalAVLtree.minKeyNull0; + +var maxKey = Bs_internalAVLtree.maxKeyOpt0; + +var maxKeyNull = Bs_internalAVLtree.maxKeyNull0; + +var minimum = Bs_internalAVLtree.minKVOpt0; + +var minNull = Bs_internalAVLtree.minKVNull0; + +var maximum = Bs_internalAVLtree.maxKVOpt0; + +var maxNull = Bs_internalAVLtree.maxKVNull0; + +var get = Bs_internalAVLtree.findOpt0; + +var getNull = Bs_internalAVLtree.findNull0; + +var getWithDefault = Bs_internalAVLtree.findWithDefault0; + +var getExn = Bs_internalAVLtree.findExn0; + +var checkInvariantInternal = Bs_internalAVLtree.checkInvariantInternal; + +var keepBy = Bs_internalAVLtree.filterShared0; + +var partition = Bs_internalAVLtree.partitionShared0; + +var map = Bs_internalAVLtree.map0; + +var mapWithKey = Bs_internalAVLtree.mapi0; + +exports.empty = empty; +exports.isEmpty = isEmpty; +exports.has = has; +exports.cmp = cmp; +exports.eq = eq; +exports.forEach = forEach; +exports.reduce = reduce; +exports.every = every; +exports.some = some; +exports.size = size; +exports.toList = toList; +exports.toArray = toArray; +exports.ofArray = ofArray; +exports.keysToArray = keysToArray; +exports.valuesToArray = valuesToArray; +exports.minKey = minKey; +exports.minKeyNull = minKeyNull; +exports.maxKey = maxKey; +exports.maxKeyNull = maxKeyNull; +exports.minimum = minimum; +exports.minNull = minNull; +exports.maximum = maximum; +exports.maxNull = maxNull; +exports.get = get; +exports.getNull = getNull; +exports.getWithDefault = getWithDefault; +exports.getExn = getExn; +exports.checkInvariantInternal = checkInvariantInternal; +exports.remove = remove; +exports.removeMany = removeMany; +exports.set = set; +exports.update = update; +exports.merge = merge; +exports.mergeMany = mergeMany; +exports.keepBy = keepBy; +exports.partition = partition; +exports.split = split; +exports.map = map; +exports.mapWithKey = mapWithKey; +/* No side effect */ diff --git a/lib/js/bs_internalAVLtree.js b/lib/js/bs_internalAVLtree.js index c79f78cc15d..ffc1527dabd 100644 --- a/lib/js/bs_internalAVLtree.js +++ b/lib/js/bs_internalAVLtree.js @@ -828,14 +828,14 @@ function cmp0(s1, s2, kcmp, vcmp) { } } -function eq0(s1, s2, kcmp, vcmp) { +function eq0(s1, s2, kcmp, veq) { var len1 = length0(s1); var len2 = length0(s2); if (len1 === len2) { var _e1 = stackAllLeft(s1, /* [] */0); var _e2 = stackAllLeft(s2, /* [] */0); var kcmp$1 = kcmp; - var vcmp$1 = vcmp; + var veq$1 = veq; while(true) { var e2 = _e2; var e1 = _e1; @@ -843,7 +843,7 @@ function eq0(s1, s2, kcmp, vcmp) { if (e2) { var h2 = e2[0]; var h1 = e1[0]; - if (kcmp$1(h1.key, h2.key) === 0 && vcmp$1(h1.value, h2.value)) { + if (kcmp$1(h1.key, h2.key) === 0 && veq$1(h1.value, h2.value)) { _e2 = stackAllLeft(h2.right, e2[1]); _e1 = stackAllLeft(h1.right, e1[1]); continue ; From 9276c3425366ef6ca8555c7fac6b41c2cbee3752 Mon Sep 17 00:00:00 2001 From: Hongbo Zhang Date: Sat, 27 Jan 2018 11:00:41 +0800 Subject: [PATCH 05/17] fix broken tests --- jscomp/others/bs.ml | 1 + jscomp/test/bs_hashtbl_string_test.js | 55 +++++++++++++++------------ jscomp/test/bs_hashtbl_string_test.ml | 17 +++++---- jscomp/test/bs_map_test.js | 21 +++++----- jscomp/test/bs_map_test.ml | 8 ++-- jscomp/test/bs_poly_map_test.js | 18 ++++----- jscomp/test/bs_poly_map_test.ml | 4 +- lib/js/bs.js | 3 ++ 8 files changed, 70 insertions(+), 57 deletions(-) diff --git a/jscomp/others/bs.ml b/jscomp/others/bs.ml index 3e49d22a3c1..0f360a8eff1 100644 --- a/jscomp/others/bs.ml +++ b/jscomp/others/bs.ml @@ -41,6 +41,7 @@ module SortInt = Bs_SortInt module SortString = Bs_SortString module Stack = Bs_Stack module Range = Bs_Range +module SortedMapDict = Bs_SortedMapDict module Map = Bs_Map module MapM = Bs_MapM module Set = Bs_Set diff --git a/jscomp/test/bs_hashtbl_string_test.js b/jscomp/test/bs_hashtbl_string_test.js index 03e466064e4..e2f021f3bce 100644 --- a/jscomp/test/bs_hashtbl_string_test.js +++ b/jscomp/test/bs_hashtbl_string_test.js @@ -1,6 +1,5 @@ 'use strict'; -var Bs_Map = require("../../lib/js/bs_Map.js"); var Hashtbl = require("../../lib/js/hashtbl.js"); var Caml_hash = require("../../lib/js/caml_hash.js"); var Bs_HashMap = require("../../lib/js/bs_HashMap.js"); @@ -8,7 +7,7 @@ var Bs_HashMapInt = require("../../lib/js/bs_HashMapInt.js"); var Bs_HashSetInt = require("../../lib/js/bs_HashSetInt.js"); var Caml_primitive = require("../../lib/js/caml_primitive.js"); var Bs_HashMapString = require("../../lib/js/bs_HashMapString.js"); -var Bs_internalAVLtree = require("../../lib/js/bs_internalAVLtree.js"); +var Bs_SortedMapDict = require("../../lib/js/bs_SortedMapDict.js"); var Bs_internalBuckets = require("../../lib/js/bs_internalBuckets.js"); var Bs_internalBucketsType = require("../../lib/js/bs_internalBucketsType.js"); var Caml_builtin_exceptions = require("../../lib/js/caml_builtin_exceptions.js"); @@ -138,20 +137,20 @@ function bench2(m) { function bench3(m) { var empty = { dict: m, - data: Bs_internalAVLtree.empty0 + data: Bs_SortedMapDict.empty }; var cmp = m[/* cmp */0]; var table = empty.data; for(var i = 0; i <= 1000000; ++i){ - table = Bs_Map.set0(table, "" + i, i, cmp); + table = Bs_SortedMapDict.set(table, "" + i, i, cmp); } for(var i$1 = 0; i$1 <= 1000000; ++i$1){ - if (!Bs_Map.has0(table, "" + i$1, cmp)) { + if (!Bs_SortedMapDict.has(table, "" + i$1, cmp)) { throw [ Caml_builtin_exceptions.assert_failure, [ "bs_hashtbl_string_test.ml", - 97, + 98, 4 ] ]; @@ -159,14 +158,14 @@ function bench3(m) { } for(var i$2 = 0; i$2 <= 1000000; ++i$2){ - table = Bs_Map.remove0(table, "" + i$2, cmp); + table = Bs_SortedMapDict.remove(table, "" + i$2, cmp); } - if (Bs_Map.size0(table)) { + if (Bs_SortedMapDict.size(table)) { throw [ Caml_builtin_exceptions.assert_failure, [ "bs_hashtbl_string_test.ml", - 104, + 105, 2 ] ]; @@ -188,7 +187,7 @@ function bench4() { Caml_builtin_exceptions.assert_failure, [ "bs_hashtbl_string_test.ml", - 117, + 118, 4 ] ]; @@ -203,7 +202,7 @@ function bench4() { Caml_builtin_exceptions.assert_failure, [ "bs_hashtbl_string_test.ml", - 123, + 124, 2 ] ]; @@ -217,37 +216,37 @@ function bench5() { dict: Int, data: Bs_internalBucketsType.create0(1000000) }; - console.time("bs_hashtbl_string_test.ml 131"); + console.time("bs_hashtbl_string_test.ml 132"); for(var i = 0; i <= 1000000; ++i){ Bs_HashMap.set(table, i, i); } - console.timeEnd("bs_hashtbl_string_test.ml 131"); - console.time("bs_hashtbl_string_test.ml 135"); + console.timeEnd("bs_hashtbl_string_test.ml 132"); + console.time("bs_hashtbl_string_test.ml 136"); for(var i$1 = 0; i$1 <= 1000000; ++i$1){ if (!Bs_HashMap.has(table, i$1)) { throw [ Caml_builtin_exceptions.assert_failure, [ "bs_hashtbl_string_test.ml", - 136, + 137, 6 ] ]; } } - console.timeEnd("bs_hashtbl_string_test.ml 135"); - console.time("bs_hashtbl_string_test.ml 139"); + console.timeEnd("bs_hashtbl_string_test.ml 136"); + console.time("bs_hashtbl_string_test.ml 140"); for(var i$2 = 0; i$2 <= 1000000; ++i$2){ Bs_HashMap.remove(table, i$2); } - console.timeEnd("bs_hashtbl_string_test.ml 139"); + console.timeEnd("bs_hashtbl_string_test.ml 140"); if (table.data.size) { throw [ Caml_builtin_exceptions.assert_failure, [ "bs_hashtbl_string_test.ml", - 142, + 143, 2 ] ]; @@ -267,7 +266,7 @@ function bench6() { Caml_builtin_exceptions.assert_failure, [ "bs_hashtbl_string_test.ml", - 153, + 154, 4 ] ]; @@ -282,7 +281,7 @@ function bench6() { Caml_builtin_exceptions.assert_failure, [ "bs_hashtbl_string_test.ml", - 159, + 160, 2 ] ]; @@ -302,7 +301,7 @@ function bench7() { Caml_builtin_exceptions.assert_failure, [ "bs_hashtbl_string_test.ml", - 178, + 179, 4 ] ]; @@ -317,7 +316,7 @@ function bench7() { Caml_builtin_exceptions.assert_failure, [ "bs_hashtbl_string_test.ml", - 189, + 190, 2 ] ]; @@ -326,11 +325,11 @@ function bench7() { } } -console.time("bs_hashtbl_string_test.ml 200"); +console.time("bs_hashtbl_string_test.ml 201"); bench7(/* () */0); -console.timeEnd("bs_hashtbl_string_test.ml 200"); +console.timeEnd("bs_hashtbl_string_test.ml 201"); var N = 0; @@ -340,6 +339,10 @@ var initial_size = 1000000; var M = 0; +var Md = 0; + +var Md0 = 0; + var S = 0; exports.hash_string = hash_string; @@ -355,6 +358,8 @@ exports.count = count; exports.initial_size = initial_size; exports.M = M; exports.bench2 = bench2; +exports.Md = Md; +exports.Md0 = Md0; exports.bench3 = bench3; exports.Sx = Sx; exports.bench4 = bench4; diff --git a/jscomp/test/bs_hashtbl_string_test.ml b/jscomp/test/bs_hashtbl_string_test.ml index 6c7f4ee7b03..b94f5872389 100644 --- a/jscomp/test/bs_hashtbl_string_test.ml +++ b/jscomp/test/bs_hashtbl_string_test.ml @@ -82,26 +82,27 @@ let bench2 (type t) (m : (string,t) Bs.Hash.t) = assert (M.size empty = 0) (* Bs.HashMap.logStats empty *) - +module Md = Bs.Map +module Md0 = Bs.SortedMapDict let bench3 (type t) (m : (string,t) Bs.Cmp.t) = - let module M = Bs.Map in - let empty = Bs.Map.empty m in + + let empty = Md.empty m in let module String = (val m) in let cmp = String.cmp in - let table = ref (M.getData empty) in + let table = ref (Md.getData empty) in for i = 0 to count do - table := M.set0 ~cmp !table + table := Md0.set ~cmp !table (string_of_int i) i done ; for i = 0 to count do - assert (M.has0 ~cmp + assert (Md0.has ~cmp !table (string_of_int i) ) done; for i = 0 to count do - table := Bs.Map.remove0 ~cmp !table (string_of_int i) + table := Md0.remove ~cmp !table (string_of_int i) done ; - assert (M.size0 !table = 0) + assert (Md0.size !table = 0) module Sx = (val Bs.Cmp.make (fun [@bs] (x : string) y -> compare x y )) diff --git a/jscomp/test/bs_map_test.js b/jscomp/test/bs_map_test.js index 53f0530739e..92af85bde55 100644 --- a/jscomp/test/bs_map_test.js +++ b/jscomp/test/bs_map_test.js @@ -8,8 +8,8 @@ var Bs_Array = require("../../lib/js/bs_Array.js"); var Bs_MapInt = require("../../lib/js/bs_MapInt.js"); var Caml_primitive = require("../../lib/js/caml_primitive.js"); var Array_data_util = require("./array_data_util.js"); +var Bs_SortedMapDict = require("../../lib/js/bs_SortedMapDict.js"); var Bs_internalAVLset = require("../../lib/js/bs_internalAVLset.js"); -var Bs_internalAVLtree = require("../../lib/js/bs_internalAVLtree.js"); var suites = [/* [] */0]; @@ -31,7 +31,7 @@ var Icmp2 = /* module */[/* cmp */cmp]; var m0 = { dict: Icmp, - data: Bs_internalAVLtree.empty0 + data: Bs_SortedMapDict.empty }; function cmp$1(x, y) { @@ -42,12 +42,12 @@ var I2 = /* module */[/* cmp */cmp$1]; var m = { dict: Icmp2, - data: Bs_internalAVLtree.empty0 + data: Bs_SortedMapDict.empty }; var m2 = { dict: I2, - data: Bs_internalAVLtree.empty0 + data: Bs_SortedMapDict.empty }; var data = m.data; @@ -57,7 +57,7 @@ m2.dict; var m_dict = m.dict; for(var i = 0; i <= 100000; ++i){ - data = Bs_Map.set0(data, i, i, m_dict[/* cmp */0]); + data = Bs_SortedMapDict.set(data, i, i, m_dict[/* cmp */0]); } var newm = { @@ -67,7 +67,7 @@ var newm = { console.log(newm); -var m11 = Bs_Map.set0(Bs_Map.empty0, 1, 1, Icmp[/* cmp */0]); +var m11 = Bs_SortedMapDict.set(Bs_SortedMapDict.empty, 1, 1, Icmp[/* cmp */0]); console.log(m11); @@ -107,7 +107,7 @@ var u0 = f(Bs_Array.map(Array_data_util.randomRange(0, 39), (function (x) { var u1 = Bs_Map.set(u0, 39, 120); -b("File \"bs_map_test.ml\", line 83, characters 4-11", Bs_Array.every2(Bs_internalAVLtree.toArray0(u0.data), Bs_Array.map(Array_data_util.range(0, 39), (function (x) { +b("File \"bs_map_test.ml\", line 83, characters 4-11", Bs_Array.every2(Bs_SortedMapDict.toArray(u0.data), Bs_Array.map(Array_data_util.range(0, 39), (function (x) { return /* tuple */[ x, x @@ -120,7 +120,7 @@ b("File \"bs_map_test.ml\", line 83, characters 4-11", Bs_Array.every2(Bs_intern } }))); -b("File \"bs_map_test.ml\", line 88, characters 4-11", Bs_List.every2(Bs_internalAVLtree.toList0(u0.data), Bs_Array.toList(Bs_Array.map(Array_data_util.range(0, 39), (function (x) { +b("File \"bs_map_test.ml\", line 88, characters 4-11", Bs_List.every2(Bs_SortedMapDict.toList(u0.data), Bs_Array.toList(Bs_Array.map(Array_data_util.range(0, 39), (function (x) { return /* tuple */[ x, x @@ -149,7 +149,7 @@ eq("File \"bs_map_test.ml\", line 100, characters 4-11", Bs_Array.makeBy(10000, x, x ]; - })), Bs_internalAVLtree.toArray0(u.data)); + })), Bs_SortedMapDict.toArray(u.data)); Mt.from_pair_suites("bs_map_test.ml", suites[0]); @@ -167,6 +167,8 @@ var vv = Bs_MapInt.empty; var vv2 = Bs_MapInt.empty; +var Md0 = 0; + var ISet = 0; exports.suites = suites; @@ -186,6 +188,7 @@ exports.m = m; exports.m2 = m2; exports.vv = vv; exports.vv2 = vv2; +exports.Md0 = Md0; exports.ISet = ISet; exports.f = f; exports.$eq$tilde = $eq$tilde; diff --git a/jscomp/test/bs_map_test.ml b/jscomp/test/bs_map_test.ml index 08b1aae2476..e980ec3fb82 100644 --- a/jscomp/test/bs_map_test.ml +++ b/jscomp/test/bs_map_test.ml @@ -37,7 +37,7 @@ let m = M.empty (module Icmp2) let m2 : (int, string, _) M.t = M.empty (module I2) let vv = MI.empty let vv2 = MI.empty - +module Md0 = Bs.SortedMapDict let () = let count = 1_000_00 in let data = ref (M.getData m) in @@ -46,7 +46,7 @@ let () = let module Mm = ( val m_dict) in for i = 0 to count do data := - M.set0 !data + Md0.set !data ~cmp: Mm.cmp i i done ; @@ -54,9 +54,9 @@ let () = Js.log newm module ISet = Bs.Set let () = - let m = M.empty0 in + let m = Md0.empty in let m11 = - M.set0 ~cmp:Icmp.cmp m + Md0.set ~cmp:Icmp.cmp m 1 1 in let _m20 = M.empty (module Icmp) in diff --git a/jscomp/test/bs_poly_map_test.js b/jscomp/test/bs_poly_map_test.js index 474370a08be..b6281d94edf 100644 --- a/jscomp/test/bs_poly_map_test.js +++ b/jscomp/test/bs_poly_map_test.js @@ -6,7 +6,7 @@ var Bs_Set = require("../../lib/js/bs_Set.js"); var Bs_Array = require("../../lib/js/bs_Array.js"); var Caml_primitive = require("../../lib/js/caml_primitive.js"); var Array_data_util = require("./array_data_util.js"); -var Bs_internalAVLtree = require("../../lib/js/bs_internalAVLtree.js"); +var Bs_SortedMapDict = require("../../lib/js/bs_SortedMapDict.js"); var suites = [/* [] */0]; @@ -38,7 +38,7 @@ function mergeInter(s1, s2) { return /* None */0; } })); - var x = Bs_internalAVLtree.keysToArray0(m.data); + var x = Bs_SortedMapDict.keysToArray(m.data); return Bs_Set.ofArray(Icmp, x); } @@ -52,7 +52,7 @@ function mergeUnion(s1, s2) { return /* None */0; } })); - var x = Bs_internalAVLtree.keysToArray0(m.data); + var x = Bs_SortedMapDict.keysToArray(m.data); return Bs_Set.ofArray(Icmp, x); } @@ -64,7 +64,7 @@ function mergeDiff(s1, s2) { return /* None */0; } })); - var x = Bs_internalAVLtree.keysToArray0(m.data); + var x = Bs_SortedMapDict.keysToArray(m.data); return Bs_Set.ofArray(Icmp, x); } @@ -145,7 +145,7 @@ b("File \"bs_poly_map_test.ml\", line 76, characters 4-11", +(11 === Bs_Map.getN b("File \"bs_poly_map_test.ml\", line 77, characters 4-11", +(Bs_Map.getNull(a4, 3) === null)); -var a7 = Bs_Map.removeArray(a0, /* array */[ +var a7 = Bs_Map.removeMany(a0, /* array */[ 7, 8, 0, @@ -159,14 +159,14 @@ var a7 = Bs_Map.removeArray(a0, /* array */[ 6 ]); -eq("File \"bs_poly_map_test.ml\", line 80, characters 5-12", Bs_internalAVLtree.keysToArray0(a7.data), /* int array */[ +eq("File \"bs_poly_map_test.ml\", line 80, characters 5-12", Bs_SortedMapDict.keysToArray(a7.data), /* int array */[ 9, 10 ]); -var a8 = Bs_Map.removeArray(a7, Array_data_util.randomRange(0, 100)); +var a8 = Bs_Map.removeMany(a7, Array_data_util.randomRange(0, 100)); -b("File \"bs_poly_map_test.ml\", line 82, characters 4-11", Bs_internalAVLtree.isEmpty0(a8.data)); +b("File \"bs_poly_map_test.ml\", line 82, characters 4-11", Bs_SortedMapDict.isEmpty(a8.data)); var x$7 = randomRange(0, 100); @@ -194,7 +194,7 @@ function acc(m, is) { var m = { dict: Icmp, - data: Bs_internalAVLtree.empty0 + data: Bs_SortedMapDict.empty }; var m1 = acc(m, Bs_Array.concat(Array_data_util.randomRange(0, 20), Array_data_util.randomRange(10, 30))); diff --git a/jscomp/test/bs_poly_map_test.ml b/jscomp/test/bs_poly_map_test.ml index 3df3b2a5933..27d224baf3c 100644 --- a/jscomp/test/bs_poly_map_test.ml +++ b/jscomp/test/bs_poly_map_test.ml @@ -76,9 +76,9 @@ let () = b __LOC__ (Js.eqNull 11 (M.getNull a3 3)); b __LOC__ (Js.Null.test (M.getNull a4 3)); - let a7 = M.removeArray a0 [|7;8;0;1;3;2;4;922;4;5;6;|] in + let a7 = M.removeMany a0 [|7;8;0;1;3;2;4;922;4;5;6;|] in eq __LOC__ (M.keysToArray a7) [|9;10|]; - let a8 = M.removeArray a7 (I.randomRange 0 100) in + let a8 = M.removeMany a7 (I.randomRange 0 100) in b __LOC__ (M.isEmpty a8) (* TODO: expose [Bs_Bag.bag] makes the error message diff --git a/lib/js/bs.js b/lib/js/bs.js index 7eb3753fee1..d97a7156225 100644 --- a/lib/js/bs.js +++ b/lib/js/bs.js @@ -31,6 +31,8 @@ var Stack = 0; var Range = 0; +var SortedMapDict = 0; + var $$Map = 0; var MapM = 0; @@ -66,6 +68,7 @@ exports.SortInt = SortInt; exports.SortString = SortString; exports.Stack = Stack; exports.Range = Range; +exports.SortedMapDict = SortedMapDict; exports.$$Map = $$Map; exports.MapM = MapM; exports.$$Set = $$Set; From 6a60f89efdcc411d0d50ac521a23bbaa6ceb71f8 Mon Sep 17 00:00:00 2001 From: Hongbo Zhang Date: Sat, 27 Jan 2018 11:37:54 +0800 Subject: [PATCH 06/17] clean up set api --- jscomp/others/.depend | 8 +- jscomp/others/Makefile | 1 + jscomp/others/bs.ml | 1 + jscomp/others/bs_Set.ml | 390 +++++-------------- jscomp/others/bs_Set.mli | 130 +------ jscomp/others/bs_SortedSetDict.ml | 231 +++++++++++ jscomp/others/bs_SortedSetDict.mli | 142 +++++++ jscomp/test/bs_map_test.js | 20 +- jscomp/test/bs_map_test.ml | 3 +- jscomp/test/bs_poly_map_test.js | 16 +- jscomp/test/bs_poly_map_test.ml | 2 +- jscomp/test/bs_poly_mutable_map_test.js | 2 +- jscomp/test/bs_poly_mutable_map_test.ml | 2 +- jscomp/test/bs_poly_set_test.js | 98 ++--- jscomp/test/bs_poly_set_test.ml | 10 +- lib/js/bs.js | 3 + lib/js/bs_Set.js | 487 +++--------------------- lib/js/bs_SortedSetDict.js | 352 +++++++++++++++++ 18 files changed, 981 insertions(+), 917 deletions(-) create mode 100644 jscomp/others/bs_SortedSetDict.ml create mode 100644 jscomp/others/bs_SortedSetDict.mli create mode 100644 lib/js/bs_SortedSetDict.js diff --git a/jscomp/others/.depend b/jscomp/others/.depend index 99bd5692106..387d7ee567a 100644 --- a/jscomp/others/.depend +++ b/jscomp/others/.depend @@ -48,6 +48,8 @@ bs_BagM.cmj : bs_Cmp.cmj : bs_Cmp.cmi bs_SortedMapDict.cmj : bs_internalAVLtree.cmj bs_Cmp.cmj bs_Array.cmj \ bs_SortedMapDict.cmi +bs_SortedSetDict.cmj : bs_internalAVLset.cmj bs_Cmp.cmj bs_Array.cmj \ + bs_SortedSetDict.cmi bs_Map.cmj : bs_SortedMapDict.cmj bs_Cmp.cmj bs_Array.cmj bs_Map.cmi bs_internalMapInt.cmj : bs_internalAVLtree.cmj bs_Sort.cmj bs_Array.cmj bs_internalMapString.cmj : bs_internalAVLtree.cmj bs_Sort.cmj bs_Array.cmj @@ -59,8 +61,7 @@ bs_MapStringM.cmj : bs_internalMapString.cmj bs_internalAVLtree.cmj \ bs_SortString.cmj bs_Array.cmj bs_MapStringM.cmi bs_MapIntM.cmj : bs_internalMapInt.cmj bs_internalAVLtree.cmj bs_SortInt.cmj \ bs_Array.cmj bs_MapIntM.cmi -bs_Set.cmj : bs_internalAVLset.cmj bs_Cmp.cmj bs_Bag.cmj bs_Array.cmj \ - bs_Set.cmi +bs_Set.cmj : bs_SortedSetDict.cmj bs_Cmp.cmj bs_Array.cmj bs_Set.cmi bs_SetM.cmj : bs_internalAVLset.cmj bs_Sort.cmj bs_Cmp.cmj bs_BagM.cmj \ bs_Array.cmj bs_SetM.cmi bs_MapM.cmj : bs_internalAVLtree.cmj bs_Sort.cmj bs_Cmp.cmj bs_BagM.cmj \ @@ -120,12 +121,13 @@ bs_HashSetString.cmi : bs_HashSetInt.cmi : bs_Cmp.cmi : bs_SortedMapDict.cmi : bs_Cmp.cmi +bs_SortedSetDict.cmi : bs_Cmp.cmi bs_Map.cmi : bs_SortedMapDict.cmi bs_Cmp.cmi bs_MapString.cmi : bs_MapInt.cmi : bs_MapStringM.cmi : bs_MapIntM.cmi : -bs_Set.cmi : bs_Cmp.cmi +bs_Set.cmi : bs_SortedSetDict.cmi bs_Cmp.cmi bs_SetM.cmi : bs_Cmp.cmi bs_MapM.cmi : bs_Cmp.cmi bs_SetInt.cmi : diff --git a/jscomp/others/Makefile b/jscomp/others/Makefile index 8e45db0bb2e..dfb7ed02397 100644 --- a/jscomp/others/Makefile +++ b/jscomp/others/Makefile @@ -32,6 +32,7 @@ SOURCE_LIST= node_path node_fs node_process dict node_module js_array js_string bs_BagM\ bs_Cmp\ bs_SortedMapDict\ + bs_SortedSetDict\ bs_Map\ bs_internalMapInt\ bs_internalMapString\ diff --git a/jscomp/others/bs.ml b/jscomp/others/bs.ml index 0f360a8eff1..a4f8bfe1f08 100644 --- a/jscomp/others/bs.ml +++ b/jscomp/others/bs.ml @@ -42,6 +42,7 @@ module SortString = Bs_SortString module Stack = Bs_Stack module Range = Bs_Range module SortedMapDict = Bs_SortedMapDict +module SortedSetDict = Bs_SortedSetDict module Map = Bs_Map module MapM = Bs_MapM module Set = Bs_Set diff --git a/jscomp/others/bs_Set.ml b/jscomp/others/bs_Set.ml index 6b2c32688b4..665a3f91299 100644 --- a/jscomp/others/bs_Set.ml +++ b/jscomp/others/bs_Set.ml @@ -1,353 +1,153 @@ - -module N = Bs_internalAVLset -module B = Bs_Bag +(* Copyright (C) 2017 Authors of BuckleScript + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * In addition to the permissions granted to you by the LGPL, you may combine + * or link a "work that uses the Library" with a publicly distributed version + * of this file to produce a combined library or application, then distribute + * that combined work under the terms of your choosing, with no requirement + * to comply with the obligations normally placed on you by section 4 of the + * LGPL version 3 (or the corresponding section of a later version of the LGPL + * should you choose to use a later version). + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) + +module N = Bs_SortedSetDict module A = Bs_Array -type ('k,'id) t0 = 'k N.t0 -type ('elt,'id) t = (('elt,'id) Bs_Cmp.t , ('elt,'id) t0) B.bag - -(* here we relies on reference transparence - address equality means everything equal across time - no need to call [bal] again -*) -let rec add0 (t : _ t0) x ~cmp : _ t0 = - match N.toOpt t with - | None -> N.singleton0 x - | Some nt -> - let k = N.key nt in - let c = (Bs_Cmp.getCmp cmp) x k [@bs] in - if c = 0 then t - else - let l,r = N.(left nt, right nt) in - if c < 0 then - let ll = add0 ~cmp l x in - if ll == l then t - else N.bal ll k r - else - let rr = add0 ~cmp r x in - if rr == r then t - else N.bal l k rr - -let rec remove0 (t : _ t0) x ~cmp : _ t0 = - match N.toOpt t with - None -> t - | Some n -> - let l,v,r = N.(left n , key n, right n) in - let c = (Bs_Cmp.getCmp cmp) x v [@bs] in - if c = 0 then - match N.toOpt l, N.toOpt r with - | (None, _) -> r - | (_, None) -> l - | (_, Some rn) -> - let v = ref (N.key rn) in - let r = N.removeMinAuxWithRef rn v in - N.bal l !v r - else - if c < 0 then - let ll = remove0 ~cmp l x in - if ll == l then t - else N.bal ll v r - else - let rr = remove0 ~cmp r x in - if rr == r then t - else N.bal l v rr - -let mergeArray0 h arr ~cmp = - let len = A.length arr in - let v = ref h in - for i = 0 to len - 1 do - let key = A.getUnsafe arr i in - v := add0 !v ~cmp key - done ; - !v - -let removeArray0 h arr ~cmp = - let len = A.length arr in - let v = ref h in - for i = 0 to len - 1 do - let key = A.getUnsafe arr i in - v := remove0 !v ~cmp key - done ; - !v - -let rec splitAuxNoPivot ~cmp (n : _ N.node) x : _ * _ = - let l,v,r = N.(left n , key n, right n) in - let c = (Bs_Cmp.getCmp cmp) x v [@bs] in - if c = 0 then l,r - else - if c < 0 then - match N.toOpt l with - | None -> - N.empty , N.return n - | Some l -> - let (ll, rl) = splitAuxNoPivot ~cmp l x in - ll, N.joinShared rl v r - else - match N.toOpt r with - | None -> - N.return n, N.empty - | Some r -> - let lr, rr = splitAuxNoPivot ~cmp r x in - N.joinShared l v lr, rr - -let rec splitAuxPivot ~cmp (n : _ N.node) x pres : _ * _ = - let l,v,r = N.(left n , key n, right n) in - let c = (Bs_Cmp.getCmp cmp) x v [@bs] in - if c = 0 then - begin - pres := true; - l, r - end - else - if c < 0 then - match N.toOpt l with - | None -> - N.empty , N.return n - | Some l -> - let (ll, rl) = splitAuxPivot ~cmp l x pres in - ll, N.joinShared rl v r - else - match N.toOpt r with - | None -> - N.return n, N.empty - | Some r -> - let lr, rr = splitAuxPivot ~cmp r x pres in - N.joinShared l v lr, rr - -let split0 (t : _ t0) x ~cmp = - match N.toOpt t with - None -> - (N.empty, N.empty), false - | Some n -> - let pres = ref false in - let v = splitAuxPivot ~cmp n x pres in - v, !pres - -(* [union0 s1 s2] - Use the pivot to split the smaller collection -*) -let rec union0 (s1 : _ t0) (s2 : _ t0) ~cmp : _ t0= - match N.(toOpt s1, toOpt s2) with - (None, _) -> s2 - | (_, None) -> s1 - | Some n1, Some n2 -> - let h1, h2 = N.(h n1 , h n2) in - if h1 >= h2 then - if h2 = 1 then add0 ~cmp s1 (N.key n2) - else begin - let l1, v1, r1 = N.(left n1, key n1, right n1) in - let l2, r2 = splitAuxNoPivot ~cmp n2 v1 in - N.joinShared (union0 ~cmp l1 l2) v1 (union0 ~cmp r1 r2) - end - else - if h1 = 1 then add0 s2 ~cmp (N.key n1) - else begin - let l2, v2, r2 = N.(left n2 , key n2, right n2) in - let l1, r1 = splitAuxNoPivot ~cmp n1 v2 in - N.joinShared (union0 ~cmp l1 l2) v2 (union0 ~cmp r1 r2) - end - -let rec inter0 (s1 : _ t0) (s2 : _ t0) ~cmp = - match N.(toOpt s1, toOpt s2) with - | None, _ - | _, None -> N.empty - | Some n1, Some n2 -> - let l1,v1,r1 = N.(left n1, key n1, right n1) in - let pres = ref false in - let l2,r2 = splitAuxPivot ~cmp n2 v1 pres in - let ll = inter0 ~cmp l1 l2 in - let rr = inter0 ~cmp r1 r2 in - if !pres then N.joinShared ll v1 rr - else N.concatShared ll rr - -let rec diff0 s1 s2 ~cmp = - match N.(toOpt s1, toOpt s2) with - (None, _) - | (_, None) -> s1 - | Some n1, Some n2 -> - let l1,v1,r1 = N.(left n1, key n1, right n1) in - let pres = ref false in - let l2, r2 = splitAuxPivot ~cmp n2 v1 pres in - let ll = diff0 ~cmp l1 l2 in - let rr = diff0 ~cmp r1 r2 in - if !pres then N.concatShared ll rr - else N.joinShared ll v1 rr - - - - - - - -let ofArray (type elt) (type id) ~(dict : (elt,id) Bs_Cmp.t) data = +type ('k,'id) t0 = ('k, 'id) N.t +type ('key, 'id) dict = ('key, 'id) Bs_Cmp.t + +type ('k,'id) t = { + dict: ('k, 'id) dict ; + data: ('k, 'id) t0 +} [@@bs.deriving abstract] + + + +let ofArray (type elt) (type id) data ~(dict : (elt,id) dict) = let module M = (val dict ) in - B.bag ~dict ~data:(N.ofArray0 ~cmp:M.cmp data) + t ~dict ~data:(N.ofArray ~cmp:M.cmp data) let remove (type elt) (type id) (m : (elt,id) t) e = - let dict, data = B.(dict m, data m) in - let module M = (val dict) in - let newData = remove0 ~cmp:M.cmp data e in + let module M = (val dict m) in + let data = data m in + let newData = N.remove ~cmp:M.cmp data e in if newData == data then m - else B.bag ~dict ~data:newData + else t ~dict:(module M) ~data:newData let add (type elt) (type id) (m : (elt,id) t) e = - let dict, data = B.(dict m, data m) in - let module M = (val dict) in - let newData = (add0 ~cmp:(M.cmp) data e) in + let module M = (val dict m) in + let data = data m in + let newData = N.add ~cmp:M.cmp data e in if newData == data then m else - B.bag - ~dict - ~data:newData + t ~dict:(module M) ~data:newData let mergeMany (type elt) (type id) (m : (elt,id) t) e = - let dict, data = B.(dict m, data m) in - let module M = (val dict) in - let newData = mergeArray0 ~cmp:M.cmp data e in - B.bag ~dict ~data:newData + let module M = (val dict m) in + t ~dict:(module M) ~data:(N.mergeMany ~cmp:M.cmp (data m) e ) let removeMany (type elt) (type id) (m : (elt,id) t) e = - let dict, data = B.(dict m, data m) in - let module M = (val dict) in - let newData = removeArray0 ~cmp:M.cmp data e in - if newData == data then m - else B.bag ~dict ~data:newData - - - + let module M = (val dict m) in + t ~dict:(module M) ~data:(N.removeMany ~cmp:M.cmp (data m) e) let union (type elt) (type id) (m : (elt,id) t) (n : (elt,id) t) = - let dict, mdata, ndata = B.(dict m, data m, data n) in - let module M = (val dict) in - B.bag ~data:(union0 ~cmp:M.cmp mdata ndata) ~dict - + let module M = (val dict m) in + t ~data:(N.union ~cmp:M.cmp (data m) (data n)) ~dict:(module M) let intersect (type elt) (type id) (m : (elt,id) t) (n : (elt,id) t) = - let dict, mdata, ndata = B.(dict m, data m, data n) in - let module M = (val dict) in - B.bag ~data:(inter0 ~cmp:M.cmp mdata ndata) ~dict - + let module M = (val dict m) in + t ~data:(N.intersect ~cmp:M.cmp (data m) (data n)) ~dict:(module M) let diff (type elt) (type id) (m : (elt,id) t) (n : (elt,id) t) = - let dict, mdata, ndata = B.(dict m, data m, data n) in - let module M = (val dict) in - B.bag ~dict ~data:(diff0 ~cmp:M.cmp mdata ndata ) - - + let module M = (val dict m) in + t ~dict:(module M) ~data:(N.diff ~cmp:M.cmp (data m) (data n)) let subset (type elt) (type id) (m : (elt,id) t) (n : (elt,id) t) = - let dict, mdata, ndata = B.(dict m, data m, data n) in - let module M = (val dict) in - N.subset0 ~cmp:M.cmp mdata ndata + let module M = (val dict m) in + N.subset ~cmp:M.cmp (data m) (data n) let split (type elt) (type id) (m : (elt,id) t) e = - let dict, data = B.(dict m, data m) in - let module M = (val dict) in - let (l, r), b = split0 ~cmp:M.cmp data e in - (B.bag ~dict ~data:l, B.bag ~dict ~data:r), b + let module M = (val dict m) in + let (l, r), b = N.split ~cmp:M.cmp (data m) e in + (t ~dict:(module M) ~data:l, t ~dict:(module M) ~data:r), b let empty ~dict = - B.bag ~dict ~data:N.empty0 + t ~dict ~data:N.empty -let isEmpty m = N.isEmpty0 (B.data m) - -let singleton e ~dict = - B.bag ~dict ~data:(N.singleton0 e) +let isEmpty m = N.isEmpty (data m) let cmp (type elt) (type id) (m : (elt,id) t) (n : (elt,id) t) = - let dict, mdata, ndata = B.(dict m, data m, data n) in - let module M = (val dict) in - N.cmp0 ~cmp:M.cmp mdata ndata + let module M = (val dict m) in + N.cmp ~cmp:M.cmp (data m) (data n) let eq (type elt) (type id) (m : (elt,id) t) (n : (elt,id) t) = - let dict, mdata, ndata = B.(dict m, data m, data n) in - let module M = (val dict) in - N.eq0 ~cmp:M.cmp mdata ndata + let module M = (val dict m) in + N.eq ~cmp:M.cmp (data m) (data n) -let forEach m f = N.iter0 (B.data m) f +let forEach m f = N.forEach (data m) f -let reduce m acc f = N.fold0 (B.data m) acc f +let reduce m acc f = N.reduce (data m) acc f -let every m f = N.every0 (B.data m) f +let every m f = N.every (data m) f -let some m f = N.some0 (B.data m) f +let some m f = N.some (data m) f let keepBy m f = - let data, dict = B.(data m, dict m) in - B.bag ~dict ~data:(N.filterShared0 data f ) + t ~dict:(dict m) ~data:(N.keepBy (data m) f ) let partition m f = - let mdata, dict = B.(data m, dict m) in - let l,r = N.partitionShared0 mdata f in - B.bag ~data:l ~dict, B.bag ~data:r ~dict - -let size m = N.length0 (B.data m) + let l,r = N.partition (data m) f in + let dict = dict m in + t ~data:l ~dict, t ~data:r ~dict -let toList m = N.toList0 (B.data m) -let toArray m = N.toArray0 (B.data m) - -let minimum m = N.minOpt0 (B.data m) -let minNull m = N.minNull0 (B.data m) -let maximum m = N.maxOpt0 (B.data m) -let maxNull m = N.maxNull0 (B.data m) +let size m = N.size (data m) +let toList m = N.toList (data m) +let toArray m = N.toArray (data m) +let minimum m = N.minimum (data m) +let minNull m = N.minNull (data m) +let maximum m = N.maximum (data m) +let maxNull m = N.maxNull (data m) let get (type elt) (type id) (m : (elt,id) t) e = - let dict, data = B.(dict m, data m) in - let module M = (val dict) in - N.findOpt0 ~cmp:M.cmp data e + let module M = (val dict m) in + N.get ~cmp:M.cmp (data m) e let getNull (type elt) (type id) (m : (elt,id) t) e = - let dict, data = B.(dict m, data m) in - let module M = (val dict) in - N.findNull0 ~cmp:M.cmp data e + let module M = (val dict m) in + N.getNull ~cmp:M.cmp (data m) e let getExn (type elt) (type id) (m : (elt,id) t) e = - let dict, data = B.(dict m, data m) in - let module M = (val dict) in - N.findExn0 ~cmp:M.cmp data e + let module M = (val dict m) in + N.getExn ~cmp:M.cmp (data m) e let has (type elt) (type id) (m : (elt,id) t) e = - let dict, data = B.(dict m, data m) in - let module M = (val dict) in - N.mem0 ~cmp:(M.cmp) data e + let module M = (val dict m) in + N.has ~cmp:M.cmp (data m) e let ofSortedArrayUnsafe xs ~dict = - B.bag ~dict ~data:(N.ofSortedArrayUnsafe0 xs) + t ~dict ~data:(N.ofSortedArrayUnsafe xs) -let empty0 = N.empty0 -let ofArray0 = N.ofArray0 -let isEmpty0 = N.isEmpty0 -let singleton0 = N.singleton0 - - -let cmp0 = N.cmp0 -let eq0 = N.eq0 -let has0 = N.mem0 -let forEach0 = N.iter0 -let reduce0 = N.fold0 -let every0 = N.every0 -let some0 = N.some0 -let size0 = N.length0 -let toList0 = N.toList0 -let toArray0 = N.toArray0 -let minimum0 = N.minOpt0 -let maximum0 = N.maxOpt0 -let get0 = N.findOpt0 -let getNull0 = N.findNull0 - -let ofSortedArrayUnsafe0 = N.ofSortedArrayUnsafe0 -let subset0 = N.subset0 -let filter0 = N.filterShared0 -let partition0 = N.partitionShared0 - -let getData = B.data -let getDict = B.dict -let packDictData = B.bag -let checkInvariantInternal d = N.checkInvariantInternal (B.data d) + +let getData = data +let getDict = dict +let packDictData = t +let checkInvariantInternal d = N.checkInvariantInternal (data d) diff --git a/jscomp/others/bs_Set.mli b/jscomp/others/bs_Set.mli index ccb410c1fdf..e2bec85e0a3 100644 --- a/jscomp/others/bs_Set.mli +++ b/jscomp/others/bs_Set.mli @@ -25,11 +25,15 @@ -type ('k,'id) t -val empty: dict:('elt, 'id) Bs_Cmp.t -> ('elt, 'id) t +type ('k,'id) t -val ofArray: dict:('k, 'id) Bs_Cmp.t -> 'k array -> ('k, 'id) t -val ofSortedArrayUnsafe: 'elt array -> dict:('elt, 'id) Bs_Cmp.t -> ('elt,'id) t +type ('key, 'id) dict = ('key, 'id) Bs_Cmp.t + +val empty: dict:('elt, 'id) dict -> ('elt, 'id) t + +val ofArray: 'k array -> dict:('k, 'id) dict -> ('k, 'id) t + +val ofSortedArrayUnsafe: 'elt array -> dict:('elt, 'id) dict -> ('elt,'id) t val isEmpty: _ t -> bool val has: ('elt, 'id) t -> 'elt -> bool @@ -103,120 +107,8 @@ val checkInvariantInternal: _ t -> bool it is still safe API but more verbose. More API will be exposed by needs *) -type ('k,'id) t0 -val getData: ('k,'id) t -> ('k,'id) t0 -val getDict: ('k,'id) t -> ('k,'id) Bs_Cmp.t -val packDictData: dict:('k, 'id) Bs_Cmp.t -> data:('k, 'id) t0 -> ('k, 'id) t - -val empty0: ('elt, 'id) t0 - -val ofArray0: 'k array -> cmp:('k,'id) Bs_Cmp.cmp -> ('k, 'id) t0 - -val isEmpty0: ('elt, 'id) t0 -> bool - -val has0: - ('elt, 'id) t0 -> - 'elt -> - cmp: ('elt,'id) Bs_Cmp.cmp -> - bool -val add0: - ('elt, 'id) t0 -> - 'elt -> - cmp: ('elt,'id) Bs_Cmp.cmp -> - ('elt, 'id) t0 - -val remove0: - ('elt, 'id) t0 -> - 'elt -> - cmp: ('elt,'id) Bs_Cmp.cmp -> - ('elt, 'id) t0 - -val mergeArray0: - ('elt, 'id) t0 -> 'elt array -> - cmp: ('elt,'id) Bs_Cmp.cmp -> - ('elt, 'id) t0 - -val removeArray0: - ('elt, 'id) t0 -> 'elt array -> - cmp: ('elt,'id) Bs_Cmp.cmp -> - ('elt, 'id) t0 - - - -val union0: - ('elt, 'id) t0 -> - ('elt, 'id) t0 -> - cmp: ('elt,'id) Bs_Cmp.cmp -> - ('elt, 'id) t0 -val inter0: - ('elt, 'id) t0 -> - ('elt, 'id) t0 -> - cmp: ('elt,'id) Bs_Cmp.cmp -> - ('elt, 'id) t0 +val getData: ('k,'id) t -> ('k,'id) Bs_SortedSetDict.t +val getDict: ('k,'id) t -> ('k,'id) dict +val packDictData: dict:('k, 'id) dict -> data:('k, 'id) Bs_SortedSetDict.t -> ('k, 'id) t -val diff0: - ('elt, 'id) t0 -> - ('elt, 'id) t0 -> - cmp: ('elt,'id) Bs_Cmp.cmp -> - ('elt, 'id) t0 - - -val subset0: - ('elt, 'id) t0 -> - ('elt, 'id) t0 -> - cmp: ('elt,'id) Bs_Cmp.cmp -> - bool - -val cmp0: - ('elt, 'id) t0 -> - ('elt, 'id) t0 -> - cmp: ('elt,'id) Bs_Cmp.cmp -> - int - -val eq0: - ('elt, 'id) t0 -> - ('elt, 'id) t0 -> - cmp: ('elt,'id) Bs_Cmp.cmp -> - bool - -val forEach0: ('elt, 'id) t0 -> ('elt -> unit [@bs]) -> unit - -val reduce0: ('elt, 'id) t0 -> 'a -> ('a -> 'elt -> 'a [@bs]) -> 'a -val every0: ('elt, 'id) t0 -> ('elt -> bool [@bs]) -> bool -val some0: ('elt, 'id) t0 -> ('elt -> bool [@bs]) -> bool - -val filter0: ('elt, 'id) t0 -> ('elt -> bool [@bs]) -> ('elt, 'id) t0 - -val partition0: ('elt, 'id) t0 -> ('elt -> bool [@bs]) -> ('elt, 'id) t0 * ('elt, 'id) t0 - -val size0: ('elt, 'id) t0 -> int - -val toList0: ('elt, 'id) t0 -> 'elt list - -val toArray0: ('elt, 'id) t0 -> 'elt array - - -val minimum0: ('elt, 'id) t0 -> 'elt option - -val maximum0: ('elt, 'id) t0 -> 'elt option - -val split0: - ('elt, 'id) t0 -> 'elt -> - cmp: ('elt,'id) Bs_Cmp.cmp -> - (('elt, 'id) t0 * ('elt, 'id) t0) * bool - -val ofSortedArrayUnsafe0: - 'elt array -> ('elt,'id) t0 - - -val get0: - ('elt, 'id) t0 -> 'elt -> - cmp: ('elt,'id) Bs_Cmp.cmp -> - 'elt option - - -val getNull0: - ('elt, 'id) t0 -> 'elt -> - cmp: ('elt,'id) Bs_Cmp.cmp -> - 'elt Js.null diff --git a/jscomp/others/bs_SortedSetDict.ml b/jscomp/others/bs_SortedSetDict.ml new file mode 100644 index 00000000000..db1b2a0a52b --- /dev/null +++ b/jscomp/others/bs_SortedSetDict.ml @@ -0,0 +1,231 @@ +(* Copyright (C) 2017 Authors of BuckleScript + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * In addition to the permissions granted to you by the LGPL, you may combine + * or link a "work that uses the Library" with a publicly distributed version + * of this file to produce a combined library or application, then distribute + * that combined work under the terms of your choosing, with no requirement + * to comply with the obligations normally placed on you by section 4 of the + * LGPL version 3 (or the corresponding section of a later version of the LGPL + * should you choose to use a later version). + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) + +module N = Bs_internalAVLset +module A = Bs_Array + +type ('k,'id) t = 'k N.t0 + +type ('key, 'id) cmp = ('key, 'id) Bs_Cmp.cmp + + +(* here we relies on reference transparence + address equality means everything equal across time + no need to call [bal] again +*) +let rec add (t : _ t) x ~cmp : _ t = + match N.toOpt t with + | None -> N.singleton0 x + | Some nt -> + let k = N.key nt in + let c = (Bs_Cmp.getCmp cmp) x k [@bs] in + if c = 0 then t + else + let l,r = N.(left nt, right nt) in + if c < 0 then + let ll = add ~cmp l x in + if ll == l then t + else N.bal ll k r + else + let rr = add ~cmp r x in + if rr == r then t + else N.bal l k rr + +let rec remove (t : _ t) x ~cmp : _ t = + match N.toOpt t with + None -> t + | Some n -> + let l,v,r = N.(left n , key n, right n) in + let c = (Bs_Cmp.getCmp cmp) x v [@bs] in + if c = 0 then + match N.toOpt l, N.toOpt r with + | (None, _) -> r + | (_, None) -> l + | (_, Some rn) -> + let v = ref (N.key rn) in + let r = N.removeMinAuxWithRef rn v in + N.bal l !v r + else + if c < 0 then + let ll = remove ~cmp l x in + if ll == l then t + else N.bal ll v r + else + let rr = remove ~cmp r x in + if rr == r then t + else N.bal l v rr + +let mergeMany h arr ~cmp = + let len = A.length arr in + let v = ref h in + for i = 0 to len - 1 do + let key = A.getUnsafe arr i in + v := add !v ~cmp key + done ; + !v + +let removeMany h arr ~cmp = + let len = A.length arr in + let v = ref h in + for i = 0 to len - 1 do + let key = A.getUnsafe arr i in + v := remove !v ~cmp key + done ; + !v + +let rec splitAuxNoPivot ~cmp (n : _ N.node) x : _ * _ = + let l,v,r = N.(left n , key n, right n) in + let c = (Bs_Cmp.getCmp cmp) x v [@bs] in + if c = 0 then l,r + else + if c < 0 then + match N.toOpt l with + | None -> + N.empty , N.return n + | Some l -> + let (ll, rl) = splitAuxNoPivot ~cmp l x in + ll, N.joinShared rl v r + else + match N.toOpt r with + | None -> + N.return n, N.empty + | Some r -> + let lr, rr = splitAuxNoPivot ~cmp r x in + N.joinShared l v lr, rr + +let rec splitAuxPivot ~cmp (n : _ N.node) x pres : _ * _ = + let l,v,r = N.(left n , key n, right n) in + let c = (Bs_Cmp.getCmp cmp) x v [@bs] in + if c = 0 then + begin + pres := true; + l, r + end + else + if c < 0 then + match N.toOpt l with + | None -> + N.empty , N.return n + | Some l -> + let (ll, rl) = splitAuxPivot ~cmp l x pres in + ll, N.joinShared rl v r + else + match N.toOpt r with + | None -> + N.return n, N.empty + | Some r -> + let lr, rr = splitAuxPivot ~cmp r x pres in + N.joinShared l v lr, rr + +let split (t : _ t) x ~cmp = + match N.toOpt t with + None -> + (N.empty, N.empty), false + | Some n -> + let pres = ref false in + let v = splitAuxPivot ~cmp n x pres in + v, !pres + +(* [union s1 s2] + Use the pivot to split the smaller collection +*) +let rec union (s1 : _ t) (s2 : _ t) ~cmp : _ t = + match N.(toOpt s1, toOpt s2) with + (None, _) -> s2 + | (_, None) -> s1 + | Some n1, Some n2 -> + let h1, h2 = N.(h n1 , h n2) in + if h1 >= h2 then + if h2 = 1 then add ~cmp s1 (N.key n2) + else begin + let l1, v1, r1 = N.(left n1, key n1, right n1) in + let l2, r2 = splitAuxNoPivot ~cmp n2 v1 in + N.joinShared (union ~cmp l1 l2) v1 (union ~cmp r1 r2) + end + else + if h1 = 1 then add s2 ~cmp (N.key n1) + else begin + let l2, v2, r2 = N.(left n2 , key n2, right n2) in + let l1, r1 = splitAuxNoPivot ~cmp n1 v2 in + N.joinShared (union ~cmp l1 l2) v2 (union ~cmp r1 r2) + end + +let rec intersect (s1 : _ t) (s2 : _ t) ~cmp = + match N.(toOpt s1, toOpt s2) with + | None, _ + | _, None -> N.empty + | Some n1, Some n2 -> + let l1,v1,r1 = N.(left n1, key n1, right n1) in + let pres = ref false in + let l2,r2 = splitAuxPivot ~cmp n2 v1 pres in + let ll = intersect ~cmp l1 l2 in + let rr = intersect ~cmp r1 r2 in + if !pres then N.joinShared ll v1 rr + else N.concatShared ll rr + +let rec diff s1 s2 ~cmp = + match N.(toOpt s1, toOpt s2) with + (None, _) + | (_, None) -> s1 + | Some n1, Some n2 -> + let l1,v1,r1 = N.(left n1, key n1, right n1) in + let pres = ref false in + let l2, r2 = splitAuxPivot ~cmp n2 v1 pres in + let ll = diff ~cmp l1 l2 in + let rr = diff ~cmp r1 r2 in + if !pres then N.concatShared ll rr + else N.joinShared ll v1 rr + + +let empty = N.empty0 +let ofArray = N.ofArray0 +let isEmpty = N.isEmpty0 + + + +let cmp = N.cmp0 +let eq = N.eq0 +let has = N.mem0 +let forEach = N.iter0 +let reduce = N.fold0 +let every = N.every0 +let some = N.some0 +let size = N.length0 +let toList = N.toList0 +let toArray = N.toArray0 +let minimum = N.minOpt0 +let maximum = N.maxOpt0 +let maxNull = N.maxNull0 +let minNull = N.minNull0 +let get = N.findOpt0 +let getExn = N.findExn0 +let getNull = N.findNull0 + + +let ofSortedArrayUnsafe = N.ofSortedArrayUnsafe0 +let subset = N.subset0 +let keepBy = N.filterShared0 +let partition = N.partitionShared0 + +let checkInvariantInternal = N.checkInvariantInternal diff --git a/jscomp/others/bs_SortedSetDict.mli b/jscomp/others/bs_SortedSetDict.mli new file mode 100644 index 00000000000..ca73df12009 --- /dev/null +++ b/jscomp/others/bs_SortedSetDict.mli @@ -0,0 +1,142 @@ +(* Copyright (C) 2017 Authors of BuckleScript + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * In addition to the permissions granted to you by the LGPL, you may combine + * or link a "work that uses the Library" with a publicly distributed version + * of this file to produce a combined library or application, then distribute + * that combined work under the terms of your choosing, with no requirement + * to comply with the obligations normally placed on you by section 4 of the + * LGPL version 3 (or the corresponding section of a later version of the LGPL + * should you choose to use a later version). + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) + +type ('key, 'id) t + +type ('key, 'id) cmp = ('key, 'id) Bs_Cmp.cmp + +val empty: ('elt, 'id) t + +val ofArray: + 'k array -> + cmp:('k, 'id) cmp -> + ('k, 'id) t + +val ofSortedArrayUnsafe: 'elt array -> ('elt,'id) t + +val isEmpty: _ t -> bool +val has: + ('k, 'id) t -> 'k -> + cmp:('k, 'id) cmp -> + bool + + +val add: + ('k, 'id) t -> 'k -> + cmp:('k, 'id) cmp -> + ('k, 'id) t +(** [add s x] If [x] was already in [s], [s] is returned unchanged. *) + +val mergeMany: + ('elt, 'id) t -> 'elt array -> + cmp:('elt, 'id) cmp -> + ('elt, 'id) t + +val remove: + ('elt, 'id) t -> + 'elt -> + cmp:('elt, 'id) cmp -> + ('elt, 'id) t +(** [remove m x] If [x] was not in [m], [m] is returned reference unchanged. *) + +val removeMany: + ('elt, 'id) t -> 'elt array -> + cmp:('elt, 'id) cmp -> + ('elt, 'id) t + + +val union: + ('elt, 'id) t -> ('elt, 'id) t -> + cmp:('elt, 'id) cmp -> + ('elt, 'id) t +val intersect: + ('elt, 'id) t -> ('elt, 'id) t -> + cmp:('elt, 'id) cmp -> + ('elt, 'id) t + +val diff: ('elt, 'id) t -> ('elt, 'id) t -> + cmp:('elt, 'id) cmp -> + ('elt, 'id) t +val subset: ('elt, 'id) t -> ('elt, 'id) t -> + cmp:('elt, 'id) cmp -> + bool + +val cmp: ('elt, 'id) t -> ('elt, 'id) t -> + cmp:('elt, 'id) cmp -> + int +(** Total ordering between sets. Can be used as the ordering function + for doing sets of sets. *) +val eq: ('elt, 'id) t -> ('elt, 'id) t -> + cmp:('elt, 'id) cmp -> + bool + +val forEach: ('elt, 'id) t -> ('elt -> unit [@bs]) -> unit +(** [forEach s f] applies [f] in turn to all elements of [s]. + In increasing order *) +val reduce: ('elt, 'id) t -> 'a -> ('a -> 'elt -> 'a [@bs]) -> 'a +(** In increasing order. *) +val every: ('elt, 'id) t -> ('elt -> bool [@bs]) -> bool +(** [every p s] checks if all elements of the set + satisfy the predicate [p]. Order unspecified *) + +val some: ('elt, 'id) t -> ('elt -> bool [@bs]) -> bool +(** [some p s] checks if at least one element of + the set satisfies the predicate [p]. *) +val keepBy: ('elt, 'id) t -> ('elt -> bool [@bs]) -> ('elt, 'id) t +(** [keepBy m p] returns the set of all elements in [s] + that satisfy predicate [p]. *) +val partition: ('elt, 'id) t -> ('elt -> bool [@bs]) -> ('elt, 'id) t * ('elt, 'id) t +(** [partition m p] returns a pair of sets [(s1, s2)], where + [s1] is the set of all the elements of [s] that satisfy the + predicate [p], and [s2] is the set of all the elements of + [s] that do not satisfy [p]. *) + +val size: ('elt, 'id) t -> int +val toList: ('elt, 'id) t -> 'elt list +(** In increasing order*) +val toArray: ('elt, 'id) t -> 'elt array + +val minimum: ('elt, 'id) t -> 'elt option +val minNull: ('elt, 'id) t -> 'elt Js.null +val maximum: ('elt, 'id) t -> 'elt option +val maxNull: ('elt, 'id) t -> 'elt Js.null + + + +val get: ('elt, 'id) t -> 'elt -> + cmp:('elt, 'id) cmp -> + 'elt option +val getNull: ('elt, 'id) t -> 'elt -> + cmp:('elt, 'id) cmp -> + 'elt Js.null +val getExn: ('elt, 'id) t -> 'elt -> + cmp:('elt, 'id) cmp -> + 'elt + +val split: ('elt, 'id) t -> 'elt -> + cmp:('elt, 'id) cmp -> + (('elt, 'id) t * ('elt, 'id) t) * bool + +val checkInvariantInternal: _ t -> bool + diff --git a/jscomp/test/bs_map_test.js b/jscomp/test/bs_map_test.js index 92af85bde55..097f4e968a7 100644 --- a/jscomp/test/bs_map_test.js +++ b/jscomp/test/bs_map_test.js @@ -2,14 +2,13 @@ var Mt = require("./mt.js"); var Bs_Map = require("../../lib/js/bs_Map.js"); -var Bs_Set = require("../../lib/js/bs_Set.js"); var Bs_List = require("../../lib/js/bs_List.js"); var Bs_Array = require("../../lib/js/bs_Array.js"); var Bs_MapInt = require("../../lib/js/bs_MapInt.js"); var Caml_primitive = require("../../lib/js/caml_primitive.js"); var Array_data_util = require("./array_data_util.js"); var Bs_SortedMapDict = require("../../lib/js/bs_SortedMapDict.js"); -var Bs_internalAVLset = require("../../lib/js/bs_internalAVLset.js"); +var Bs_SortedSetDict = require("../../lib/js/bs_SortedSetDict.js"); var suites = [/* [] */0]; @@ -73,7 +72,7 @@ console.log(m11); var v = { dict: Icmp2, - data: Bs_internalAVLset.empty0 + data: Bs_SortedSetDict.empty }; var m_dict$1 = m.dict; @@ -83,7 +82,7 @@ var cmp$2 = m_dict$1[/* cmp */0]; var data$1 = v.data; for(var i$1 = 0; i$1 <= 100000; ++i$1){ - data$1 = Bs_Set.add0(data$1, i$1, cmp$2); + data$1 = Bs_SortedSetDict.add(data$1, i$1, cmp$2); } console.log(data$1); @@ -107,7 +106,7 @@ var u0 = f(Bs_Array.map(Array_data_util.randomRange(0, 39), (function (x) { var u1 = Bs_Map.set(u0, 39, 120); -b("File \"bs_map_test.ml\", line 83, characters 4-11", Bs_Array.every2(Bs_SortedMapDict.toArray(u0.data), Bs_Array.map(Array_data_util.range(0, 39), (function (x) { +b("File \"bs_map_test.ml\", line 84, characters 4-11", Bs_Array.every2(Bs_SortedMapDict.toArray(u0.data), Bs_Array.map(Array_data_util.range(0, 39), (function (x) { return /* tuple */[ x, x @@ -120,7 +119,7 @@ b("File \"bs_map_test.ml\", line 83, characters 4-11", Bs_Array.every2(Bs_Sorted } }))); -b("File \"bs_map_test.ml\", line 88, characters 4-11", Bs_List.every2(Bs_SortedMapDict.toList(u0.data), Bs_Array.toList(Bs_Array.map(Array_data_util.range(0, 39), (function (x) { +b("File \"bs_map_test.ml\", line 89, characters 4-11", Bs_List.every2(Bs_SortedMapDict.toList(u0.data), Bs_Array.toList(Bs_Array.map(Array_data_util.range(0, 39), (function (x) { return /* tuple */[ x, x @@ -133,9 +132,9 @@ b("File \"bs_map_test.ml\", line 88, characters 4-11", Bs_List.every2(Bs_SortedM } }))); -eq("File \"bs_map_test.ml\", line 93, characters 5-12", Bs_Map.get(u0, 39), /* Some */[39]); +eq("File \"bs_map_test.ml\", line 94, characters 5-12", Bs_Map.get(u0, 39), /* Some */[39]); -eq("File \"bs_map_test.ml\", line 94, characters 5-12", Bs_Map.get(u1, 39), /* Some */[120]); +eq("File \"bs_map_test.ml\", line 95, characters 5-12", Bs_Map.get(u1, 39), /* Some */[120]); var u = f(Bs_Array.makeByAndShuffle(10000, (function (x) { return /* tuple */[ @@ -144,7 +143,7 @@ var u = f(Bs_Array.makeByAndShuffle(10000, (function (x) { ]; }))); -eq("File \"bs_map_test.ml\", line 100, characters 4-11", Bs_Array.makeBy(10000, (function (x) { +eq("File \"bs_map_test.ml\", line 101, characters 4-11", Bs_Array.makeBy(10000, (function (x) { return /* tuple */[ x, x @@ -171,6 +170,8 @@ var Md0 = 0; var ISet = 0; +var S0 = 0; + exports.suites = suites; exports.test_id = test_id; exports.eq = eq; @@ -190,6 +191,7 @@ exports.vv = vv; exports.vv2 = vv2; exports.Md0 = Md0; exports.ISet = ISet; +exports.S0 = S0; exports.f = f; exports.$eq$tilde = $eq$tilde; /* data Not a pure module */ diff --git a/jscomp/test/bs_map_test.ml b/jscomp/test/bs_map_test.ml index e980ec3fb82..66468784e8b 100644 --- a/jscomp/test/bs_map_test.ml +++ b/jscomp/test/bs_map_test.ml @@ -62,6 +62,7 @@ let () = let _m20 = M.empty (module Icmp) in Js.log m11 +module S0 = Bs.SortedSetDict let () = let count = 100_000 in let v = ISet.empty (module Icmp2) in @@ -70,7 +71,7 @@ let () = let cmp = M.cmp in let data = ref (ISet.getData v) in for i = 0 to count do - data := Bs.Set.add0 ~cmp !data i + data := S0.add ~cmp !data i done ; Js.log !data diff --git a/jscomp/test/bs_poly_map_test.js b/jscomp/test/bs_poly_map_test.js index b6281d94edf..446ed33401d 100644 --- a/jscomp/test/bs_poly_map_test.js +++ b/jscomp/test/bs_poly_map_test.js @@ -27,7 +27,7 @@ function f(x) { } function ff(x) { - return Bs_Set.ofArray(Icmp, x); + return Bs_Set.ofArray(x, Icmp); } function mergeInter(s1, s2) { @@ -39,7 +39,7 @@ function mergeInter(s1, s2) { } })); var x = Bs_SortedMapDict.keysToArray(m.data); - return Bs_Set.ofArray(Icmp, x); + return Bs_Set.ofArray(x, Icmp); } function mergeUnion(s1, s2) { @@ -53,7 +53,7 @@ function mergeUnion(s1, s2) { } })); var x = Bs_SortedMapDict.keysToArray(m.data); - return Bs_Set.ofArray(Icmp, x); + return Bs_Set.ofArray(x, Icmp); } function mergeDiff(s1, s2) { @@ -65,7 +65,7 @@ function mergeDiff(s1, s2) { } })); var x = Bs_SortedMapDict.keysToArray(m.data); - return Bs_Set.ofArray(Icmp, x); + return Bs_Set.ofArray(x, Icmp); } function randomRange(i, j) { @@ -87,19 +87,19 @@ var u1 = Bs_Map.ofArray(x$1, Icmp); var x$2 = Array_data_util.range(30, 100); -b("File \"bs_poly_map_test.ml\", line 47, characters 4-11", Bs_Set.eq(mergeInter(u0, u1), Bs_Set.ofArray(Icmp, x$2))); +b("File \"bs_poly_map_test.ml\", line 47, characters 4-11", Bs_Set.eq(mergeInter(u0, u1), Bs_Set.ofArray(x$2, Icmp))); var x$3 = Array_data_util.range(0, 120); -b("File \"bs_poly_map_test.ml\", line 48, characters 4-11", Bs_Set.eq(mergeUnion(u0, u1), Bs_Set.ofArray(Icmp, x$3))); +b("File \"bs_poly_map_test.ml\", line 48, characters 4-11", Bs_Set.eq(mergeUnion(u0, u1), Bs_Set.ofArray(x$3, Icmp))); var x$4 = Array_data_util.range(0, 29); -b("File \"bs_poly_map_test.ml\", line 49, characters 4-11", Bs_Set.eq(mergeDiff(u0, u1), Bs_Set.ofArray(Icmp, x$4))); +b("File \"bs_poly_map_test.ml\", line 49, characters 4-11", Bs_Set.eq(mergeDiff(u0, u1), Bs_Set.ofArray(x$4, Icmp))); var x$5 = Array_data_util.range(101, 120); -b("File \"bs_poly_map_test.ml\", line 50, characters 4-11", Bs_Set.eq(mergeDiff(u1, u0), Bs_Set.ofArray(Icmp, x$5))); +b("File \"bs_poly_map_test.ml\", line 50, characters 4-11", Bs_Set.eq(mergeDiff(u1, u0), Bs_Set.ofArray(x$5, Icmp))); var x$6 = randomRange(0, 10); diff --git a/jscomp/test/bs_poly_map_test.ml b/jscomp/test/bs_poly_map_test.ml index 27d224baf3c..5b055421476 100644 --- a/jscomp/test/bs_poly_map_test.ml +++ b/jscomp/test/bs_poly_map_test.ml @@ -15,7 +15,7 @@ module N = Bs.Set module A = Bs_Array module I = Array_data_util let f x = M.ofArray ~dict:(module Icmp) x -let ff x = N.ofArray (module Icmp) x +let ff x = N.ofArray ~dict:(module Icmp) x let mergeInter s1 s2 = ff @@ M.keysToArray (M.merge s1 s2 (fun[@bs] k v1 v2 -> diff --git a/jscomp/test/bs_poly_mutable_map_test.js b/jscomp/test/bs_poly_mutable_map_test.js index 058dea08bd1..82955b87005 100644 --- a/jscomp/test/bs_poly_mutable_map_test.js +++ b/jscomp/test/bs_poly_mutable_map_test.js @@ -27,7 +27,7 @@ function f(x) { } function ff(x) { - return Bs_Set.ofArray(Icmp, x); + return Bs_Set.ofArray(x, Icmp); } function randomRange(i, j) { diff --git a/jscomp/test/bs_poly_mutable_map_test.ml b/jscomp/test/bs_poly_mutable_map_test.ml index 980ecca461f..d4fc8e2a733 100644 --- a/jscomp/test/bs_poly_mutable_map_test.ml +++ b/jscomp/test/bs_poly_mutable_map_test.ml @@ -15,7 +15,7 @@ module N = Bs.Set module A = Bs_Array module I = Array_data_util let f x = M.ofArray ~dict:(module Icmp) x -let ff x = N.ofArray (module Icmp) x +let ff x = N.ofArray ~dict:(module Icmp) x let randomRange i j = diff --git a/jscomp/test/bs_poly_set_test.js b/jscomp/test/bs_poly_set_test.js index 1217cea656b..31edcfa519e 100644 --- a/jscomp/test/bs_poly_set_test.js +++ b/jscomp/test/bs_poly_set_test.js @@ -7,7 +7,7 @@ var Bs_Array = require("../../lib/js/bs_Array.js"); var Caml_obj = require("../../lib/js/caml_obj.js"); var Caml_primitive = require("../../lib/js/caml_primitive.js"); var Array_data_util = require("./array_data_util.js"); -var Bs_internalAVLset = require("../../lib/js/bs_internalAVLset.js"); +var Bs_SortedSetDict = require("../../lib/js/bs_SortedSetDict.js"); var suites = [/* [] */0]; @@ -27,7 +27,7 @@ function t(loc, x) { var IntCmp = /* module */[/* cmp */Caml_primitive.caml_int_compare]; -var u0 = Bs_Set.ofArray(IntCmp, Array_data_util.range(0, 30)); +var u0 = Bs_Set.ofArray(Array_data_util.range(0, 30), IntCmp); var u1 = Bs_Set.remove(u0, 0); @@ -77,61 +77,61 @@ b("File \"bs_poly_set_test.ml\", line 33, characters 4-11", +(u0 !== u1)); b("File \"bs_poly_set_test.ml\", line 34, characters 4-11", +(u2 === u1)); -eq("File \"bs_poly_set_test.ml\", line 35, characters 5-12", Bs_internalAVLset.length0(u4.data), 28); +eq("File \"bs_poly_set_test.ml\", line 35, characters 5-12", Bs_SortedSetDict.size(u4.data), 28); -b("File \"bs_poly_set_test.ml\", line 36, characters 4-11", +(29 === Bs_internalAVLset.maxNull0(u4.data))); +b("File \"bs_poly_set_test.ml\", line 36, characters 4-11", +(29 === Bs_SortedSetDict.maxNull(u4.data))); -b("File \"bs_poly_set_test.ml\", line 37, characters 4-11", +(1 === Bs_internalAVLset.minNull0(u4.data))); +b("File \"bs_poly_set_test.ml\", line 37, characters 4-11", +(1 === Bs_SortedSetDict.minNull(u4.data))); b("File \"bs_poly_set_test.ml\", line 38, characters 4-11", +(u4 === u5)); -b("File \"bs_poly_set_test.ml\", line 39, characters 4-11", Bs_internalAVLset.isEmpty0(u6.data)); +b("File \"bs_poly_set_test.ml\", line 39, characters 4-11", Bs_SortedSetDict.isEmpty(u6.data)); -eq("File \"bs_poly_set_test.ml\", line 40, characters 6-13", Bs_internalAVLset.length0(u7.data), 3); +eq("File \"bs_poly_set_test.ml\", line 40, characters 6-13", Bs_SortedSetDict.size(u7.data), 3); -b("File \"bs_poly_set_test.ml\", line 41, characters 4-11", 1 - Bs_internalAVLset.isEmpty0(u7.data)); +b("File \"bs_poly_set_test.ml\", line 41, characters 4-11", 1 - Bs_SortedSetDict.isEmpty(u7.data)); -b("File \"bs_poly_set_test.ml\", line 42, characters 4-11", Bs_internalAVLset.isEmpty0(u8.data)); +b("File \"bs_poly_set_test.ml\", line 42, characters 4-11", Bs_SortedSetDict.isEmpty(u8.data)); b("File \"bs_poly_set_test.ml\", line 45, characters 4-11", Bs_Set.has(u10, 20)); b("File \"bs_poly_set_test.ml\", line 46, characters 4-11", Bs_Set.has(u10, 21)); -eq("File \"bs_poly_set_test.ml\", line 47, characters 5-12", Bs_internalAVLset.length0(u10.data), 20001); +eq("File \"bs_poly_set_test.ml\", line 47, characters 5-12", Bs_SortedSetDict.size(u10.data), 20001); -eq("File \"bs_poly_set_test.ml\", line 48, characters 5-12", Bs_internalAVLset.length0(u11.data), 19800); +eq("File \"bs_poly_set_test.ml\", line 48, characters 5-12", Bs_SortedSetDict.size(u11.data), 19800); -eq("File \"bs_poly_set_test.ml\", line 49, characters 5-12", Bs_internalAVLset.length0(u12.data), 19000); +eq("File \"bs_poly_set_test.ml\", line 49, characters 5-12", Bs_SortedSetDict.size(u12.data), 19000); b("File \"bs_poly_set_test.ml\", line 50, characters 4-11", +(u12 === u13)); -eq("File \"bs_poly_set_test.ml\", line 51, characters 5-12", Bs_internalAVLset.length0(u14.data), 10000); +eq("File \"bs_poly_set_test.ml\", line 51, characters 5-12", Bs_SortedSetDict.size(u14.data), 10000); -eq("File \"bs_poly_set_test.ml\", line 52, characters 5-12", Bs_internalAVLset.length0(u15.data), 1); +eq("File \"bs_poly_set_test.ml\", line 52, characters 5-12", Bs_SortedSetDict.size(u15.data), 1); b("File \"bs_poly_set_test.ml\", line 53, characters 4-11", Bs_Set.has(u15, 20000)); b("File \"bs_poly_set_test.ml\", line 54, characters 4-11", 1 - Bs_Set.has(u15, 2000)); -b("File \"bs_poly_set_test.ml\", line 55, characters 4-11", Bs_internalAVLset.isEmpty0(u16.data)); +b("File \"bs_poly_set_test.ml\", line 55, characters 4-11", Bs_SortedSetDict.isEmpty(u16.data)); -var u17 = Bs_Set.ofArray(IntCmp, Array_data_util.randomRange(0, 100)); +var u17 = Bs_Set.ofArray(Array_data_util.randomRange(0, 100), IntCmp); -var u18 = Bs_Set.ofArray(IntCmp, Array_data_util.randomRange(59, 200)); +var u18 = Bs_Set.ofArray(Array_data_util.randomRange(59, 200), IntCmp); var u19 = Bs_Set.union(u17, u18); -var u20 = Bs_Set.ofArray(IntCmp, Array_data_util.randomRange(0, 200)); +var u20 = Bs_Set.ofArray(Array_data_util.randomRange(0, 200), IntCmp); b("File \"bs_poly_set_test.ml\", line 60, characters 4-11", Bs_Set.eq(u19, u20)); var u21 = Bs_Set.intersect(u17, u18); -eq("File \"bs_poly_set_test.ml\", line 62, characters 5-12", Bs_internalAVLset.toArray0(u21.data), Array_data_util.range(59, 100)); +eq("File \"bs_poly_set_test.ml\", line 62, characters 5-12", Bs_SortedSetDict.toArray(u21.data), Array_data_util.range(59, 100)); var u22 = Bs_Set.diff(u17, u18); -eq("File \"bs_poly_set_test.ml\", line 64, characters 5-12", Bs_internalAVLset.toArray0(u22.data), Array_data_util.range(0, 58)); +eq("File \"bs_poly_set_test.ml\", line 64, characters 5-12", Bs_SortedSetDict.toArray(u22.data), Array_data_util.range(0, 58)); var u23 = Bs_Set.diff(u18, u17); @@ -139,7 +139,7 @@ var u24 = Bs_Set.union(u18, u17); b("File \"bs_poly_set_test.ml\", line 67, characters 4-11", Bs_Set.eq(u24, u19)); -eq("File \"bs_poly_set_test.ml\", line 68, characters 5-12", Bs_internalAVLset.toArray0(u23.data), Array_data_util.range(101, 200)); +eq("File \"bs_poly_set_test.ml\", line 68, characters 5-12", Bs_SortedSetDict.toArray(u23.data), Array_data_util.range(101, 200)); b("File \"bs_poly_set_test.ml\", line 69, characters 4-11", Bs_Set.subset(u23, u18)); @@ -159,39 +159,39 @@ b("File \"bs_poly_set_test.ml\", line 76, characters 4-11", +(/* None */0 === Bs var u25 = Bs_Set.add(u22, 59); -eq("File \"bs_poly_set_test.ml\", line 78, characters 5-12", Bs_internalAVLset.length0(u25.data), 60); +eq("File \"bs_poly_set_test.ml\", line 78, characters 5-12", Bs_SortedSetDict.size(u25.data), 60); var m = { dict: IntCmp, - data: Bs_internalAVLset.empty0 + data: Bs_SortedSetDict.empty }; -b("File \"bs_poly_set_test.ml\", line 79, characters 4-11", +(Bs_internalAVLset.minOpt0(m.data) === /* None */0)); +b("File \"bs_poly_set_test.ml\", line 79, characters 4-11", +(Bs_SortedSetDict.minimum(m.data) === /* None */0)); var m$1 = { dict: IntCmp, - data: Bs_internalAVLset.empty0 + data: Bs_SortedSetDict.empty }; -b("File \"bs_poly_set_test.ml\", line 80, characters 4-11", +(Bs_internalAVLset.maxOpt0(m$1.data) === /* None */0)); +b("File \"bs_poly_set_test.ml\", line 80, characters 4-11", +(Bs_SortedSetDict.maximum(m$1.data) === /* None */0)); var m$2 = { dict: IntCmp, - data: Bs_internalAVLset.empty0 + data: Bs_SortedSetDict.empty }; -b("File \"bs_poly_set_test.ml\", line 81, characters 4-11", Caml_obj.caml_equal(Bs_internalAVLset.minNull0(m$2.data), null)); +b("File \"bs_poly_set_test.ml\", line 81, characters 4-11", Caml_obj.caml_equal(Bs_SortedSetDict.minNull(m$2.data), null)); var m$3 = { dict: IntCmp, - data: Bs_internalAVLset.empty0 + data: Bs_SortedSetDict.empty }; -b("File \"bs_poly_set_test.ml\", line 82, characters 4-11", Caml_obj.caml_equal(Bs_internalAVLset.maxNull0(m$3.data), null)); +b("File \"bs_poly_set_test.ml\", line 82, characters 4-11", Caml_obj.caml_equal(Bs_SortedSetDict.maxNull(m$3.data), null)); function testIterToList(xs) { var v = [/* [] */0]; - Bs_internalAVLset.iter0(xs.data, (function (x) { + Bs_SortedSetDict.forEach(xs.data, (function (x) { v[0] = /* :: */[ x, v[0] @@ -201,7 +201,7 @@ function testIterToList(xs) { return Bs_List.reverse(v[0]); } -var u0$1 = Bs_Set.ofArray(IntCmp, Array_data_util.randomRange(0, 20)); +var u0$1 = Bs_Set.ofArray(Array_data_util.randomRange(0, 20), IntCmp); var u1$1 = Bs_Set.remove(u0$1, 17); @@ -213,7 +213,7 @@ b("File \"bs_poly_set_test.ml\", line 93, characters 4-11", Bs_List.every2(testI return +(x === y); }))); -b("File \"bs_poly_set_test.ml\", line 94, characters 4-11", Bs_List.every2(testIterToList(u0$1), Bs_internalAVLset.toList0(u0$1.data), (function (x, y) { +b("File \"bs_poly_set_test.ml\", line 94, characters 4-11", Bs_List.every2(testIterToList(u0$1), Bs_SortedSetDict.toList(u0$1.data), (function (x, y) { return +(x === y); }))); @@ -221,31 +221,31 @@ function f(x) { return +(x === 17); } -b("File \"bs_poly_set_test.ml\", line 95, characters 4-11", Bs_internalAVLset.some0(u0$1.data, f)); +b("File \"bs_poly_set_test.ml\", line 95, characters 4-11", Bs_SortedSetDict.some(u0$1.data, f)); function f$1(x) { return +(x === 17); } -b("File \"bs_poly_set_test.ml\", line 96, characters 4-11", 1 - Bs_internalAVLset.some0(u1$1.data, f$1)); +b("File \"bs_poly_set_test.ml\", line 96, characters 4-11", 1 - Bs_SortedSetDict.some(u1$1.data, f$1)); function f$2(x) { return +(x < 24); } -b("File \"bs_poly_set_test.ml\", line 97, characters 4-11", Bs_internalAVLset.every0(u0$1.data, f$2)); +b("File \"bs_poly_set_test.ml\", line 97, characters 4-11", Bs_SortedSetDict.every(u0$1.data, f$2)); function f$3(x) { return +(x < 24); } -b("File \"bs_poly_set_test.ml\", line 98, characters 4-11", 1 - Bs_internalAVLset.every0(u2$1.data, f$3)); +b("File \"bs_poly_set_test.ml\", line 98, characters 4-11", 1 - Bs_SortedSetDict.every(u2$1.data, f$3)); b("File \"bs_poly_set_test.ml\", line 99, characters 4-11", +(Bs_Set.cmp(u1$1, u0$1) < 0)); b("File \"bs_poly_set_test.ml\", line 100, characters 4-11", +(Bs_Set.cmp(u0$1, u1$1) > 0)); -var a0 = Bs_Set.ofArray(IntCmp, Array_data_util.randomRange(0, 1000)); +var a0 = Bs_Set.ofArray(Array_data_util.randomRange(0, 1000), IntCmp); var a1 = Bs_Set.keepBy(a0, (function (x) { return +(x % 2 === 0); @@ -281,9 +281,9 @@ t("File \"bs_poly_set_test.ml\", line 115, characters 4-11", (function () { return /* () */0; })); -eq("File \"bs_poly_set_test.ml\", line 116, characters 5-12", Bs_internalAVLset.length0(a0.data), 1001); +eq("File \"bs_poly_set_test.ml\", line 116, characters 5-12", Bs_SortedSetDict.size(a0.data), 1001); -b("File \"bs_poly_set_test.ml\", line 117, characters 4-11", 1 - Bs_internalAVLset.isEmpty0(a0.data)); +b("File \"bs_poly_set_test.ml\", line 117, characters 4-11", 1 - Bs_SortedSetDict.isEmpty(a0.data)); var match$1 = Bs_Set.split(a0, 200); @@ -291,11 +291,11 @@ var match$2 = match$1[0]; b("File \"bs_poly_set_test.ml\", line 119, characters 4-11", match$1[1]); -eq("File \"bs_poly_set_test.ml\", line 120, characters 5-12", Bs_internalAVLset.toArray0(match$2[0].data), Bs_Array.makeBy(200, (function (i) { +eq("File \"bs_poly_set_test.ml\", line 120, characters 5-12", Bs_SortedSetDict.toArray(match$2[0].data), Bs_Array.makeBy(200, (function (i) { return i; }))); -eq("File \"bs_poly_set_test.ml\", line 121, characters 5-12", Bs_internalAVLset.toList0(match$2[1].data), Bs_List.makeBy(800, (function (i) { +eq("File \"bs_poly_set_test.ml\", line 121, characters 5-12", Bs_SortedSetDict.toList(match$2[1].data), Bs_List.makeBy(800, (function (i) { return i + 201 | 0; }))); @@ -311,17 +311,17 @@ var a8 = match$4[0]; b("File \"bs_poly_set_test.ml\", line 124, characters 4-11", 1 - match$3[1]); -eq("File \"bs_poly_set_test.ml\", line 125, characters 5-12", Bs_internalAVLset.toArray0(a8.data), Bs_Array.makeBy(200, (function (i) { +eq("File \"bs_poly_set_test.ml\", line 125, characters 5-12", Bs_SortedSetDict.toArray(a8.data), Bs_Array.makeBy(200, (function (i) { return i; }))); -eq("File \"bs_poly_set_test.ml\", line 126, characters 5-12", Bs_internalAVLset.toList0(a9.data), Bs_List.makeBy(800, (function (i) { +eq("File \"bs_poly_set_test.ml\", line 126, characters 5-12", Bs_SortedSetDict.toList(a9.data), Bs_List.makeBy(800, (function (i) { return i + 201 | 0; }))); -eq("File \"bs_poly_set_test.ml\", line 127, characters 5-12", Bs_internalAVLset.minOpt0(a8.data), /* Some */[0]); +eq("File \"bs_poly_set_test.ml\", line 127, characters 5-12", Bs_SortedSetDict.minimum(a8.data), /* Some */[0]); -eq("File \"bs_poly_set_test.ml\", line 128, characters 5-12", Bs_internalAVLset.minOpt0(a9.data), /* Some */[201]); +eq("File \"bs_poly_set_test.ml\", line 128, characters 5-12", Bs_SortedSetDict.minimum(a9.data), /* Some */[201]); b("File \"bs_poly_set_test.ml\", line 129, characters 4-11", Bs_List.every(/* :: */[ a0, @@ -339,16 +339,16 @@ b("File \"bs_poly_set_test.ml\", line 129, characters 4-11", Bs_List.every(/* :: ] ] ], (function (x) { - return Bs_internalAVLset.checkInvariantInternal(x.data); + return Bs_SortedSetDict.checkInvariantInternal(x.data); }))); -var a = Bs_Set.ofArray(IntCmp, /* int array */[]); +var a = Bs_Set.ofArray(/* int array */[], IntCmp); var m$4 = Bs_Set.keepBy(a, (function (x) { return +(x % 2 === 0); })); -b("File \"bs_poly_set_test.ml\", line 134, characters 4-11", Bs_internalAVLset.isEmpty0(m$4.data)); +b("File \"bs_poly_set_test.ml\", line 134, characters 4-11", Bs_SortedSetDict.isEmpty(m$4.data)); Mt.from_pair_suites("bs_poly_set_test.ml", suites[0]); diff --git a/jscomp/test/bs_poly_set_test.ml b/jscomp/test/bs_poly_set_test.ml index c9146c3f9fe..2e24e4880a0 100644 --- a/jscomp/test/bs_poly_set_test.ml +++ b/jscomp/test/bs_poly_set_test.ml @@ -11,7 +11,7 @@ module IntCmp = module L = Bs.List let () = - let u0 = N.ofArray (module IntCmp) (I.range 0 30) in + let u0 = N.ofArray ~dict:(module IntCmp) (I.range 0 30) in let u1 = N.remove u0 0 in let u2 = N.remove u1 0 in let u3 = N.remove u2 30 in @@ -53,10 +53,10 @@ let () = b __LOC__ (N.has u15 20000); b __LOC__ (not @@ N.has u15 2000); b __LOC__ (N.isEmpty u16); - let u17 = N.ofArray (module IntCmp) (I.randomRange 0 100) in - let u18 = N.ofArray (module IntCmp) (I.randomRange 59 200) in + let u17 = N.ofArray ~dict:(module IntCmp) (I.randomRange 0 100) in + let u18 = N.ofArray ~dict:(module IntCmp) (I.randomRange 59 200) in let u19 = N.union u17 u18 in - let u20 = N.ofArray (module IntCmp) (I.randomRange 0 200) in + let u20 = N.ofArray ~dict:(module IntCmp) (I.randomRange 0 200) in b __LOC__ (N.eq u19 u20); let u21 = N.intersect u17 u18 in eq __LOC__ (N.toArray u21) (I.range 59 100); @@ -130,7 +130,7 @@ let () = let () = - let a = N.ofArray (module IntCmp) [||] in + let a = N.ofArray ~dict:(module IntCmp) [||] in b __LOC__ (N.isEmpty (N.keepBy a (fun[@bs] x -> x mod 2 = 0))) diff --git a/lib/js/bs.js b/lib/js/bs.js index d97a7156225..549440b4b3b 100644 --- a/lib/js/bs.js +++ b/lib/js/bs.js @@ -33,6 +33,8 @@ var Range = 0; var SortedMapDict = 0; +var SortedSetDict = 0; + var $$Map = 0; var MapM = 0; @@ -69,6 +71,7 @@ exports.SortString = SortString; exports.Stack = Stack; exports.Range = Range; exports.SortedMapDict = SortedMapDict; +exports.SortedSetDict = SortedSetDict; exports.$$Map = $$Map; exports.MapM = MapM; exports.$$Set = $$Set; diff --git a/lib/js/bs_Set.js b/lib/js/bs_Set.js index 741d651d8ab..e2227dc3431 100644 --- a/lib/js/bs_Set.js +++ b/lib/js/bs_Set.js @@ -1,380 +1,99 @@ 'use strict'; -var Bs_internalAVLset = require("./bs_internalAVLset.js"); - -function add0(t, x, cmp) { - if (t !== null) { - var k = t.key; - var c = cmp(x, k); - if (c) { - var l = t.left; - var r = t.right; - if (c < 0) { - var ll = add0(l, x, cmp); - if (ll === l) { - return t; - } else { - return Bs_internalAVLset.bal(ll, k, r); - } - } else { - var rr = add0(r, x, cmp); - if (rr === r) { - return t; - } else { - return Bs_internalAVLset.bal(l, k, rr); - } - } - } else { - return t; - } - } else { - return Bs_internalAVLset.singleton0(x); - } -} - -function remove0(t, x, cmp) { - if (t !== null) { - var l = t.left; - var v = t.key; - var r = t.right; - var c = cmp(x, v); - if (c) { - if (c < 0) { - var ll = remove0(l, x, cmp); - if (ll === l) { - return t; - } else { - return Bs_internalAVLset.bal(ll, v, r); - } - } else { - var rr = remove0(r, x, cmp); - if (rr === r) { - return t; - } else { - return Bs_internalAVLset.bal(l, v, rr); - } - } - } else if (l !== null) { - if (r !== null) { - var v$1 = [r.key]; - var r$1 = Bs_internalAVLset.removeMinAuxWithRef(r, v$1); - return Bs_internalAVLset.bal(l, v$1[0], r$1); - } else { - return l; - } - } else { - return r; - } - } else { - return t; - } -} +var Bs_SortedSetDict = require("./bs_SortedSetDict.js"); -function mergeArray0(h, arr, cmp) { - var len = arr.length; - var v = h; - for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ - var key = arr[i]; - v = add0(v, key, cmp); - } - return v; -} - -function removeArray0(h, arr, cmp) { - var len = arr.length; - var v = h; - for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ - var key = arr[i]; - v = remove0(v, key, cmp); - } - return v; -} - -function splitAuxNoPivot(cmp, n, x) { - var l = n.left; - var v = n.key; - var r = n.right; - var c = cmp(x, v); - if (c) { - if (c < 0) { - if (l !== null) { - var match = splitAuxNoPivot(cmp, l, x); - return /* tuple */[ - match[0], - Bs_internalAVLset.joinShared(match[1], v, r) - ]; - } else { - return /* tuple */[ - null, - n - ]; - } - } else if (r !== null) { - var match$1 = splitAuxNoPivot(cmp, r, x); - return /* tuple */[ - Bs_internalAVLset.joinShared(l, v, match$1[0]), - match$1[1] - ]; - } else { - return /* tuple */[ - n, - null - ]; - } - } else { - return /* tuple */[ - l, - r - ]; - } -} - -function splitAuxPivot(cmp, n, x, pres) { - var l = n.left; - var v = n.key; - var r = n.right; - var c = cmp(x, v); - if (c) { - if (c < 0) { - if (l !== null) { - var match = splitAuxPivot(cmp, l, x, pres); - return /* tuple */[ - match[0], - Bs_internalAVLset.joinShared(match[1], v, r) - ]; - } else { - return /* tuple */[ - null, - n - ]; - } - } else if (r !== null) { - var match$1 = splitAuxPivot(cmp, r, x, pres); - return /* tuple */[ - Bs_internalAVLset.joinShared(l, v, match$1[0]), - match$1[1] - ]; - } else { - return /* tuple */[ - n, - null - ]; - } - } else { - pres[0] = /* true */1; - return /* tuple */[ - l, - r - ]; - } -} - -function split0(t, x, cmp) { - if (t !== null) { - var pres = [/* false */0]; - var v = splitAuxPivot(cmp, t, x, pres); - return /* tuple */[ - v, - pres[0] - ]; - } else { - return /* tuple */[ - /* tuple */[ - null, - null - ], - /* false */0 - ]; - } -} - -function union0(s1, s2, cmp) { - if (s1 !== null) { - if (s2 !== null) { - var h1 = s1.h; - var h2 = s2.h; - if (h1 >= h2) { - if (h2 === 1) { - return add0(s1, s2.key, cmp); - } else { - var l1 = s1.left; - var v1 = s1.key; - var r1 = s1.right; - var match = splitAuxNoPivot(cmp, s2, v1); - return Bs_internalAVLset.joinShared(union0(l1, match[0], cmp), v1, union0(r1, match[1], cmp)); - } - } else if (h1 === 1) { - return add0(s2, s1.key, cmp); - } else { - var l2 = s2.left; - var v2 = s2.key; - var r2 = s2.right; - var match$1 = splitAuxNoPivot(cmp, s1, v2); - return Bs_internalAVLset.joinShared(union0(match$1[0], l2, cmp), v2, union0(match$1[1], r2, cmp)); - } - } else { - return s1; - } - } else { - return s2; - } -} - -function inter0(s1, s2, cmp) { - if (s1 !== null) { - if (s2 !== null) { - var l1 = s1.left; - var v1 = s1.key; - var r1 = s1.right; - var pres = [/* false */0]; - var match = splitAuxPivot(cmp, s2, v1, pres); - var ll = inter0(l1, match[0], cmp); - var rr = inter0(r1, match[1], cmp); - if (pres[0]) { - return Bs_internalAVLset.joinShared(ll, v1, rr); - } else { - return Bs_internalAVLset.concatShared(ll, rr); - } - } else { - return null; - } - } else { - return null; - } -} - -function diff0(s1, s2, cmp) { - if (s1 !== null) { - if (s2 !== null) { - var l1 = s1.left; - var v1 = s1.key; - var r1 = s1.right; - var pres = [/* false */0]; - var match = splitAuxPivot(cmp, s2, v1, pres); - var ll = diff0(l1, match[0], cmp); - var rr = diff0(r1, match[1], cmp); - if (pres[0]) { - return Bs_internalAVLset.concatShared(ll, rr); - } else { - return Bs_internalAVLset.joinShared(ll, v1, rr); - } - } else { - return s1; - } - } else { - return s1; - } -} - -function ofArray(dict, data) { +function ofArray(data, dict) { return { dict: dict, - data: Bs_internalAVLset.ofArray0(data, dict[/* cmp */0]) + data: Bs_SortedSetDict.ofArray(data, dict[/* cmp */0]) }; } function remove(m, e) { - var dict = m.dict; + var M = m.dict; var data = m.data; - var newData = remove0(data, e, dict[/* cmp */0]); + var newData = Bs_SortedSetDict.remove(data, e, M[/* cmp */0]); if (newData === data) { return m; } else { return { - dict: dict, + dict: M, data: newData }; } } function add(m, e) { - var dict = m.dict; + var M = m.dict; var data = m.data; - var newData = add0(data, e, dict[/* cmp */0]); + var newData = Bs_SortedSetDict.add(data, e, M[/* cmp */0]); if (newData === data) { return m; } else { return { - dict: dict, + dict: M, data: newData }; } } function mergeMany(m, e) { - var dict = m.dict; - var data = m.data; - var newData = mergeArray0(data, e, dict[/* cmp */0]); + var M = m.dict; return { - dict: dict, - data: newData + dict: M, + data: Bs_SortedSetDict.mergeMany(m.data, e, M[/* cmp */0]) }; } function removeMany(m, e) { - var dict = m.dict; - var data = m.data; - var newData = removeArray0(data, e, dict[/* cmp */0]); - if (newData === data) { - return m; - } else { - return { - dict: dict, - data: newData - }; - } + var M = m.dict; + return { + dict: M, + data: Bs_SortedSetDict.removeMany(m.data, e, M[/* cmp */0]) + }; } function union(m, n) { - var dict = m.dict; - var mdata = m.data; - var ndata = n.data; + var M = m.dict; return { - dict: dict, - data: union0(mdata, ndata, dict[/* cmp */0]) + dict: M, + data: Bs_SortedSetDict.union(m.data, n.data, M[/* cmp */0]) }; } function intersect(m, n) { - var dict = m.dict; - var mdata = m.data; - var ndata = n.data; + var M = m.dict; return { - dict: dict, - data: inter0(mdata, ndata, dict[/* cmp */0]) + dict: M, + data: Bs_SortedSetDict.intersect(m.data, n.data, M[/* cmp */0]) }; } function diff(m, n) { - var dict = m.dict; - var mdata = m.data; - var ndata = n.data; + var M = m.dict; return { - dict: dict, - data: diff0(mdata, ndata, dict[/* cmp */0]) + dict: M, + data: Bs_SortedSetDict.diff(m.data, n.data, M[/* cmp */0]) }; } function subset(m, n) { - var dict = m.dict; - var mdata = m.data; - var ndata = n.data; - return Bs_internalAVLset.subset0(mdata, ndata, dict[/* cmp */0]); + var M = m.dict; + return Bs_SortedSetDict.subset(m.data, n.data, M[/* cmp */0]); } function split(m, e) { - var dict = m.dict; - var data = m.data; - var match = split0(data, e, dict[/* cmp */0]); + var M = m.dict; + var match = Bs_SortedSetDict.split(m.data, e, M[/* cmp */0]); var match$1 = match[0]; return /* tuple */[ /* tuple */[ { - dict: dict, + dict: M, data: match$1[0] }, { - dict: dict, + dict: M, data: match$1[1] } ], @@ -385,57 +104,50 @@ function split(m, e) { function empty(dict) { return { dict: dict, - data: Bs_internalAVLset.empty0 + data: Bs_SortedSetDict.empty }; } function isEmpty(m) { - return Bs_internalAVLset.isEmpty0(m.data); + return Bs_SortedSetDict.isEmpty(m.data); } function cmp(m, n) { - var dict = m.dict; - var mdata = m.data; - var ndata = n.data; - return Bs_internalAVLset.cmp0(mdata, ndata, dict[/* cmp */0]); + var M = m.dict; + return Bs_SortedSetDict.cmp(m.data, n.data, M[/* cmp */0]); } function eq(m, n) { - var dict = m.dict; - var mdata = m.data; - var ndata = n.data; - return Bs_internalAVLset.eq0(mdata, ndata, dict[/* cmp */0]); + var M = m.dict; + return Bs_SortedSetDict.eq(m.data, n.data, M[/* cmp */0]); } function forEach(m, f) { - return Bs_internalAVLset.iter0(m.data, f); + return Bs_SortedSetDict.forEach(m.data, f); } function reduce(m, acc, f) { - return Bs_internalAVLset.fold0(m.data, acc, f); + return Bs_SortedSetDict.reduce(m.data, acc, f); } function every(m, f) { - return Bs_internalAVLset.every0(m.data, f); + return Bs_SortedSetDict.every(m.data, f); } function some(m, f) { - return Bs_internalAVLset.some0(m.data, f); + return Bs_SortedSetDict.some(m.data, f); } function keepBy(m, f) { - var data = m.data; - var dict = m.dict; return { - dict: dict, - data: Bs_internalAVLset.filterShared0(data, f) + dict: m.dict, + data: Bs_SortedSetDict.keepBy(m.data, f) }; } function partition(m, f) { - var mdata = m.data; + var match = Bs_SortedSetDict.partition(m.data, f); var dict = m.dict; - var match = Bs_internalAVLset.partitionShared0(mdata, f); return /* tuple */[ { dict: dict, @@ -449,61 +161,57 @@ function partition(m, f) { } function size(m) { - return Bs_internalAVLset.length0(m.data); + return Bs_SortedSetDict.size(m.data); } function toList(m) { - return Bs_internalAVLset.toList0(m.data); + return Bs_SortedSetDict.toList(m.data); } function toArray(m) { - return Bs_internalAVLset.toArray0(m.data); + return Bs_SortedSetDict.toArray(m.data); } function minimum(m) { - return Bs_internalAVLset.minOpt0(m.data); + return Bs_SortedSetDict.minimum(m.data); } function minNull(m) { - return Bs_internalAVLset.minNull0(m.data); + return Bs_SortedSetDict.minNull(m.data); } function maximum(m) { - return Bs_internalAVLset.maxOpt0(m.data); + return Bs_SortedSetDict.maximum(m.data); } function maxNull(m) { - return Bs_internalAVLset.maxNull0(m.data); + return Bs_SortedSetDict.maxNull(m.data); } function get(m, e) { - var dict = m.dict; - var data = m.data; - return Bs_internalAVLset.findOpt0(data, e, dict[/* cmp */0]); + var M = m.dict; + return Bs_SortedSetDict.get(m.data, e, M[/* cmp */0]); } function getNull(m, e) { - var dict = m.dict; - var data = m.data; - return Bs_internalAVLset.findNull0(data, e, dict[/* cmp */0]); + var M = m.dict; + return Bs_SortedSetDict.getNull(m.data, e, M[/* cmp */0]); } function getExn(m, e) { - var dict = m.dict; - var data = m.data; - return Bs_internalAVLset.findExn0(data, e, dict[/* cmp */0]); + var M = m.dict; + return Bs_SortedSetDict.getExn(m.data, e, M[/* cmp */0]); } function has(m, e) { - var dict = m.dict; - var data = m.data; - return Bs_internalAVLset.mem0(data, e, dict[/* cmp */0]); + var M = m.dict; + return Bs_SortedSetDict.has(m.data, e, M[/* cmp */0]); } function ofSortedArrayUnsafe(xs, dict) { return { dict: dict, - data: Bs_internalAVLset.ofSortedArrayUnsafe0(xs) + data: Bs_SortedSetDict.ofSortedArrayUnsafe(xs) }; } @@ -523,51 +231,9 @@ function packDictData(prim, prim$1) { } function checkInvariantInternal(d) { - return Bs_internalAVLset.checkInvariantInternal(d.data); + return Bs_SortedSetDict.checkInvariantInternal(d.data); } -var empty0 = Bs_internalAVLset.empty0; - -var ofArray0 = Bs_internalAVLset.ofArray0; - -var isEmpty0 = Bs_internalAVLset.isEmpty0; - -var has0 = Bs_internalAVLset.mem0; - -var subset0 = Bs_internalAVLset.subset0; - -var cmp0 = Bs_internalAVLset.cmp0; - -var eq0 = Bs_internalAVLset.eq0; - -var forEach0 = Bs_internalAVLset.iter0; - -var reduce0 = Bs_internalAVLset.fold0; - -var every0 = Bs_internalAVLset.every0; - -var some0 = Bs_internalAVLset.some0; - -var filter0 = Bs_internalAVLset.filterShared0; - -var partition0 = Bs_internalAVLset.partitionShared0; - -var size0 = Bs_internalAVLset.length0; - -var toList0 = Bs_internalAVLset.toList0; - -var toArray0 = Bs_internalAVLset.toArray0; - -var minimum0 = Bs_internalAVLset.minOpt0; - -var maximum0 = Bs_internalAVLset.maxOpt0; - -var ofSortedArrayUnsafe0 = Bs_internalAVLset.ofSortedArrayUnsafe0; - -var get0 = Bs_internalAVLset.findOpt0; - -var getNull0 = Bs_internalAVLset.findNull0; - exports.empty = empty; exports.ofArray = ofArray; exports.ofSortedArrayUnsafe = ofSortedArrayUnsafe; @@ -604,33 +270,4 @@ exports.checkInvariantInternal = checkInvariantInternal; exports.getData = getData; exports.getDict = getDict; exports.packDictData = packDictData; -exports.empty0 = empty0; -exports.ofArray0 = ofArray0; -exports.isEmpty0 = isEmpty0; -exports.has0 = has0; -exports.add0 = add0; -exports.remove0 = remove0; -exports.mergeArray0 = mergeArray0; -exports.removeArray0 = removeArray0; -exports.union0 = union0; -exports.inter0 = inter0; -exports.diff0 = diff0; -exports.subset0 = subset0; -exports.cmp0 = cmp0; -exports.eq0 = eq0; -exports.forEach0 = forEach0; -exports.reduce0 = reduce0; -exports.every0 = every0; -exports.some0 = some0; -exports.filter0 = filter0; -exports.partition0 = partition0; -exports.size0 = size0; -exports.toList0 = toList0; -exports.toArray0 = toArray0; -exports.minimum0 = minimum0; -exports.maximum0 = maximum0; -exports.split0 = split0; -exports.ofSortedArrayUnsafe0 = ofSortedArrayUnsafe0; -exports.get0 = get0; -exports.getNull0 = getNull0; /* No side effect */ diff --git a/lib/js/bs_SortedSetDict.js b/lib/js/bs_SortedSetDict.js new file mode 100644 index 00000000000..b2d316e3941 --- /dev/null +++ b/lib/js/bs_SortedSetDict.js @@ -0,0 +1,352 @@ +'use strict'; + +var Bs_internalAVLset = require("./bs_internalAVLset.js"); + +function add(t, x, cmp) { + if (t !== null) { + var k = t.key; + var c = cmp(x, k); + if (c) { + var l = t.left; + var r = t.right; + if (c < 0) { + var ll = add(l, x, cmp); + if (ll === l) { + return t; + } else { + return Bs_internalAVLset.bal(ll, k, r); + } + } else { + var rr = add(r, x, cmp); + if (rr === r) { + return t; + } else { + return Bs_internalAVLset.bal(l, k, rr); + } + } + } else { + return t; + } + } else { + return Bs_internalAVLset.singleton0(x); + } +} + +function remove(t, x, cmp) { + if (t !== null) { + var l = t.left; + var v = t.key; + var r = t.right; + var c = cmp(x, v); + if (c) { + if (c < 0) { + var ll = remove(l, x, cmp); + if (ll === l) { + return t; + } else { + return Bs_internalAVLset.bal(ll, v, r); + } + } else { + var rr = remove(r, x, cmp); + if (rr === r) { + return t; + } else { + return Bs_internalAVLset.bal(l, v, rr); + } + } + } else if (l !== null) { + if (r !== null) { + var v$1 = [r.key]; + var r$1 = Bs_internalAVLset.removeMinAuxWithRef(r, v$1); + return Bs_internalAVLset.bal(l, v$1[0], r$1); + } else { + return l; + } + } else { + return r; + } + } else { + return t; + } +} + +function mergeMany(h, arr, cmp) { + var len = arr.length; + var v = h; + for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ + var key = arr[i]; + v = add(v, key, cmp); + } + return v; +} + +function removeMany(h, arr, cmp) { + var len = arr.length; + var v = h; + for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ + var key = arr[i]; + v = remove(v, key, cmp); + } + return v; +} + +function splitAuxNoPivot(cmp, n, x) { + var l = n.left; + var v = n.key; + var r = n.right; + var c = cmp(x, v); + if (c) { + if (c < 0) { + if (l !== null) { + var match = splitAuxNoPivot(cmp, l, x); + return /* tuple */[ + match[0], + Bs_internalAVLset.joinShared(match[1], v, r) + ]; + } else { + return /* tuple */[ + null, + n + ]; + } + } else if (r !== null) { + var match$1 = splitAuxNoPivot(cmp, r, x); + return /* tuple */[ + Bs_internalAVLset.joinShared(l, v, match$1[0]), + match$1[1] + ]; + } else { + return /* tuple */[ + n, + null + ]; + } + } else { + return /* tuple */[ + l, + r + ]; + } +} + +function splitAuxPivot(cmp, n, x, pres) { + var l = n.left; + var v = n.key; + var r = n.right; + var c = cmp(x, v); + if (c) { + if (c < 0) { + if (l !== null) { + var match = splitAuxPivot(cmp, l, x, pres); + return /* tuple */[ + match[0], + Bs_internalAVLset.joinShared(match[1], v, r) + ]; + } else { + return /* tuple */[ + null, + n + ]; + } + } else if (r !== null) { + var match$1 = splitAuxPivot(cmp, r, x, pres); + return /* tuple */[ + Bs_internalAVLset.joinShared(l, v, match$1[0]), + match$1[1] + ]; + } else { + return /* tuple */[ + n, + null + ]; + } + } else { + pres[0] = /* true */1; + return /* tuple */[ + l, + r + ]; + } +} + +function split(t, x, cmp) { + if (t !== null) { + var pres = [/* false */0]; + var v = splitAuxPivot(cmp, t, x, pres); + return /* tuple */[ + v, + pres[0] + ]; + } else { + return /* tuple */[ + /* tuple */[ + null, + null + ], + /* false */0 + ]; + } +} + +function union(s1, s2, cmp) { + if (s1 !== null) { + if (s2 !== null) { + var h1 = s1.h; + var h2 = s2.h; + if (h1 >= h2) { + if (h2 === 1) { + return add(s1, s2.key, cmp); + } else { + var l1 = s1.left; + var v1 = s1.key; + var r1 = s1.right; + var match = splitAuxNoPivot(cmp, s2, v1); + return Bs_internalAVLset.joinShared(union(l1, match[0], cmp), v1, union(r1, match[1], cmp)); + } + } else if (h1 === 1) { + return add(s2, s1.key, cmp); + } else { + var l2 = s2.left; + var v2 = s2.key; + var r2 = s2.right; + var match$1 = splitAuxNoPivot(cmp, s1, v2); + return Bs_internalAVLset.joinShared(union(match$1[0], l2, cmp), v2, union(match$1[1], r2, cmp)); + } + } else { + return s1; + } + } else { + return s2; + } +} + +function intersect(s1, s2, cmp) { + if (s1 !== null) { + if (s2 !== null) { + var l1 = s1.left; + var v1 = s1.key; + var r1 = s1.right; + var pres = [/* false */0]; + var match = splitAuxPivot(cmp, s2, v1, pres); + var ll = intersect(l1, match[0], cmp); + var rr = intersect(r1, match[1], cmp); + if (pres[0]) { + return Bs_internalAVLset.joinShared(ll, v1, rr); + } else { + return Bs_internalAVLset.concatShared(ll, rr); + } + } else { + return null; + } + } else { + return null; + } +} + +function diff(s1, s2, cmp) { + if (s1 !== null) { + if (s2 !== null) { + var l1 = s1.left; + var v1 = s1.key; + var r1 = s1.right; + var pres = [/* false */0]; + var match = splitAuxPivot(cmp, s2, v1, pres); + var ll = diff(l1, match[0], cmp); + var rr = diff(r1, match[1], cmp); + if (pres[0]) { + return Bs_internalAVLset.concatShared(ll, rr); + } else { + return Bs_internalAVLset.joinShared(ll, v1, rr); + } + } else { + return s1; + } + } else { + return s1; + } +} + +var empty = Bs_internalAVLset.empty0; + +var ofArray = Bs_internalAVLset.ofArray0; + +var ofSortedArrayUnsafe = Bs_internalAVLset.ofSortedArrayUnsafe0; + +var isEmpty = Bs_internalAVLset.isEmpty0; + +var has = Bs_internalAVLset.mem0; + +var subset = Bs_internalAVLset.subset0; + +var cmp = Bs_internalAVLset.cmp0; + +var eq = Bs_internalAVLset.eq0; + +var forEach = Bs_internalAVLset.iter0; + +var reduce = Bs_internalAVLset.fold0; + +var every = Bs_internalAVLset.every0; + +var some = Bs_internalAVLset.some0; + +var keepBy = Bs_internalAVLset.filterShared0; + +var partition = Bs_internalAVLset.partitionShared0; + +var size = Bs_internalAVLset.length0; + +var toList = Bs_internalAVLset.toList0; + +var toArray = Bs_internalAVLset.toArray0; + +var minimum = Bs_internalAVLset.minOpt0; + +var minNull = Bs_internalAVLset.minNull0; + +var maximum = Bs_internalAVLset.maxOpt0; + +var maxNull = Bs_internalAVLset.maxNull0; + +var get = Bs_internalAVLset.findOpt0; + +var getNull = Bs_internalAVLset.findNull0; + +var getExn = Bs_internalAVLset.findExn0; + +var checkInvariantInternal = Bs_internalAVLset.checkInvariantInternal; + +exports.empty = empty; +exports.ofArray = ofArray; +exports.ofSortedArrayUnsafe = ofSortedArrayUnsafe; +exports.isEmpty = isEmpty; +exports.has = has; +exports.add = add; +exports.mergeMany = mergeMany; +exports.remove = remove; +exports.removeMany = removeMany; +exports.union = union; +exports.intersect = intersect; +exports.diff = diff; +exports.subset = subset; +exports.cmp = cmp; +exports.eq = eq; +exports.forEach = forEach; +exports.reduce = reduce; +exports.every = every; +exports.some = some; +exports.keepBy = keepBy; +exports.partition = partition; +exports.size = size; +exports.toList = toList; +exports.toArray = toArray; +exports.minimum = minimum; +exports.minNull = minNull; +exports.maximum = maximum; +exports.maxNull = maxNull; +exports.get = get; +exports.getNull = getNull; +exports.getExn = getExn; +exports.split = split; +exports.checkInvariantInternal = checkInvariantInternal; +/* No side effect */ From fd95ab0c50584a63ba52fb099cefba4cb59f5d94 Mon Sep 17 00:00:00 2001 From: Hongbo Zhang Date: Sat, 27 Jan 2018 16:00:01 +0800 Subject: [PATCH 07/17] removeMany does not provide reference guarantee --- jscomp/test/bs_poly_set_test.js | 100 ++++++++++++++++---------------- jscomp/test/bs_poly_set_test.ml | 3 +- 2 files changed, 52 insertions(+), 51 deletions(-) diff --git a/jscomp/test/bs_poly_set_test.js b/jscomp/test/bs_poly_set_test.js index 31edcfa519e..fc3b51f83ca 100644 --- a/jscomp/test/bs_poly_set_test.js +++ b/jscomp/test/bs_poly_set_test.js @@ -103,17 +103,17 @@ eq("File \"bs_poly_set_test.ml\", line 48, characters 5-12", Bs_SortedSetDict.si eq("File \"bs_poly_set_test.ml\", line 49, characters 5-12", Bs_SortedSetDict.size(u12.data), 19000); -b("File \"bs_poly_set_test.ml\", line 50, characters 4-11", +(u12 === u13)); +eq("File \"bs_poly_set_test.ml\", line 51, characters 5-12", Bs_SortedSetDict.size(u13.data), Bs_SortedSetDict.size(u12.data)); -eq("File \"bs_poly_set_test.ml\", line 51, characters 5-12", Bs_SortedSetDict.size(u14.data), 10000); +eq("File \"bs_poly_set_test.ml\", line 52, characters 5-12", Bs_SortedSetDict.size(u14.data), 10000); -eq("File \"bs_poly_set_test.ml\", line 52, characters 5-12", Bs_SortedSetDict.size(u15.data), 1); +eq("File \"bs_poly_set_test.ml\", line 53, characters 5-12", Bs_SortedSetDict.size(u15.data), 1); -b("File \"bs_poly_set_test.ml\", line 53, characters 4-11", Bs_Set.has(u15, 20000)); +b("File \"bs_poly_set_test.ml\", line 54, characters 4-11", Bs_Set.has(u15, 20000)); -b("File \"bs_poly_set_test.ml\", line 54, characters 4-11", 1 - Bs_Set.has(u15, 2000)); +b("File \"bs_poly_set_test.ml\", line 55, characters 4-11", 1 - Bs_Set.has(u15, 2000)); -b("File \"bs_poly_set_test.ml\", line 55, characters 4-11", Bs_SortedSetDict.isEmpty(u16.data)); +b("File \"bs_poly_set_test.ml\", line 56, characters 4-11", Bs_SortedSetDict.isEmpty(u16.data)); var u17 = Bs_Set.ofArray(Array_data_util.randomRange(0, 100), IntCmp); @@ -123,71 +123,71 @@ var u19 = Bs_Set.union(u17, u18); var u20 = Bs_Set.ofArray(Array_data_util.randomRange(0, 200), IntCmp); -b("File \"bs_poly_set_test.ml\", line 60, characters 4-11", Bs_Set.eq(u19, u20)); +b("File \"bs_poly_set_test.ml\", line 61, characters 4-11", Bs_Set.eq(u19, u20)); var u21 = Bs_Set.intersect(u17, u18); -eq("File \"bs_poly_set_test.ml\", line 62, characters 5-12", Bs_SortedSetDict.toArray(u21.data), Array_data_util.range(59, 100)); +eq("File \"bs_poly_set_test.ml\", line 63, characters 5-12", Bs_SortedSetDict.toArray(u21.data), Array_data_util.range(59, 100)); var u22 = Bs_Set.diff(u17, u18); -eq("File \"bs_poly_set_test.ml\", line 64, characters 5-12", Bs_SortedSetDict.toArray(u22.data), Array_data_util.range(0, 58)); +eq("File \"bs_poly_set_test.ml\", line 65, characters 5-12", Bs_SortedSetDict.toArray(u22.data), Array_data_util.range(0, 58)); var u23 = Bs_Set.diff(u18, u17); var u24 = Bs_Set.union(u18, u17); -b("File \"bs_poly_set_test.ml\", line 67, characters 4-11", Bs_Set.eq(u24, u19)); +b("File \"bs_poly_set_test.ml\", line 68, characters 4-11", Bs_Set.eq(u24, u19)); -eq("File \"bs_poly_set_test.ml\", line 68, characters 5-12", Bs_SortedSetDict.toArray(u23.data), Array_data_util.range(101, 200)); +eq("File \"bs_poly_set_test.ml\", line 69, characters 5-12", Bs_SortedSetDict.toArray(u23.data), Array_data_util.range(101, 200)); -b("File \"bs_poly_set_test.ml\", line 69, characters 4-11", Bs_Set.subset(u23, u18)); +b("File \"bs_poly_set_test.ml\", line 70, characters 4-11", Bs_Set.subset(u23, u18)); -b("File \"bs_poly_set_test.ml\", line 70, characters 4-11", 1 - Bs_Set.subset(u18, u23)); +b("File \"bs_poly_set_test.ml\", line 71, characters 4-11", 1 - Bs_Set.subset(u18, u23)); -b("File \"bs_poly_set_test.ml\", line 71, characters 4-11", Bs_Set.subset(u22, u17)); +b("File \"bs_poly_set_test.ml\", line 72, characters 4-11", Bs_Set.subset(u22, u17)); -b("File \"bs_poly_set_test.ml\", line 72, characters 4-11", Bs_Set.subset(u21, u17) && Bs_Set.subset(u21, u18)); +b("File \"bs_poly_set_test.ml\", line 73, characters 4-11", Bs_Set.subset(u21, u17) && Bs_Set.subset(u21, u18)); -b("File \"bs_poly_set_test.ml\", line 73, characters 4-11", +(47 === Bs_Set.getNull(u22, 47))); +b("File \"bs_poly_set_test.ml\", line 74, characters 4-11", +(47 === Bs_Set.getNull(u22, 47))); -b("File \"bs_poly_set_test.ml\", line 74, characters 4-11", Caml_obj.caml_equal(/* Some */[47], Bs_Set.get(u22, 47))); +b("File \"bs_poly_set_test.ml\", line 75, characters 4-11", Caml_obj.caml_equal(/* Some */[47], Bs_Set.get(u22, 47))); -b("File \"bs_poly_set_test.ml\", line 75, characters 4-11", +(Bs_Set.getNull(u22, 59) === null)); +b("File \"bs_poly_set_test.ml\", line 76, characters 4-11", +(Bs_Set.getNull(u22, 59) === null)); -b("File \"bs_poly_set_test.ml\", line 76, characters 4-11", +(/* None */0 === Bs_Set.get(u22, 59))); +b("File \"bs_poly_set_test.ml\", line 77, characters 4-11", +(/* None */0 === Bs_Set.get(u22, 59))); var u25 = Bs_Set.add(u22, 59); -eq("File \"bs_poly_set_test.ml\", line 78, characters 5-12", Bs_SortedSetDict.size(u25.data), 60); +eq("File \"bs_poly_set_test.ml\", line 79, characters 5-12", Bs_SortedSetDict.size(u25.data), 60); var m = { dict: IntCmp, data: Bs_SortedSetDict.empty }; -b("File \"bs_poly_set_test.ml\", line 79, characters 4-11", +(Bs_SortedSetDict.minimum(m.data) === /* None */0)); +b("File \"bs_poly_set_test.ml\", line 80, characters 4-11", +(Bs_SortedSetDict.minimum(m.data) === /* None */0)); var m$1 = { dict: IntCmp, data: Bs_SortedSetDict.empty }; -b("File \"bs_poly_set_test.ml\", line 80, characters 4-11", +(Bs_SortedSetDict.maximum(m$1.data) === /* None */0)); +b("File \"bs_poly_set_test.ml\", line 81, characters 4-11", +(Bs_SortedSetDict.maximum(m$1.data) === /* None */0)); var m$2 = { dict: IntCmp, data: Bs_SortedSetDict.empty }; -b("File \"bs_poly_set_test.ml\", line 81, characters 4-11", Caml_obj.caml_equal(Bs_SortedSetDict.minNull(m$2.data), null)); +b("File \"bs_poly_set_test.ml\", line 82, characters 4-11", Caml_obj.caml_equal(Bs_SortedSetDict.minNull(m$2.data), null)); var m$3 = { dict: IntCmp, data: Bs_SortedSetDict.empty }; -b("File \"bs_poly_set_test.ml\", line 82, characters 4-11", Caml_obj.caml_equal(Bs_SortedSetDict.maxNull(m$3.data), null)); +b("File \"bs_poly_set_test.ml\", line 83, characters 4-11", Caml_obj.caml_equal(Bs_SortedSetDict.maxNull(m$3.data), null)); function testIterToList(xs) { var v = [/* [] */0]; @@ -207,13 +207,13 @@ var u1$1 = Bs_Set.remove(u0$1, 17); var u2$1 = Bs_Set.add(u1$1, 33); -b("File \"bs_poly_set_test.ml\", line 93, characters 4-11", Bs_List.every2(testIterToList(u0$1), Bs_List.makeBy(21, (function (i) { +b("File \"bs_poly_set_test.ml\", line 94, characters 4-11", Bs_List.every2(testIterToList(u0$1), Bs_List.makeBy(21, (function (i) { return i; })), (function (x, y) { return +(x === y); }))); -b("File \"bs_poly_set_test.ml\", line 94, characters 4-11", Bs_List.every2(testIterToList(u0$1), Bs_SortedSetDict.toList(u0$1.data), (function (x, y) { +b("File \"bs_poly_set_test.ml\", line 95, characters 4-11", Bs_List.every2(testIterToList(u0$1), Bs_SortedSetDict.toList(u0$1.data), (function (x, y) { return +(x === y); }))); @@ -221,29 +221,29 @@ function f(x) { return +(x === 17); } -b("File \"bs_poly_set_test.ml\", line 95, characters 4-11", Bs_SortedSetDict.some(u0$1.data, f)); +b("File \"bs_poly_set_test.ml\", line 96, characters 4-11", Bs_SortedSetDict.some(u0$1.data, f)); function f$1(x) { return +(x === 17); } -b("File \"bs_poly_set_test.ml\", line 96, characters 4-11", 1 - Bs_SortedSetDict.some(u1$1.data, f$1)); +b("File \"bs_poly_set_test.ml\", line 97, characters 4-11", 1 - Bs_SortedSetDict.some(u1$1.data, f$1)); function f$2(x) { return +(x < 24); } -b("File \"bs_poly_set_test.ml\", line 97, characters 4-11", Bs_SortedSetDict.every(u0$1.data, f$2)); +b("File \"bs_poly_set_test.ml\", line 98, characters 4-11", Bs_SortedSetDict.every(u0$1.data, f$2)); function f$3(x) { return +(x < 24); } -b("File \"bs_poly_set_test.ml\", line 98, characters 4-11", 1 - Bs_SortedSetDict.every(u2$1.data, f$3)); +b("File \"bs_poly_set_test.ml\", line 99, characters 4-11", 1 - Bs_SortedSetDict.every(u2$1.data, f$3)); -b("File \"bs_poly_set_test.ml\", line 99, characters 4-11", +(Bs_Set.cmp(u1$1, u0$1) < 0)); +b("File \"bs_poly_set_test.ml\", line 100, characters 4-11", +(Bs_Set.cmp(u1$1, u0$1) < 0)); -b("File \"bs_poly_set_test.ml\", line 100, characters 4-11", +(Bs_Set.cmp(u0$1, u1$1) > 0)); +b("File \"bs_poly_set_test.ml\", line 101, characters 4-11", +(Bs_Set.cmp(u0$1, u1$1) > 0)); var a0 = Bs_Set.ofArray(Array_data_util.randomRange(0, 1000), IntCmp); @@ -263,39 +263,39 @@ var a4 = match[1]; var a3 = match[0]; -b("File \"bs_poly_set_test.ml\", line 110, characters 4-11", Bs_Set.eq(a1, a3)); +b("File \"bs_poly_set_test.ml\", line 111, characters 4-11", Bs_Set.eq(a1, a3)); -b("File \"bs_poly_set_test.ml\", line 111, characters 4-11", Bs_Set.eq(a2, a4)); +b("File \"bs_poly_set_test.ml\", line 112, characters 4-11", Bs_Set.eq(a2, a4)); -eq("File \"bs_poly_set_test.ml\", line 112, characters 5-12", Bs_Set.getExn(a0, 3), 3); +eq("File \"bs_poly_set_test.ml\", line 113, characters 5-12", Bs_Set.getExn(a0, 3), 3); -eq("File \"bs_poly_set_test.ml\", line 113, characters 5-12", Bs_Set.getExn(a0, 4), 4); +eq("File \"bs_poly_set_test.ml\", line 114, characters 5-12", Bs_Set.getExn(a0, 4), 4); -t("File \"bs_poly_set_test.ml\", line 114, characters 4-11", (function () { +t("File \"bs_poly_set_test.ml\", line 115, characters 4-11", (function () { Bs_Set.getExn(a0, 1002); return /* () */0; })); -t("File \"bs_poly_set_test.ml\", line 115, characters 4-11", (function () { +t("File \"bs_poly_set_test.ml\", line 116, characters 4-11", (function () { Bs_Set.getExn(a0, -1); return /* () */0; })); -eq("File \"bs_poly_set_test.ml\", line 116, characters 5-12", Bs_SortedSetDict.size(a0.data), 1001); +eq("File \"bs_poly_set_test.ml\", line 117, characters 5-12", Bs_SortedSetDict.size(a0.data), 1001); -b("File \"bs_poly_set_test.ml\", line 117, characters 4-11", 1 - Bs_SortedSetDict.isEmpty(a0.data)); +b("File \"bs_poly_set_test.ml\", line 118, characters 4-11", 1 - Bs_SortedSetDict.isEmpty(a0.data)); var match$1 = Bs_Set.split(a0, 200); var match$2 = match$1[0]; -b("File \"bs_poly_set_test.ml\", line 119, characters 4-11", match$1[1]); +b("File \"bs_poly_set_test.ml\", line 120, characters 4-11", match$1[1]); -eq("File \"bs_poly_set_test.ml\", line 120, characters 5-12", Bs_SortedSetDict.toArray(match$2[0].data), Bs_Array.makeBy(200, (function (i) { +eq("File \"bs_poly_set_test.ml\", line 121, characters 5-12", Bs_SortedSetDict.toArray(match$2[0].data), Bs_Array.makeBy(200, (function (i) { return i; }))); -eq("File \"bs_poly_set_test.ml\", line 121, characters 5-12", Bs_SortedSetDict.toList(match$2[1].data), Bs_List.makeBy(800, (function (i) { +eq("File \"bs_poly_set_test.ml\", line 122, characters 5-12", Bs_SortedSetDict.toList(match$2[1].data), Bs_List.makeBy(800, (function (i) { return i + 201 | 0; }))); @@ -309,21 +309,21 @@ var a9 = match$4[1]; var a8 = match$4[0]; -b("File \"bs_poly_set_test.ml\", line 124, characters 4-11", 1 - match$3[1]); +b("File \"bs_poly_set_test.ml\", line 125, characters 4-11", 1 - match$3[1]); -eq("File \"bs_poly_set_test.ml\", line 125, characters 5-12", Bs_SortedSetDict.toArray(a8.data), Bs_Array.makeBy(200, (function (i) { +eq("File \"bs_poly_set_test.ml\", line 126, characters 5-12", Bs_SortedSetDict.toArray(a8.data), Bs_Array.makeBy(200, (function (i) { return i; }))); -eq("File \"bs_poly_set_test.ml\", line 126, characters 5-12", Bs_SortedSetDict.toList(a9.data), Bs_List.makeBy(800, (function (i) { +eq("File \"bs_poly_set_test.ml\", line 127, characters 5-12", Bs_SortedSetDict.toList(a9.data), Bs_List.makeBy(800, (function (i) { return i + 201 | 0; }))); -eq("File \"bs_poly_set_test.ml\", line 127, characters 5-12", Bs_SortedSetDict.minimum(a8.data), /* Some */[0]); +eq("File \"bs_poly_set_test.ml\", line 128, characters 5-12", Bs_SortedSetDict.minimum(a8.data), /* Some */[0]); -eq("File \"bs_poly_set_test.ml\", line 128, characters 5-12", Bs_SortedSetDict.minimum(a9.data), /* Some */[201]); +eq("File \"bs_poly_set_test.ml\", line 129, characters 5-12", Bs_SortedSetDict.minimum(a9.data), /* Some */[201]); -b("File \"bs_poly_set_test.ml\", line 129, characters 4-11", Bs_List.every(/* :: */[ +b("File \"bs_poly_set_test.ml\", line 130, characters 4-11", Bs_List.every(/* :: */[ a0, /* :: */[ a1, @@ -348,7 +348,7 @@ var m$4 = Bs_Set.keepBy(a, (function (x) { return +(x % 2 === 0); })); -b("File \"bs_poly_set_test.ml\", line 134, characters 4-11", Bs_SortedSetDict.isEmpty(m$4.data)); +b("File \"bs_poly_set_test.ml\", line 135, characters 4-11", Bs_SortedSetDict.isEmpty(m$4.data)); Mt.from_pair_suites("bs_poly_set_test.ml", suites[0]); diff --git a/jscomp/test/bs_poly_set_test.ml b/jscomp/test/bs_poly_set_test.ml index 2e24e4880a0..89f097c8db6 100644 --- a/jscomp/test/bs_poly_set_test.ml +++ b/jscomp/test/bs_poly_set_test.ml @@ -47,7 +47,8 @@ let () = eq __LOC__ (N.size u10) 20001; eq __LOC__ (N.size u11) 19800; eq __LOC__ (N.size u12) 19000; - b __LOC__ (u12 == u13); + (* b __LOC__ (u12 == u13); *) + eq __LOC__ (N.size u13) (N.size u12); eq __LOC__ (N.size u14) 10000; eq __LOC__ (N.size u15) 1 ; b __LOC__ (N.has u15 20000); From c0770de3f800146e01479ae838ffe7e0083253e4 Mon Sep 17 00:00:00 2001 From: Hongbo Zhang Date: Sun, 28 Jan 2018 11:36:51 +0800 Subject: [PATCH 08/17] clean up --- jscomp/others/bs_Array.ml | 4 +- jscomp/others/bs_Array.mli | 4 +- jscomp/others/bs_Cmp.ml | 10 ++-- jscomp/others/bs_Cmp.mli | 25 ++++----- jscomp/others/bs_Hash.ml | 10 ++-- jscomp/others/bs_Hash.mli | 10 ++-- jscomp/others/bs_HashMap.ml | 26 ++++----- jscomp/others/bs_HashMultiMap.ml | 34 ++++++------ jscomp/others/bs_HashSet.ml | 16 +++--- jscomp/others/bs_List.ml | 8 +-- jscomp/others/bs_List.mli | 4 +- jscomp/others/bs_Map.ml | 12 ++--- jscomp/others/bs_Map.mli | 10 ++-- jscomp/others/bs_MapInt.ml | 24 ++++----- jscomp/others/bs_MapInt.mli | 10 ++-- jscomp/others/bs_MapIntM.ml | 27 +++++----- jscomp/others/bs_MapIntM.mli | 10 ++-- jscomp/others/bs_MapM.ml | 30 +++++------ jscomp/others/bs_MapM.mli | 10 ++-- jscomp/others/bs_MapString.ml | 24 ++++----- jscomp/others/bs_MapString.mli | 10 ++-- jscomp/others/bs_MapStringM.ml | 27 +++++----- jscomp/others/bs_MapStringM.mli | 10 ++-- jscomp/others/bs_Set.ml | 8 +-- jscomp/others/bs_Set.mli | 6 +-- jscomp/others/bs_SetInt.ml | 14 ++--- jscomp/others/bs_SetInt.mli | 6 +-- jscomp/others/bs_SetIntM.ml | 30 +++++------ jscomp/others/bs_SetIntM.mli | 6 +-- jscomp/others/bs_SetM.ml | 34 ++++++------ jscomp/others/bs_SetM.mli | 6 +-- jscomp/others/bs_SetString.ml | 14 ++--- jscomp/others/bs_SetString.mli | 6 +-- jscomp/others/bs_SetStringM.ml | 30 +++++------ jscomp/others/bs_SetStringM.mli | 6 +-- jscomp/others/bs_SortedMapDict.ml | 32 +++++------ jscomp/others/bs_SortedMapDict.mli | 13 ++--- jscomp/others/bs_SortedSetDict.ml | 22 ++++---- jscomp/others/bs_SortedSetDict.mli | 8 +-- jscomp/others/bs_Stack.ml | 20 +++---- jscomp/others/bs_Stack.mli | 12 ++--- jscomp/others/bs_internalAVLset.ml | 50 ++++++++--------- jscomp/others/bs_internalAVLset.mli | 14 ++--- jscomp/others/bs_internalAVLtree.ml | 72 ++++++++++++------------- jscomp/others/bs_internalAVLtree.mli | 26 ++++----- jscomp/others/bs_internalMapInt.ml | 24 ++++----- jscomp/others/bs_internalMapString.ml | 24 ++++----- jscomp/others/bs_internalSetInt.ml | 18 +++---- jscomp/others/bs_internalSetString.ml | 18 +++---- jscomp/others/internal_map.cppo.ml | 24 ++++----- jscomp/others/internal_set.cppo.ml | 18 +++---- jscomp/others/map.cppo.ml | 24 ++++----- jscomp/others/map.cppo.mli | 10 ++-- jscomp/others/mapm.cppo.ml | 27 +++++----- jscomp/others/mapm.cppo.mli | 10 ++-- jscomp/others/set.cppo.ml | 14 ++--- jscomp/others/set.cppo.mli | 6 +-- jscomp/others/setm.cppo.ml | 30 +++++------ jscomp/others/setm.cppo.mli | 6 +-- jscomp/runtime/.depend | 2 +- jscomp/runtime/js_undefined.ml | 14 +++-- jscomp/runtime/js_undefined.mli | 7 ++- jscomp/test/bs_map_test.js | 26 ++++----- jscomp/test/bs_map_test.ml | 21 +++----- jscomp/test/bs_mutable_set_test.js | 4 +- jscomp/test/bs_mutable_set_test.ml | 4 +- jscomp/test/bs_poly_map_test.js | 10 ++-- jscomp/test/bs_poly_map_test.ml | 10 ++-- jscomp/test/bs_poly_mutable_set_test.js | 4 +- jscomp/test/bs_poly_mutable_set_test.ml | 4 +- jscomp/test/bs_poly_set_test.js | 12 ++--- jscomp/test/bs_poly_set_test.ml | 12 ++--- jscomp/test/bs_set_int_test.js | 4 +- jscomp/test/bs_set_int_test.ml | 4 +- jscomp/test/bs_stack_test.js | 22 ++++---- jscomp/test/bs_stack_test.ml | 42 +++++++-------- lib/js/bs_Array.js | 8 +-- lib/js/bs_Cmp.js | 6 --- lib/js/bs_List.js | 8 +-- lib/js/bs_Map.js | 30 +++++------ lib/js/bs_MapInt.js | 34 ++++++------ lib/js/bs_MapIntM.js | 44 +++++++-------- lib/js/bs_MapM.js | 44 +++++++-------- lib/js/bs_MapString.js | 34 ++++++------ lib/js/bs_MapStringM.js | 44 +++++++-------- lib/js/bs_Set.js | 18 +++---- lib/js/bs_SetInt.js | 20 +++---- lib/js/bs_SetIntM.js | 26 ++++----- lib/js/bs_SetM.js | 26 ++++----- lib/js/bs_SetString.js | 20 +++---- lib/js/bs_SetStringM.js | 26 ++++----- lib/js/bs_SortedMapDict.js | 34 ++++++------ lib/js/bs_SortedSetDict.js | 20 +++---- lib/js/bs_Stack.js | 28 +++++----- lib/js/bs_internalAVLset.js | 36 ++++++------- lib/js/bs_internalAVLtree.js | 60 ++++++++++----------- lib/js/bs_internalMapInt.js | 20 +++---- lib/js/bs_internalMapString.js | 20 +++---- lib/js/bs_internalSetInt.js | 16 +++--- lib/js/bs_internalSetString.js | 16 +++--- lib/js/caml_io.js | 6 +-- lib/js/js_undefined.js | 14 ++++- 102 files changed, 955 insertions(+), 948 deletions(-) diff --git a/jscomp/others/bs_Array.ml b/jscomp/others/bs_Array.ml index 5fb46261942..43bb5760598 100644 --- a/jscomp/others/bs_Array.ml +++ b/jscomp/others/bs_Array.ml @@ -331,7 +331,7 @@ let every2 a b p = else everyAux2 a b 0 p lena -let equalTo = every2 +let eq = every2 let rec everyCmpAux2 arr1 arr2 i b len = if i = len then 0 @@ -341,7 +341,7 @@ let rec everyCmpAux2 arr1 arr2 i b len = everyCmpAux2 arr1 arr2 (i + 1) b len else c -let compareTo a b p = +let cmp a b p = let lena = length a in let lenb = length b in if lena > lenb then 1 diff --git a/jscomp/others/bs_Array.mli b/jscomp/others/bs_Array.mli index 39fe35e565b..c32c64d941c 100644 --- a/jscomp/others/bs_Array.mli +++ b/jscomp/others/bs_Array.mli @@ -121,7 +121,7 @@ val every: 'a array -> ('a -> bool [@bs]) -> bool (** [every2 a b] return false when [length a <> length b] *) val every2: 'a array -> 'b array -> ('a -> 'b -> bool [@bs]) -> bool -val compareTo: 'a array -> 'a array -> ('a -> 'a -> int [@bs]) -> int -val equalTo: 'a array -> 'a array -> ('a -> 'a -> bool [@bs]) -> bool +val cmp: 'a array -> 'a array -> ('a -> 'a -> int [@bs]) -> int +val eq: 'a array -> 'a array -> ('a -> 'a -> bool [@bs]) -> bool external truncateToLengthUnsafe: 'a array -> int -> unit = "length" [@@bs.set] diff --git a/jscomp/others/bs_Cmp.ml b/jscomp/others/bs_Cmp.ml index 0d210a6332a..4cbafa7d749 100644 --- a/jscomp/others/bs_Cmp.ml +++ b/jscomp/others/bs_Cmp.ml @@ -26,14 +26,14 @@ type 'a compare = ('a -> 'a -> int [@bs]) type ('a,'id) cmp = 'a compare -external getCmp : ('a,'id) cmp -> 'a compare = "%identity" +external getCmpIntenral : ('a,'id) cmp -> 'a compare = "%identity" -module type S = sig +module type T = sig type id type t val cmp : (t,id) cmp end -type ('key, 'id) t = (module S with type t = 'key and type id = 'id) +type ('key, 'id) t = (module T with type t = 'key and type id = 'id) module Make (M : sig type t @@ -47,12 +47,12 @@ end let make (type key) - (cmp : key -> key -> int [@bs]) + ~(cmp : key -> key -> int [@bs]) = let module M = struct type t = key let cmp = cmp end in let module N = Make(M) in - (module N : S with type t = key) + (module N : T with type t = key) diff --git a/jscomp/others/bs_Cmp.mli b/jscomp/others/bs_Cmp.mli index 4988b0dc0a4..b771072f1a6 100644 --- a/jscomp/others/bs_Cmp.mli +++ b/jscomp/others/bs_Cmp.mli @@ -27,24 +27,25 @@ type 'a compare = 'a -> 'a -> int [@bs] type ('a, 'id) cmp (** only used for data structures, not exported for client usage *) -external getCmp : ('a,'id) cmp -> - 'a compare = "%identity" +external getCmpIntenral: ('a,'id) cmp -> 'a compare = "%identity" -module type S = sig +module type T = sig type id type t val cmp : (t,id) cmp end type ('key, 'id) t = - (module S with type t = 'key and type id = 'id) + (module T with type t = 'key and type id = 'id) -module Make ( M : sig - type t - val cmp : t compare - end) : - S with type t = M.t -val make: - ('a -> 'a -> int [@bs]) -> - (module S with type t = 'a) \ No newline at end of file + +val make: cmp:'a compare -> (module T with type t = 'a) +(** [make cmp] create a dictionary to sign the data structure + For example: + {[ + module N = make (fun[@bs] x y -> x - y) + ]} + Such module [N] can be used to initiialize various datastructures, + [N.id] will be the idenetity +*) diff --git a/jscomp/others/bs_Hash.ml b/jscomp/others/bs_Hash.ml index 41325ed17fe..ceddc1cdd32 100644 --- a/jscomp/others/bs_Hash.ml +++ b/jscomp/others/bs_Hash.ml @@ -2,17 +2,17 @@ type ('a,'id) hash = ('a -> int [@bs]) type ('a, 'id) eq = ('a -> 'a -> bool [@bs]) -external getHash : ('a,'id) hash -> ('a -> int [@bs]) = "%identity" -external getEq : ('a, 'id) eq -> ('a -> 'a -> bool [@bs]) = "%identity" +external getHashInternal : ('a,'id) hash -> ('a -> int [@bs]) = "%identity" +external getEqInternal : ('a, 'id) eq -> ('a -> 'a -> bool [@bs]) = "%identity" -module type S = sig +module type T = sig type id type t val hash : (t,id) hash val eq : (t,id) eq end -type ('key, 'id) t = (module S with type t = 'key and type id = 'id) +type ('key, 'id) t = (module T with type t = 'key and type id = 'id) module Make (M : sig type t @@ -37,5 +37,5 @@ let make let eq = eq end in let module N = Make(M) in - (module N : S with type t = key) + (module N : T with type t = key) diff --git a/jscomp/others/bs_Hash.mli b/jscomp/others/bs_Hash.mli index d1fb7ff6297..83e52f4b6d9 100644 --- a/jscomp/others/bs_Hash.mli +++ b/jscomp/others/bs_Hash.mli @@ -2,20 +2,20 @@ type ('a, 'id) hash type ('a, 'id) eq -external getHash : ('a,'id) hash -> ('a -> int [@bs]) = "%identity" -external getEq : ('a, 'id) eq -> ('a -> 'a -> bool [@bs]) = "%identity" +external getHashInternal : ('a,'id) hash -> ('a -> int [@bs]) = "%identity" +external getEqInternal : ('a, 'id) eq -> ('a -> 'a -> bool [@bs]) = "%identity" -module type S = sig +module type T = sig type id type t val hash : (t,id) hash val eq : (t,id) eq end -type ('key, 'id) t = (module S with type t = 'key and type id = 'id) +type ('key, 'id) t = (module T with type t = 'key and type id = 'id) val make: eq:('a -> 'a -> bool [@bs]) -> hash:('a -> int [@bs]) -> - (module S with type t = 'a) + (module T with type t = 'a) diff --git a/jscomp/others/bs_HashMap.ml b/jscomp/others/bs_HashMap.ml index 96c77a61175..88e6539d540 100644 --- a/jscomp/others/bs_HashMap.ml +++ b/jscomp/others/bs_HashMap.ml @@ -29,7 +29,7 @@ let rec copyBucketReHash ~hash ~h_buckets ~ndata_tail h old_bucket = match C.toOpt old_bucket with | None -> () | Some cell -> - let nidx = (Bs_Hash.getHash hash) (N.key cell) [@bs] land (A.length h_buckets - 1) in + let nidx = (Bs_Hash.getHashInternal hash) (N.key cell) [@bs] land (A.length h_buckets - 1) in let v = C.return cell in begin match C.toOpt (A.getUnsafe ndata_tail nidx) with | None -> @@ -60,7 +60,7 @@ let resize ~hash h = end let rec replaceInBucket ~eq key info cell = - if (Bs_Hash.getEq eq) (N.key cell) key [@bs] + if (Bs_Hash.getEqInternal eq) (N.key cell) key [@bs] then begin N.valueSet cell info; @@ -77,7 +77,7 @@ let rec replaceInBucket ~eq key info cell = *) let setDone0 ~hash ~eq h key value = let h_buckets = C.buckets h in - let i = (Bs_Hash.getHash hash) key [@bs] land (Array.length h_buckets - 1) in + let i = (Bs_Hash.getHashInternal hash) key [@bs] land (Array.length h_buckets - 1) in let l = Array.unsafe_get h_buckets i in match C.toOpt l with | None -> @@ -100,7 +100,7 @@ let rec removeInBucket h h_buckets i key prec bucket ~eq = | None -> () | Some cell -> let cell_next = N.next cell in - if (Bs_Hash.getEq eq) (N.key cell) key [@bs] + if (Bs_Hash.getEqInternal eq) (N.key cell) key [@bs] then begin N.nextSet prec cell_next ; @@ -110,12 +110,12 @@ let rec removeInBucket h h_buckets i key prec bucket ~eq = let remove0 ~hash ~eq h key = let h_buckets = C.buckets h in - let i = (Bs_Hash.getHash hash) key [@bs] land (Array.length h_buckets - 1) in + let i = (Bs_Hash.getHashInternal hash) key [@bs] land (Array.length h_buckets - 1) in let bucket = A.getUnsafe h_buckets i in match C.toOpt bucket with | None -> () | Some cell -> - if (Bs_Hash.getEq eq) (N.key cell ) key [@bs] then + if (Bs_Hash.getEqInternal eq) (N.key cell ) key [@bs] then begin A.setUnsafe h_buckets i (N.next cell); C.sizeSet h (C.size h - 1) @@ -129,28 +129,28 @@ let rec findAux ~eq key buckets = | None -> None | Some cell -> - if (Bs_Hash.getEq eq) key (N.key cell) [@bs] then Some (N.value cell) + if (Bs_Hash.getEqInternal eq) key (N.key cell) [@bs] then Some (N.value cell) else findAux ~eq key (N.next cell) let get0 ~hash ~eq h key = let h_buckets = C.buckets h in - let nid = (Bs_Hash.getHash hash) key [@bs] land (Array.length h_buckets - 1) in + let nid = (Bs_Hash.getHashInternal hash) key [@bs] land (Array.length h_buckets - 1) in match C.toOpt @@ A.getUnsafe h_buckets nid with | None -> None | Some cell1 -> - if (Bs_Hash.getEq eq) key (N.key cell1) [@bs] then + if (Bs_Hash.getEqInternal eq) key (N.key cell1) [@bs] then Some (N.value cell1) else match C.toOpt (N.next cell1) with | None -> None | Some cell2 -> - if (Bs_Hash.getEq eq) key + if (Bs_Hash.getEqInternal eq) key (N.key cell2) [@bs] then Some (N.value cell2) else match C.toOpt (N.next cell2) with | None -> None | Some cell3 -> - if (Bs_Hash.getEq eq) key + if (Bs_Hash.getEqInternal eq) key (N.key cell3) [@bs] then Some (N.value cell3) else @@ -158,7 +158,7 @@ let get0 ~hash ~eq h key = let rec memInBucket ~eq key cell = - (Bs_Hash.getEq eq) (N.key cell) key [@bs] || + (Bs_Hash.getEqInternal eq) (N.key cell) key [@bs] || (match C.toOpt (N.next cell) with | None -> false | Some nextCell -> @@ -166,7 +166,7 @@ let rec memInBucket ~eq key cell = let has0 ~hash ~eq h key = let h_buckets = C.buckets h in - let nid = (Bs_Hash.getHash hash) key [@bs] land (Array.length h_buckets - 1) in + let nid = (Bs_Hash.getHashInternal hash) key [@bs] land (Array.length h_buckets - 1) in let bucket = A.getUnsafe h_buckets nid in match C.toOpt bucket with | None -> false diff --git a/jscomp/others/bs_HashMultiMap.ml b/jscomp/others/bs_HashMultiMap.ml index 86ac8454c33..63c97edc07d 100644 --- a/jscomp/others/bs_HashMultiMap.ml +++ b/jscomp/others/bs_HashMultiMap.ml @@ -30,7 +30,7 @@ let rec insert_bucket ~hash ~h_buckets ~ndata_tail h old_bucket = match C.toOpt old_bucket with | None -> () | Some cell -> - let nidx = (Bs_Hash.getHash hash) (N.key cell) [@bs] land (Array.length h_buckets - 1) in + let nidx = (Bs_Hash.getHashInternal hash) (N.key cell) [@bs] land (Array.length h_buckets - 1) in let v = C.return cell in begin match C.toOpt (A.getUnsafe ndata_tail nidx) with | None -> @@ -64,7 +64,7 @@ let resize ~hash h = let add0 ~hash h key value = let h_buckets = C.buckets h in let h_buckets_lenth = Array.length h_buckets in - let i = (Bs_Hash.getHash hash) key [@bs] land (h_buckets_lenth - 1) in + let i = (Bs_Hash.getHashInternal hash) key [@bs] land (h_buckets_lenth - 1) in let bucket = N.bucket ~key ~value ~next:(A.getUnsafe h_buckets i) in A.setUnsafe h_buckets i (C.return bucket); @@ -78,7 +78,7 @@ let rec remove_bucket ~eq h h_buckets i key prec buckets = | None -> () | Some cell -> let cell_next = N.next cell in - if (Bs_Hash.getEq eq) (N.key cell) key [@bs] + if (Bs_Hash.getEqInternal eq) (N.key cell) key [@bs] then begin (match C.toOpt prec with @@ -90,7 +90,7 @@ let rec remove_bucket ~eq h h_buckets i key prec buckets = let remove0 ~hash ~eq h key = let h_buckets = C.buckets h in - let i = (Bs_Hash.getHash hash) key [@bs] land (Array.length h_buckets - 1) in + let i = (Bs_Hash.getHashInternal hash) key [@bs] land (Array.length h_buckets - 1) in remove_bucket ~eq h h_buckets i key C.emptyOpt (A.getUnsafe h_buckets i) let rec removeAllBuckets ~eq h h_buckets i key prec buckets = @@ -98,7 +98,7 @@ let rec removeAllBuckets ~eq h h_buckets i key prec buckets = | None -> () | Some cell -> let cell_next = N.next cell in - if (Bs_Hash.getEq eq) (N.key cell) key [@bs] + if (Bs_Hash.getEqInternal eq) (N.key cell) key [@bs] then begin (match C.toOpt prec with @@ -110,7 +110,7 @@ let rec removeAllBuckets ~eq h h_buckets i key prec buckets = let removeAll0 ~hash ~eq h key = let h_buckets = C.buckets h in - let i = (Bs_Hash.getHash hash) key [@bs] land (Array.length h_buckets - 1) in + let i = (Bs_Hash.getHashInternal hash) key [@bs] land (Array.length h_buckets - 1) in removeAllBuckets ~eq h h_buckets i key C.emptyOpt (A.getUnsafe h_buckets i) @@ -119,28 +119,28 @@ let rec find_rec ~eq key buckets = | None -> None | Some cell -> - if (Bs_Hash.getEq eq) key (N.key cell) [@bs] then Some (N.value cell) + if (Bs_Hash.getEqInternal eq) key (N.key cell) [@bs] then Some (N.value cell) else find_rec ~eq key (N.next cell) let get0 ~hash ~eq h key = let h_buckets = C.buckets h in - let nid = (Bs_Hash.getHash hash) key [@bs] land (Array.length h_buckets - 1) in + let nid = (Bs_Hash.getHashInternal hash) key [@bs] land (Array.length h_buckets - 1) in match C.toOpt @@ A.getUnsafe h_buckets nid with | None -> None | Some cell1 -> - if (Bs_Hash.getEq eq) key (N.key cell1) [@bs] then + if (Bs_Hash.getEqInternal eq) key (N.key cell1) [@bs] then Some (N.value cell1) else match C.toOpt (N.next cell1) with | None -> None | Some cell2 -> - if (Bs_Hash.getEq eq) key + if (Bs_Hash.getEqInternal eq) key (N.key cell2) [@bs] then Some (N.value cell2) else match C.toOpt (N.next cell2) with | None -> None | Some cell3 -> - if (Bs_Hash.getEq eq) key + if (Bs_Hash.getEqInternal eq) key (N.key cell3) [@bs] then Some (N.value cell3) else @@ -153,12 +153,12 @@ let getAll0 ~hash ~eq h key = | None -> [] | Some cell -> - if (Bs_Hash.getEq eq) + if (Bs_Hash.getEqInternal eq) (N.key cell) key [@bs] then (N.value cell) :: find_in_bucket (N.next cell) else find_in_bucket (N.next cell) in let h_buckets = C.buckets h in - let nid = (Bs_Hash.getHash hash) key [@bs] land (Array.length h_buckets - 1) in + let nid = (Bs_Hash.getHashInternal hash) key [@bs] land (Array.length h_buckets - 1) in find_in_bucket (A.getUnsafe h_buckets nid) let rec replace_bucket ~eq key info buckets = @@ -166,7 +166,7 @@ let rec replace_bucket ~eq key info buckets = | None -> true | Some cell -> - if (Bs_Hash.getEq eq) (N.key cell) key [@bs] + if (Bs_Hash.getEqInternal eq) (N.key cell) key [@bs] then begin N.keySet cell key; @@ -178,7 +178,7 @@ let rec replace_bucket ~eq key info buckets = let replace0 ~hash ~eq h key info = let h_buckets = C.buckets h in - let i = (Bs_Hash.getHash hash) key [@bs] land (Array.length h_buckets - 1) in + let i = (Bs_Hash.getHashInternal hash) key [@bs] land (Array.length h_buckets - 1) in let l = Array.unsafe_get h_buckets i in if replace_bucket ~eq key info l then begin A.setUnsafe h_buckets i (C.return @@ -189,7 +189,7 @@ let replace0 ~hash ~eq h key info = end let rec mem_in_bucket ~eq key cell = - (Bs_Hash.getEq eq) + (Bs_Hash.getEqInternal eq) (N.key cell) key [@bs] || (match C.toOpt (N.next cell) with | None -> false @@ -198,7 +198,7 @@ let rec mem_in_bucket ~eq key cell = let has0 ~hash ~eq h key = let h_buckets = C.buckets h in - let nid = (Bs_Hash.getHash hash) key [@bs] land (Array.length h_buckets - 1) in + let nid = (Bs_Hash.getHashInternal hash) key [@bs] land (Array.length h_buckets - 1) in let bucket = (A.getUnsafe h_buckets nid) in match C.toOpt bucket with | None -> false diff --git a/jscomp/others/bs_HashSet.ml b/jscomp/others/bs_HashSet.ml index 1e16b7fd513..c20749a95ad 100644 --- a/jscomp/others/bs_HashSet.ml +++ b/jscomp/others/bs_HashSet.ml @@ -43,7 +43,7 @@ let rec copyBucket ~hash ~h_buckets ~ndata_tail h old_bucket = match C.toOpt old_bucket with | None -> () | Some cell -> - let nidx = (Bs_Hash.getHash hash) (N.key cell) [@bs] land (Array.length h_buckets - 1) in + let nidx = (Bs_Hash.getHashInternal hash) (N.key cell) [@bs] land (Array.length h_buckets - 1) in let v = C.return cell in begin match C.toOpt (A.getUnsafe ndata_tail nidx) with | None -> @@ -77,7 +77,7 @@ let resize ~hash h = let rec removeBucket ~eq h h_buckets i key prec cell = let cell_next = N.next cell in - if (Bs_Hash.getEq eq) (N.key cell) key [@bs] + if (Bs_Hash.getEqInternal eq) (N.key cell) key [@bs] then begin N.nextSet prec cell_next; @@ -92,13 +92,13 @@ let rec removeBucket ~eq h h_buckets i key prec cell = let remove0 ~hash ~eq h key = let h_buckets = C.buckets h in - let i = (Bs_Hash.getHash hash) key [@bs] land (Array.length h_buckets - 1) in + let i = (Bs_Hash.getHashInternal hash) key [@bs] land (Array.length h_buckets - 1) in let l = (A.getUnsafe h_buckets i) in match C.toOpt l with | None -> () | Some cell -> let next_cell = (N.next cell) in - if (Bs_Hash.getEq eq) (N.key cell) key [@bs] then + if (Bs_Hash.getEqInternal eq) (N.key cell) key [@bs] then begin C.sizeSet h (C.size h - 1) ; A.setUnsafe h_buckets i next_cell @@ -113,7 +113,7 @@ let remove0 ~hash ~eq h key = let rec addBucket ~eq h key cell = - if (Bs_Hash.getEq eq) (N.key cell) key [@bs] + if (Bs_Hash.getEqInternal eq) (N.key cell) key [@bs] then N.keySet cell key else @@ -130,7 +130,7 @@ let addDone0 ~eq:(eq:(_,'id) Bs_Hash.eq) = let h_buckets = C.buckets h in - let i = (Bs_Hash.getHash hash) key [@bs] land (Array.length h_buckets - 1) in + let i = (Bs_Hash.getHashInternal hash) key [@bs] land (Array.length h_buckets - 1) in let l = Array.unsafe_get h_buckets i in (match C.toOpt l with | None -> @@ -144,7 +144,7 @@ let addDone0 let add0 h key ~hash ~eq = addDone0 h key ~hash ~eq; h let rec memInBucket ~eq key cell = - (Bs_Hash.getEq eq) + (Bs_Hash.getEqInternal eq) (N.key cell) key [@bs] || (match C.toOpt (N.next cell) with | None -> false @@ -153,7 +153,7 @@ let rec memInBucket ~eq key cell = let has0 h key ~hash ~eq = let h_buckets = C.buckets h in - let nid = (Bs_Hash.getHash hash) key [@bs] land (Array.length h_buckets - 1) in + let nid = (Bs_Hash.getHashInternal hash) key [@bs] land (Array.length h_buckets - 1) in let bucket = (A.getUnsafe h_buckets nid) in match C.toOpt bucket with | None -> false diff --git a/jscomp/others/bs_List.ml b/jscomp/others/bs_List.ml index c966f2e28ff..94d2cee582f 100644 --- a/jscomp/others/bs_List.ml +++ b/jscomp/others/bs_List.ml @@ -513,7 +513,7 @@ let rec every2 l1 l2 p = (_, []) | [],_ -> true | (a1::l1, a2::l2) -> p a1 a2 [@bs] && every2 l1 l2 p -let rec compare l1 l2 p = +let rec cmp l1 l2 p = match (l1, l2) with | [], [] -> 0 | _ , [] -> 1 @@ -521,17 +521,17 @@ let rec compare l1 l2 p = | (a1::l1, a2::l2) -> let c = p a1 a2 [@bs] in if c = 0 then - compare l1 l2 p + cmp l1 l2 p else c -let rec equal l1 l2 p = +let rec eq l1 l2 p = match (l1, l2) with | [], [] -> true | _ , [] | [], _ -> false | (a1::l1, a2::l2) -> if p a1 a2 [@bs] then - equal l1 l2 p + eq l1 l2 p else false let rec some2 l1 l2 p = diff --git a/jscomp/others/bs_List.mli b/jscomp/others/bs_List.mli index f0ab3ea7709..5250a8fb673 100644 --- a/jscomp/others/bs_List.mli +++ b/jscomp/others/bs_List.mli @@ -98,9 +98,9 @@ val some: 'a t -> ('a -> bool [@bs]) -> bool val every2: 'a t -> 'b t -> ('a -> 'b -> bool [@bs]) -> bool -val compare: 'a t -> 'a t -> ('a -> 'a -> int [@bs]) -> int +val cmp: 'a t -> 'a t -> ('a -> 'a -> int [@bs]) -> int -val equal: 'a t -> 'a t -> ('a -> 'a -> bool [@bs]) -> bool +val eq: 'a t -> 'a t -> ('a -> 'a -> bool [@bs]) -> bool val some2: 'a t -> 'b t -> ('a -> 'b -> bool [@bs]) -> bool diff --git a/jscomp/others/bs_Map.ml b/jscomp/others/bs_Map.ml index f33d6d3b1c9..48c485cf523 100644 --- a/jscomp/others/bs_Map.ml +++ b/jscomp/others/bs_Map.ml @@ -108,21 +108,21 @@ let toArray m = N.toArray (data m) let keysToArray m = N.keysToArray (data m) let valuesToArray m = N.valuesToArray (data m) let minKey m = N.minKey (data m) -let minKeyNull m = N.minKeyNull (data m) +let minKeyUndefined m = N.minKeyUndefined (data m) let maxKey m = N.maxKey (data m) -let maxKeyNull m = N.maxKeyNull (data m) +let maxKeyUndefined m = N.maxKeyUndefined (data m) let minimum m = N.minimum (data m) -let minNull m = N.minNull (data m) +let minUndefined m = N.minUndefined (data m) let maximum m = N.maximum (data m) -let maxNull m = N.maxNull (data m) +let maxUndefined m = N.maxUndefined (data m) let get (type k) (type id) (map : (k,_,id) t) x = let module X = (val dict map) in N.get ~cmp:X.cmp (data map) x -let getNull (type k) (type id) (map : (k,_,id) t) x = +let getUndefined (type k) (type id) (map : (k,_,id) t) x = let module X = (val dict map) in - N.getNull ~cmp:X.cmp (data map) x + N.getUndefined ~cmp:X.cmp (data map) x let getWithDefault (type k) (type id) (map : (k,_,id) t) x def = let module X = (val dict map) in diff --git a/jscomp/others/bs_Map.mli b/jscomp/others/bs_Map.mli index b572fecd13d..3c761f2b925 100644 --- a/jscomp/others/bs_Map.mli +++ b/jscomp/others/bs_Map.mli @@ -86,15 +86,15 @@ val ofArray: ('k * 'a) array -> dict:('k,'id) dict -> ('k,'a,'id) t val keysToArray: ('k, 'a, 'id) t -> 'k array val valuesToArray: ('k, 'a, 'id) t -> 'a array val minKey: ('k, _, _) t -> 'k option -val minKeyNull: ('k, _, _) t -> 'k Js.null +val minKeyUndefined: ('k, _, _) t -> 'k Js.undefined val maxKey: ('k, _, _) t -> 'k option -val maxKeyNull: ('k, _, _) t -> 'k Js.null +val maxKeyUndefined: ('k, _, _) t -> 'k Js.undefined val minimum: ('k, 'a, _) t -> ('k * 'a) option -val minNull: ('k, 'a, _) t -> ('k * 'a) Js.null +val minUndefined: ('k, 'a, _) t -> ('k * 'a) Js.undefined val maximum: ('k, 'a, _) t -> ('k * 'a) option -val maxNull:('k, 'a, _) t -> ('k * 'a) Js.null +val maxUndefined:('k, 'a, _) t -> ('k * 'a) Js.undefined val get: ('k, 'a, 'id) t -> 'k -> 'a option -val getNull: ('k, 'a, 'id) t -> 'k -> 'a Js.null +val getUndefined: ('k, 'a, 'id) t -> 'k -> 'a Js.undefined val getWithDefault: ('k, 'a, 'id) t -> 'k -> 'a -> 'a val getExn: ('k, 'a, 'id) t -> 'k -> 'a diff --git a/jscomp/others/bs_MapInt.ml b/jscomp/others/bs_MapInt.ml index 681877d0b13..b4ae043d970 100644 --- a/jscomp/others/bs_MapInt.ml +++ b/jscomp/others/bs_MapInt.ml @@ -13,14 +13,14 @@ let empty = N.empty0 let isEmpty = N.isEmpty0 let singleton = N.singleton0 -let minKey = N.minKeyOpt0 -let minKeyNull = N.minKeyNull0 -let maxKey = N.maxKeyOpt0 -let maxKeyNull = N.maxKeyNull0 -let minimum = N.minKVOpt0 -let minNull = N.minKVNull0 -let maximum = N.maxKVOpt0 -let maxNull = N.maxKVNull0 +let minKey = N.minKey0 +let minKeyUndefined = N.minKeyUndefined0 +let maxKey = N.maxKey0 +let maxKeyUndefined = N.maxKeyUndefined0 +let minimum = N.minimum0 +let minUndefined = N.minUndefined0 +let maximum = N.maximum0 +let maxUndefined = N.maxUndefined0 let forEach = N.iter0 let map = N.map0 let mapWithKey = N.mapi0 @@ -143,10 +143,10 @@ let mergeArray h arr = let has = I.mem let cmp = I.cmp let eq = I.eq -let get = I.findOpt -let getNull = I.findNull -let getWithDefault = I.findWithDefault -let getExn = I.findExn +let get = I.get +let getUndefined = I.getUndefined +let getWithDefault = I.getWithDefault +let getExn = I.getExn let split = I.split let merge = I.merge let ofArray = I.ofArray diff --git a/jscomp/others/bs_MapInt.mli b/jscomp/others/bs_MapInt.mli index 1b1b0145115..5bf52ac70c0 100644 --- a/jscomp/others/bs_MapInt.mli +++ b/jscomp/others/bs_MapInt.mli @@ -43,15 +43,15 @@ val ofArray: (key * 'a) array -> 'a t val keysToArray: 'a t -> key array val valuesToArray: 'a t -> 'a array val minKey: _ t -> key option -val minKeyNull: _ t -> key Js.null +val minKeyUndefined: _ t -> key Js.undefined val maxKey: _ t -> key option -val maxKeyNull: _ t -> key Js.null +val maxKeyUndefined: _ t -> key Js.undefined val minimum: 'a t -> (key * 'a) option -val minNull: 'a t -> (key * 'a) Js.null +val minUndefined: 'a t -> (key * 'a) Js.undefined val maximum: 'a t -> (key * 'a) option -val maxNull: 'a t -> (key * 'a) Js.null +val maxUndefined: 'a t -> (key * 'a) Js.undefined val get: 'a t -> key -> 'a option -val getNull: 'a t -> key -> 'a Js.null +val getUndefined: 'a t -> key -> 'a Js.undefined val getWithDefault: 'a t -> key -> 'a -> 'a val getExn: 'a t -> key -> 'a val checkInvariantInternal: _ t -> bool diff --git a/jscomp/others/bs_MapIntM.ml b/jscomp/others/bs_MapIntM.ml index 686dcaddb31..5b8600540d8 100644 --- a/jscomp/others/bs_MapIntM.ml +++ b/jscomp/others/bs_MapIntM.ml @@ -18,14 +18,14 @@ let empty () = t ~data:N.empty0 let isEmpty m = N.isEmpty0 (data m) let singleton k v = t ~data:(N.singleton0 k v) -let minKeyNull m = N.minKeyNull0 (data m) -let minKey m = N.minKeyOpt0 (data m) -let maxKeyNull m = N.maxKeyNull0 (data m) -let maxKey m = N.maxKeyOpt0 (data m) -let minimum m = N.minKVOpt0 (data m) -let minNull m = N.minKVNull0 (data m) -let maximum m = N.maxKVOpt0 (data m) -let maxNull m = N.maxKVNull0 (data m) +let minKeyUndefined m = N.minKeyUndefined0 (data m) +let minKey m = N.minKey0 (data m) +let maxKeyUndefined m = N.maxKeyUndefined0 (data m) +let maxKey m = N.maxKey0 (data m) +let minimum m = N.minimum0 (data m) +let minUndefined m = N.minUndefined0 (data m) +let maximum m = N.maximum0 (data m) +let maxUndefined m = N.maxUndefined0 (data m) let set (m : _ t) k v = let old_data = data m in @@ -93,7 +93,7 @@ let rec updateDone0 t (x : key) f = | None -> t) | Some nt -> let k = N.key nt in - (* let c = (Bs_Cmp.getCmp cmp) x k [@bs] in *) + (* let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in *) if k = x then begin match f (Some (N.value nt)) [@bs] with | None -> @@ -160,8 +160,7 @@ let cmp d0 d1 = I.cmp (data d0) (data d1) let eq d0 d1 = I.eq (data d0) (data d1) -let get d x = - I.findOpt (data d) x -let getNull d x = I.findNull (data d) x -let getWithDefault d x def = I.findWithDefault (data d) x def -let getExn d x = I.findExn (data d) x +let get d x = I.get (data d) x +let getUndefined d x = I.getUndefined (data d) x +let getWithDefault d x def = I.getWithDefault (data d) x def +let getExn d x = I.getExn (data d) x diff --git a/jscomp/others/bs_MapIntM.mli b/jscomp/others/bs_MapIntM.mli index 5621d7b6230..b8fd0dfefb5 100644 --- a/jscomp/others/bs_MapIntM.mli +++ b/jscomp/others/bs_MapIntM.mli @@ -75,15 +75,15 @@ val ofArray: (key * 'a) array -> 'a t val keysToArray: 'a t -> key array val valuesToArray: 'a t -> 'a array val minKey: _ t -> key option -val minKeyNull: _ t -> key Js.null +val minKeyUndefined: _ t -> key Js.undefined val maxKey: _ t -> key option -val maxKeyNull: _ t -> key Js.null +val maxKeyUndefined: _ t -> key Js.undefined val minimum: 'a t -> (key * 'a) option -val minNull: 'a t -> (key * 'a) Js.null +val minUndefined: 'a t -> (key * 'a) Js.undefined val maximum: 'a t -> (key * 'a) option -val maxNull: 'a t -> (key * 'a) Js.null +val maxUndefined: 'a t -> (key * 'a) Js.undefined val get: 'a t -> key -> 'a option -val getNull: 'a t -> key -> 'a Js.null +val getUndefined: 'a t -> key -> 'a Js.undefined val getWithDefault: 'a t -> key -> 'a -> 'a val getExn: 'a t -> key -> 'a val checkInvariantInternal: _ t -> bool diff --git a/jscomp/others/bs_MapM.ml b/jscomp/others/bs_MapM.ml index 46840ec1c67..88744d14b76 100644 --- a/jscomp/others/bs_MapM.ml +++ b/jscomp/others/bs_MapM.ml @@ -34,7 +34,7 @@ type ('k, 'v, 'id) t = let rec removeMutateAux nt x ~cmp = let k = N.key nt in - let c = (Bs_Cmp.getCmp cmp) x k [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in if c = 0 then let l,r = N.(left nt, right nt) in match N.(toOpt l, toOpt r) with @@ -100,7 +100,7 @@ let rec updateDone0 t x f ~cmp = | None -> t) | Some nt -> let k = N.key nt in - let c = (Bs_Cmp.getCmp cmp) x k [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in if c = 0 then begin match f (Some (N.value nt)) [@bs] with | None -> @@ -141,14 +141,14 @@ let isEmpty d = let singleton dict x v= B.bag ~data:(N.singleton0 x v) ~dict -let minKey m = N.minKeyOpt0 (B.data m) -let minKeyNull m = N.minKeyNull0 (B.data m) -let maxKey m = N.maxKeyOpt0 (B.data m) -let maxKeyNull m = N.maxKeyNull0 (B.data m) -let minimum m = N.minKVOpt0 (B.data m) -let minNull m = N.minKVNull0 (B.data m) -let maximum m = N.maxKVOpt0 (B.data m) -let maxNull m = N.maxKVNull0 (B.data m) +let minKey m = N.minKey0 (B.data m) +let minKeyUndefined m = N.minKeyUndefined0 (B.data m) +let maxKey m = N.maxKey0 (B.data m) +let maxKeyUndefined m = N.maxKeyUndefined0 (B.data m) +let minimum m = N.minimum0 (B.data m) +let minUndefined m = N.minUndefined0 (B.data m) +let maximum m = N.maximum0 (B.data m) +let maxUndefined m = N.maxUndefined0 (B.data m) let forEach d f = N.iter0 (B.data d) f @@ -189,19 +189,19 @@ let mapWithKey map f = let get (type k) (type id) (map : (k,_,id) t) x = let dict,map = B.(dict map, data map) in let module X = (val dict) in - N.findOpt0 ~cmp:X.cmp map x -let getNull (type k) (type id) (map : (k,_,id) t) x = + N.get0 ~cmp:X.cmp map x +let getUndefined (type k) (type id) (map : (k,_,id) t) x = let dict,map = B.(dict map, data map) in let module X = (val dict) in - N.findNull0 ~cmp:X.cmp map x + N.getUndefined0 ~cmp:X.cmp map x let getWithDefault (type k) (type id) (map : (k,_,id) t) x def = let dict,map = B.(dict map, data map) in let module X = (val dict) in - N.findWithDefault0 ~cmp:X.cmp map x def + N.getWithDefault0 ~cmp:X.cmp map x def let getExn (type k) (type id) (map : (k,_,id) t) x = let dict,map = B.(dict map, data map) in let module X = (val dict) in - N.findExn0 ~cmp:X.cmp map x + N.getExn0 ~cmp:X.cmp map x let has (type k) (type id) (map : (k,_,id) t) x = let dict,map = B.(dict map, data map) in let module X = (val dict) in diff --git a/jscomp/others/bs_MapM.mli b/jscomp/others/bs_MapM.mli index 5cae2bceba0..dbacee0a587 100644 --- a/jscomp/others/bs_MapM.mli +++ b/jscomp/others/bs_MapM.mli @@ -74,15 +74,15 @@ val ofArray: ('k * 'a) array -> dict:('k,'id) Bs_Cmp.t -> ('k,'a,'id) t val keysToArray: ('k, _, _) t -> 'k array val valuesToArray: (_, 'a, _) t -> 'a array val minKey: ('k, _, _) t -> 'k option -val minKeyNull: ('k, _, _) t -> 'k Js.null +val minKeyUndefined: ('k, _, _) t -> 'k Js.undefined val maxKey: ('k, _, _) t -> 'k option -val maxKeyNull: ('k, _, _) t -> 'k Js.null +val maxKeyUndefined: ('k, _, _) t -> 'k Js.undefined val minimum: ('k, 'a, _) t -> ('k * 'a) option -val minNull: ('k, 'a, _) t -> ('k * 'a) Js.null +val minUndefined: ('k, 'a, _) t -> ('k * 'a) Js.undefined val maximum: ('k, 'a, _) t -> ('k * 'a) option -val maxNull:('k, 'a, _) t -> ('k * 'a) Js.null +val maxUndefined:('k, 'a, _) t -> ('k * 'a) Js.undefined val get: ('k, 'a, 'id) t -> 'k -> 'a option -val getNull: ('k, 'a, 'id) t -> 'k -> 'a Js.null +val getUndefined: ('k, 'a, 'id) t -> 'k -> 'a Js.undefined val getWithDefault: ('k, 'a, 'id) t -> 'k -> 'a -> 'a val getExn: ('k, 'a, 'id) t -> 'k -> 'a diff --git a/jscomp/others/bs_MapString.ml b/jscomp/others/bs_MapString.ml index e468d703c1d..ad6fea28f38 100644 --- a/jscomp/others/bs_MapString.ml +++ b/jscomp/others/bs_MapString.ml @@ -13,14 +13,14 @@ let empty = N.empty0 let isEmpty = N.isEmpty0 let singleton = N.singleton0 -let minKey = N.minKeyOpt0 -let minKeyNull = N.minKeyNull0 -let maxKey = N.maxKeyOpt0 -let maxKeyNull = N.maxKeyNull0 -let minimum = N.minKVOpt0 -let minNull = N.minKVNull0 -let maximum = N.maxKVOpt0 -let maxNull = N.maxKVNull0 +let minKey = N.minKey0 +let minKeyUndefined = N.minKeyUndefined0 +let maxKey = N.maxKey0 +let maxKeyUndefined = N.maxKeyUndefined0 +let minimum = N.minimum0 +let minUndefined = N.minUndefined0 +let maximum = N.maximum0 +let maxUndefined = N.maxUndefined0 let forEach = N.iter0 let map = N.map0 let mapWithKey = N.mapi0 @@ -143,10 +143,10 @@ let mergeArray h arr = let has = I.mem let cmp = I.cmp let eq = I.eq -let get = I.findOpt -let getNull = I.findNull -let getWithDefault = I.findWithDefault -let getExn = I.findExn +let get = I.get +let getUndefined = I.getUndefined +let getWithDefault = I.getWithDefault +let getExn = I.getExn let split = I.split let merge = I.merge let ofArray = I.ofArray diff --git a/jscomp/others/bs_MapString.mli b/jscomp/others/bs_MapString.mli index 76b0c4b80f5..ea689044e71 100644 --- a/jscomp/others/bs_MapString.mli +++ b/jscomp/others/bs_MapString.mli @@ -43,15 +43,15 @@ val ofArray: (key * 'a) array -> 'a t val keysToArray: 'a t -> key array val valuesToArray: 'a t -> 'a array val minKey: _ t -> key option -val minKeyNull: _ t -> key Js.null +val minKeyUndefined: _ t -> key Js.undefined val maxKey: _ t -> key option -val maxKeyNull: _ t -> key Js.null +val maxKeyUndefined: _ t -> key Js.undefined val minimum: 'a t -> (key * 'a) option -val minNull: 'a t -> (key * 'a) Js.null +val minUndefined: 'a t -> (key * 'a) Js.undefined val maximum: 'a t -> (key * 'a) option -val maxNull: 'a t -> (key * 'a) Js.null +val maxUndefined: 'a t -> (key * 'a) Js.undefined val get: 'a t -> key -> 'a option -val getNull: 'a t -> key -> 'a Js.null +val getUndefined: 'a t -> key -> 'a Js.undefined val getWithDefault: 'a t -> key -> 'a -> 'a val getExn: 'a t -> key -> 'a val checkInvariantInternal: _ t -> bool diff --git a/jscomp/others/bs_MapStringM.ml b/jscomp/others/bs_MapStringM.ml index 2afde6b329c..fd6d9335ec6 100644 --- a/jscomp/others/bs_MapStringM.ml +++ b/jscomp/others/bs_MapStringM.ml @@ -18,14 +18,14 @@ let empty () = t ~data:N.empty0 let isEmpty m = N.isEmpty0 (data m) let singleton k v = t ~data:(N.singleton0 k v) -let minKeyNull m = N.minKeyNull0 (data m) -let minKey m = N.minKeyOpt0 (data m) -let maxKeyNull m = N.maxKeyNull0 (data m) -let maxKey m = N.maxKeyOpt0 (data m) -let minimum m = N.minKVOpt0 (data m) -let minNull m = N.minKVNull0 (data m) -let maximum m = N.maxKVOpt0 (data m) -let maxNull m = N.maxKVNull0 (data m) +let minKeyUndefined m = N.minKeyUndefined0 (data m) +let minKey m = N.minKey0 (data m) +let maxKeyUndefined m = N.maxKeyUndefined0 (data m) +let maxKey m = N.maxKey0 (data m) +let minimum m = N.minimum0 (data m) +let minUndefined m = N.minUndefined0 (data m) +let maximum m = N.maximum0 (data m) +let maxUndefined m = N.maxUndefined0 (data m) let set (m : _ t) k v = let old_data = data m in @@ -93,7 +93,7 @@ let rec updateDone0 t (x : key) f = | None -> t) | Some nt -> let k = N.key nt in - (* let c = (Bs_Cmp.getCmp cmp) x k [@bs] in *) + (* let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in *) if k = x then begin match f (Some (N.value nt)) [@bs] with | None -> @@ -160,8 +160,7 @@ let cmp d0 d1 = I.cmp (data d0) (data d1) let eq d0 d1 = I.eq (data d0) (data d1) -let get d x = - I.findOpt (data d) x -let getNull d x = I.findNull (data d) x -let getWithDefault d x def = I.findWithDefault (data d) x def -let getExn d x = I.findExn (data d) x +let get d x = I.get (data d) x +let getUndefined d x = I.getUndefined (data d) x +let getWithDefault d x def = I.getWithDefault (data d) x def +let getExn d x = I.getExn (data d) x diff --git a/jscomp/others/bs_MapStringM.mli b/jscomp/others/bs_MapStringM.mli index 69371824c1a..61e1cdf9caa 100644 --- a/jscomp/others/bs_MapStringM.mli +++ b/jscomp/others/bs_MapStringM.mli @@ -75,15 +75,15 @@ val ofArray: (key * 'a) array -> 'a t val keysToArray: 'a t -> key array val valuesToArray: 'a t -> 'a array val minKey: _ t -> key option -val minKeyNull: _ t -> key Js.null +val minKeyUndefined: _ t -> key Js.undefined val maxKey: _ t -> key option -val maxKeyNull: _ t -> key Js.null +val maxKeyUndefined: _ t -> key Js.undefined val minimum: 'a t -> (key * 'a) option -val minNull: 'a t -> (key * 'a) Js.null +val minUndefined: 'a t -> (key * 'a) Js.undefined val maximum: 'a t -> (key * 'a) option -val maxNull: 'a t -> (key * 'a) Js.null +val maxUndefined: 'a t -> (key * 'a) Js.undefined val get: 'a t -> key -> 'a option -val getNull: 'a t -> key -> 'a Js.null +val getUndefined: 'a t -> key -> 'a Js.undefined val getWithDefault: 'a t -> key -> 'a -> 'a val getExn: 'a t -> key -> 'a val checkInvariantInternal: _ t -> bool diff --git a/jscomp/others/bs_Set.ml b/jscomp/others/bs_Set.ml index 665a3f91299..6709e1c4794 100644 --- a/jscomp/others/bs_Set.ml +++ b/jscomp/others/bs_Set.ml @@ -117,18 +117,18 @@ let toList m = N.toList (data m) let toArray m = N.toArray (data m) let minimum m = N.minimum (data m) -let minNull m = N.minNull (data m) +let minUndefined m = N.minUndefined (data m) let maximum m = N.maximum (data m) -let maxNull m = N.maxNull (data m) +let maxUndefined m = N.maxUndefined (data m) let get (type elt) (type id) (m : (elt,id) t) e = let module M = (val dict m) in N.get ~cmp:M.cmp (data m) e -let getNull (type elt) (type id) (m : (elt,id) t) e = +let getUndefined (type elt) (type id) (m : (elt,id) t) e = let module M = (val dict m) in - N.getNull ~cmp:M.cmp (data m) e + N.getUndefined ~cmp:M.cmp (data m) e let getExn (type elt) (type id) (m : (elt,id) t) e = let module M = (val dict m) in diff --git a/jscomp/others/bs_Set.mli b/jscomp/others/bs_Set.mli index e2bec85e0a3..e336f387ae8 100644 --- a/jscomp/others/bs_Set.mli +++ b/jscomp/others/bs_Set.mli @@ -88,14 +88,14 @@ val toList: ('elt, 'id) t -> 'elt list val toArray: ('elt, 'id) t -> 'elt array val minimum: ('elt, 'id) t -> 'elt option -val minNull: ('elt, 'id) t -> 'elt Js.null +val minUndefined: ('elt, 'id) t -> 'elt Js.undefined val maximum: ('elt, 'id) t -> 'elt option -val maxNull: ('elt, 'id) t -> 'elt Js.null +val maxUndefined: ('elt, 'id) t -> 'elt Js.undefined val get: ('elt, 'id) t -> 'elt -> 'elt option -val getNull: ('elt, 'id) t -> 'elt -> 'elt Js.null +val getUndefined: ('elt, 'id) t -> 'elt -> 'elt Js.undefined val getExn: ('elt, 'id) t -> 'elt -> 'elt val split: ('elt, 'id) t -> 'elt -> (('elt, 'id) t * ('elt, 'id) t) * bool diff --git a/jscomp/others/bs_SetInt.ml b/jscomp/others/bs_SetInt.ml index 89c07c1900f..f09086cb9a2 100644 --- a/jscomp/others/bs_SetInt.ml +++ b/jscomp/others/bs_SetInt.ml @@ -11,10 +11,10 @@ type t = I.t let empty = N.empty0 let isEmpty = N.isEmpty0 let singleton = N.singleton0 -let minimum = N.minOpt0 -let minNull = N.minNull0 -let maximum = N.maxOpt0 -let maxNull = N.maxNull0 +let minimum = N.minimum0 +let minUndefined = N.minUndefined0 +let maximum = N.maximum0 +let maxUndefined = N.maxUndefined0 let forEach = N.iter0 let reduce = N.fold0 let every = N.every0 @@ -88,9 +88,9 @@ let removeMany h arr = let ofArray = I.ofArray let cmp = I.cmp let eq = I.eq -let get = I.findOpt -let getNull = I.findNull -let getExn = I.findExn +let get = I.get +let getUndefined = I.getUndefined +let getExn = I.getExn let subset = I.subset let has = I.mem diff --git a/jscomp/others/bs_SetInt.mli b/jscomp/others/bs_SetInt.mli index 76aad5a2f00..02a302c114d 100644 --- a/jscomp/others/bs_SetInt.mli +++ b/jscomp/others/bs_SetInt.mli @@ -94,14 +94,14 @@ val toArray: t -> elt array val minimum: t -> elt option -val minNull: t -> elt Js.null +val minUndefined: t -> elt Js.undefined val maximum: t -> elt option -val maxNull: t -> elt Js.null +val maxUndefined: t -> elt Js.undefined val get: t -> elt -> elt option -val getNull: t -> elt -> elt Js.null +val getUndefined: t -> elt -> elt Js.undefined val getExn: t -> elt -> elt val split: t -> elt -> (t * t) * bool (** [split x s] returns a triple [(l, present, r)], where diff --git a/jscomp/others/bs_SetIntM.ml b/jscomp/others/bs_SetIntM.ml index 2dfd4bc7a8a..ab38f8ed902 100644 --- a/jscomp/others/bs_SetIntM.ml +++ b/jscomp/others/bs_SetIntM.ml @@ -64,16 +64,16 @@ let singleton x = t ~data:(N.singleton0 x) let minimum d = - N.minOpt0 (data d) + N.minimum0 (data d) -let minNull d = - N.minNull0 (data d) +let minUndefined d = + N.minUndefined0 (data d) let maximum d = - N.maxOpt0 (data d) + N.maximum0 (data d) -let maxNull d = -N.maxNull0 (data d) +let maxUndefined d = + N.maxUndefined0 (data d) let forEach d f = N.iter0 (data d) f @@ -145,7 +145,7 @@ let removeMany (d : t) xs = let rec removeMutateCheckAux nt (x : elt) removed = let k = N.key nt in - (* let c = (Bs_Cmp.getCmp cmp) x k [@bs] in *) + (* let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in *) if x = k then let () = removed := true in let l,r = N.(left nt, right nt) in @@ -194,7 +194,7 @@ let rec addMutateCheckAux t (x : elt) added = N.singleton0 x | Some nt -> let k = N.key nt in - (* let c = (Bs_Cmp.getCmp cmp) x k [@bs] in *) + (* let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in *) if x = k then t else let l, r = N.(left nt, right nt) in @@ -222,11 +222,11 @@ let cmp d0 d1 = let eq d0 d1 = I.eq (data d0) (data d1) let get d x = - I.findOpt (data d) x -let getNull d x = - I.findNull (data d) x + I.get (data d) x +let getUndefined d x = + I.getUndefined (data d) x let getExn d x = - I.findExn (data d) x + I.getExn (data d) x let split d key = let s = data d in let arr = N.toArray0 s in @@ -261,7 +261,7 @@ let intersect dataa datab = let tmp = A.makeUninitializedUnsafe totalSize in ignore @@ N.fillArray dataa0 0 tmp ; ignore @@ N.fillArray datab0 sizea tmp; - (* let p = Bs_Cmp.getCmp M.cmp in *) + (* let p = Bs_Cmp.getCmpIntenral M.cmp in *) if ((A.getUnsafe tmp (sizea - 1) < A.getUnsafe tmp sizea)) || @@ -286,7 +286,7 @@ let diff dataa datab : t = let tmp = A.makeUninitializedUnsafe totalSize in ignore @@ N.fillArray dataa0 0 tmp ; ignore @@ N.fillArray datab0 sizea tmp; - (* let p = Bs_Cmp.getCmp M.cmp in *) + (* let p = Bs_Cmp.getCmpIntenral M.cmp in *) if ( (A.getUnsafe tmp (sizea - 1)) < (A.getUnsafe tmp sizea)) || @@ -310,7 +310,7 @@ let union (dataa : t) (datab : t) : t = let tmp = A.makeUninitializedUnsafe totalSize in ignore @@ N.fillArray dataa0 0 tmp ; ignore @@ N.fillArray datab0 sizea tmp ; - (* let p = (Bs_Cmp.getCmp M.cmp) in *) + (* let p = (Bs_Cmp.getCmpIntenral M.cmp) in *) if (A.getUnsafe tmp (sizea - 1) < A.getUnsafe tmp sizea) then diff --git a/jscomp/others/bs_SetIntM.mli b/jscomp/others/bs_SetIntM.mli index e9ea8fe74e3..2685b98e105 100644 --- a/jscomp/others/bs_SetIntM.mli +++ b/jscomp/others/bs_SetIntM.mli @@ -84,12 +84,12 @@ val toArray: t -> elt array val minimum: t -> elt option -val minNull: t -> elt Js.null +val minUndefined: t -> elt Js.undefined val maximum: t -> elt option -val maxNull: t -> elt Js.null +val maxUndefined: t -> elt Js.undefined val get: t -> elt -> elt option -val getNull: t -> elt -> elt Js.null +val getUndefined: t -> elt -> elt Js.undefined val getExn: t -> elt -> elt val split: t -> elt -> (t * t) * bool (** diff --git a/jscomp/others/bs_SetM.ml b/jscomp/others/bs_SetM.ml index 8b47c8350d6..02f60162def 100644 --- a/jscomp/others/bs_SetM.ml +++ b/jscomp/others/bs_SetM.ml @@ -36,7 +36,7 @@ type ('elt,'id) t = (('elt,'id) Bs_Cmp.t , ('elt,'id) t0) B.bag let rec removeMutateAux nt x ~cmp = let k = N.key nt in - let c = (Bs_Cmp.getCmp cmp) x k [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in if c = 0 then let l,r = N.(left nt, right nt) in match N.(toOpt l, toOpt r) with @@ -96,7 +96,7 @@ let removeMany (type elt) (type id) (d : (elt,id) t) xs = let rec removeMutateCheckAux nt x removed ~cmp= let k = N.key nt in - let c = (Bs_Cmp.getCmp cmp) x k [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in if c = 0 then let () = removed := true in let l,r = N.(left nt, right nt) in @@ -146,7 +146,7 @@ let rec addMutateCheckAux (t : _ t0) x added ~cmp = N.singleton0 x | Some nt -> let k = N.key nt in - let c = (Bs_Cmp.getCmp cmp) x k [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in if c = 0 then t else let l, r = N.(left nt, right nt) in @@ -172,7 +172,7 @@ let split (type elt) (type id) (d : (elt,id) t) key = let dict, s = B.dict d, B.data d in let module M = (val dict ) in let arr = N.toArray0 s in - let i = S.binarySearchBy arr key (Bs_Cmp.getCmp M.cmp) in + let i = S.binarySearchBy arr key (Bs_Cmp.getCmpIntenral M.cmp) in let len = A.length arr in if i < 0 then let next = - i -1 in @@ -208,13 +208,13 @@ let isEmpty d = let singleton x ~dict = B.bag ~data:(N.singleton0 x) ~dict let minimum d = - N.minOpt0 (B.data d) -let minNull d = - N.minNull0 (B.data d) + N.minimum0 (B.data d) +let minUndefined d = + N.minUndefined0 (B.data d) let maximum d = - N.maxOpt0 (B.data d) -let maxNull d = - N.maxNull0 (B.data d) + N.maximum0 (B.data d) +let maxUndefined d = + N.maxUndefined0 (B.data d) let forEach d f = N.iter0 (B.data d) f let reduce d acc cb = @@ -241,14 +241,14 @@ let eq (type elt) (type id) (d0 : (elt,id) t) d1 = N.eq0 ~cmp:M.cmp (B.data d0) (B.data d1) let get (type elt) (type id) (d : (elt,id) t) x = let module M = (val B.dict d) in - N.findOpt0 ~cmp:M.cmp (B.data d) x -let getNull (type elt) (type id) (d : (elt,id) t) x = + N.get0 ~cmp:M.cmp (B.data d) x +let getUndefined (type elt) (type id) (d : (elt,id) t) x = let module M = (val B.dict d) in - N.findNull0 ~cmp:M.cmp (B.data d) x + N.getUndefined0 ~cmp:M.cmp (B.data d) x let getExn (type elt) (type id) (d : (elt,id) t) x = let dict = B.dict d in let module M = (val dict) in - N.findExn0 ~cmp:M.cmp (B.data d) x + N.getExn0 ~cmp:M.cmp (B.data d) x let has (type elt) (type id) (d : (elt,id) t) x = let dict = B.dict d in let module M = (val dict) in @@ -299,7 +299,7 @@ let intersect (type elt) (type id) (a : (elt,id) t) b : _ t = let tmp = A.makeUninitializedUnsafe totalSize in ignore @@ N.fillArray dataa0 0 tmp ; ignore @@ N.fillArray datab0 sizea tmp; - let p = Bs_Cmp.getCmp M.cmp in + let p = Bs_Cmp.getCmpIntenral M.cmp in if (p (A.getUnsafe tmp (sizea - 1)) (A.getUnsafe tmp sizea) [@bs] < 0) || @@ -327,7 +327,7 @@ let diff (type elt) (type id) (a : (elt,id) t) b : _ t = let tmp = A.makeUninitializedUnsafe totalSize in ignore @@ N.fillArray dataa0 0 tmp ; ignore @@ N.fillArray datab0 sizea tmp; - let p = Bs_Cmp.getCmp M.cmp in + let p = Bs_Cmp.getCmpIntenral M.cmp in if (p (A.getUnsafe tmp (sizea - 1)) (A.getUnsafe tmp sizea) [@bs] < 0) || @@ -354,7 +354,7 @@ let union (type elt) (type id) (a : (elt,id) t) b = let tmp = A.makeUninitializedUnsafe totalSize in ignore @@ N.fillArray dataa0 0 tmp ; ignore @@ N.fillArray datab0 sizea tmp ; - let p = (Bs_Cmp.getCmp M.cmp) in + let p = (Bs_Cmp.getCmpIntenral M.cmp) in if p (A.getUnsafe tmp (sizea - 1)) (A.getUnsafe tmp sizea) [@bs] < 0 then diff --git a/jscomp/others/bs_SetM.mli b/jscomp/others/bs_SetM.mli index 7db76d55eeb..a2b453b6bcc 100644 --- a/jscomp/others/bs_SetM.mli +++ b/jscomp/others/bs_SetM.mli @@ -88,12 +88,12 @@ val toList: ('elt, 'id) t -> 'elt list val toArray: ('elt, 'id) t -> 'elt array val minimum: ('elt, 'id) t -> 'elt option -val minNull: ('elt, 'id) t -> 'elt Js.null +val minUndefined: ('elt, 'id) t -> 'elt Js.undefined val maximum: ('elt, 'id) t -> 'elt option -val maxNull: ('elt, 'id) t -> 'elt Js.null +val maxUndefined: ('elt, 'id) t -> 'elt Js.undefined val get: ('elt, 'id) t -> 'elt -> 'elt option -val getNull: ('elt, 'id) t -> 'elt -> 'elt Js.null +val getUndefined: ('elt, 'id) t -> 'elt -> 'elt Js.undefined val getExn: ('elt, 'id) t -> 'elt -> 'elt diff --git a/jscomp/others/bs_SetString.ml b/jscomp/others/bs_SetString.ml index a9585b66365..4586d0eb515 100644 --- a/jscomp/others/bs_SetString.ml +++ b/jscomp/others/bs_SetString.ml @@ -11,10 +11,10 @@ type t = I.t let empty = N.empty0 let isEmpty = N.isEmpty0 let singleton = N.singleton0 -let minimum = N.minOpt0 -let minNull = N.minNull0 -let maximum = N.maxOpt0 -let maxNull = N.maxNull0 +let minimum = N.minimum0 +let minUndefined = N.minUndefined0 +let maximum = N.maximum0 +let maxUndefined = N.maxUndefined0 let forEach = N.iter0 let reduce = N.fold0 let every = N.every0 @@ -88,9 +88,9 @@ let removeMany h arr = let ofArray = I.ofArray let cmp = I.cmp let eq = I.eq -let get = I.findOpt -let getNull = I.findNull -let getExn = I.findExn +let get = I.get +let getUndefined = I.getUndefined +let getExn = I.getExn let subset = I.subset let has = I.mem diff --git a/jscomp/others/bs_SetString.mli b/jscomp/others/bs_SetString.mli index fd81524ec8f..59c7a475ea8 100644 --- a/jscomp/others/bs_SetString.mli +++ b/jscomp/others/bs_SetString.mli @@ -94,14 +94,14 @@ val toArray: t -> elt array val minimum: t -> elt option -val minNull: t -> elt Js.null +val minUndefined: t -> elt Js.undefined val maximum: t -> elt option -val maxNull: t -> elt Js.null +val maxUndefined: t -> elt Js.undefined val get: t -> elt -> elt option -val getNull: t -> elt -> elt Js.null +val getUndefined: t -> elt -> elt Js.undefined val getExn: t -> elt -> elt val split: t -> elt -> (t * t) * bool (** [split x s] returns a triple [(l, present, r)], where diff --git a/jscomp/others/bs_SetStringM.ml b/jscomp/others/bs_SetStringM.ml index 383f334ae6f..edf5e199a48 100644 --- a/jscomp/others/bs_SetStringM.ml +++ b/jscomp/others/bs_SetStringM.ml @@ -64,16 +64,16 @@ let singleton x = t ~data:(N.singleton0 x) let minimum d = - N.minOpt0 (data d) + N.minimum0 (data d) -let minNull d = - N.minNull0 (data d) +let minUndefined d = + N.minUndefined0 (data d) let maximum d = - N.maxOpt0 (data d) + N.maximum0 (data d) -let maxNull d = -N.maxNull0 (data d) +let maxUndefined d = + N.maxUndefined0 (data d) let forEach d f = N.iter0 (data d) f @@ -145,7 +145,7 @@ let removeMany (d : t) xs = let rec removeMutateCheckAux nt (x : elt) removed = let k = N.key nt in - (* let c = (Bs_Cmp.getCmp cmp) x k [@bs] in *) + (* let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in *) if x = k then let () = removed := true in let l,r = N.(left nt, right nt) in @@ -194,7 +194,7 @@ let rec addMutateCheckAux t (x : elt) added = N.singleton0 x | Some nt -> let k = N.key nt in - (* let c = (Bs_Cmp.getCmp cmp) x k [@bs] in *) + (* let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in *) if x = k then t else let l, r = N.(left nt, right nt) in @@ -222,11 +222,11 @@ let cmp d0 d1 = let eq d0 d1 = I.eq (data d0) (data d1) let get d x = - I.findOpt (data d) x -let getNull d x = - I.findNull (data d) x + I.get (data d) x +let getUndefined d x = + I.getUndefined (data d) x let getExn d x = - I.findExn (data d) x + I.getExn (data d) x let split d key = let s = data d in let arr = N.toArray0 s in @@ -261,7 +261,7 @@ let intersect dataa datab = let tmp = A.makeUninitializedUnsafe totalSize in ignore @@ N.fillArray dataa0 0 tmp ; ignore @@ N.fillArray datab0 sizea tmp; - (* let p = Bs_Cmp.getCmp M.cmp in *) + (* let p = Bs_Cmp.getCmpIntenral M.cmp in *) if ((A.getUnsafe tmp (sizea - 1) < A.getUnsafe tmp sizea)) || @@ -286,7 +286,7 @@ let diff dataa datab : t = let tmp = A.makeUninitializedUnsafe totalSize in ignore @@ N.fillArray dataa0 0 tmp ; ignore @@ N.fillArray datab0 sizea tmp; - (* let p = Bs_Cmp.getCmp M.cmp in *) + (* let p = Bs_Cmp.getCmpIntenral M.cmp in *) if ( (A.getUnsafe tmp (sizea - 1)) < (A.getUnsafe tmp sizea)) || @@ -310,7 +310,7 @@ let union (dataa : t) (datab : t) : t = let tmp = A.makeUninitializedUnsafe totalSize in ignore @@ N.fillArray dataa0 0 tmp ; ignore @@ N.fillArray datab0 sizea tmp ; - (* let p = (Bs_Cmp.getCmp M.cmp) in *) + (* let p = (Bs_Cmp.getCmpIntenral M.cmp) in *) if (A.getUnsafe tmp (sizea - 1) < A.getUnsafe tmp sizea) then diff --git a/jscomp/others/bs_SetStringM.mli b/jscomp/others/bs_SetStringM.mli index 40e343e8aea..502b1e60787 100644 --- a/jscomp/others/bs_SetStringM.mli +++ b/jscomp/others/bs_SetStringM.mli @@ -84,12 +84,12 @@ val toArray: t -> elt array val minimum: t -> elt option -val minNull: t -> elt Js.null +val minUndefined: t -> elt Js.undefined val maximum: t -> elt option -val maxNull: t -> elt Js.null +val maxUndefined: t -> elt Js.undefined val get: t -> elt -> elt option -val getNull: t -> elt -> elt Js.null +val getUndefined: t -> elt -> elt Js.undefined val getExn: t -> elt -> elt val split: t -> elt -> (t * t) * bool (** diff --git a/jscomp/others/bs_SortedMapDict.ml b/jscomp/others/bs_SortedMapDict.ml index 436b6a7d31c..5f8f81aa334 100644 --- a/jscomp/others/bs_SortedMapDict.ml +++ b/jscomp/others/bs_SortedMapDict.ml @@ -45,18 +45,18 @@ let toArray = N.toArray0 let keysToArray = N.keysToArray0 let valuesToArray = N.valuesToArray0 -let minimum = N.minKVOpt0 -let maximum = N.maxKVOpt0 -let minKey = N.minKeyOpt0 -let maxKey = N.maxKeyOpt0 -let minKeyNull = N.minKeyNull0 -let maxKeyNull = N.maxKeyNull0 -let minNull = N.minKVNull0 -let maxNull = N.maxKVNull0 -let get = N.findOpt0 -let getNull = N.findNull0 -let getWithDefault = N.findWithDefault0 -let getExn = N.findExn0 +let minimum = N.minimum0 +let maximum = N.maximum0 +let minKey = N.minKey0 +let maxKey = N.maxKey0 +let minKeyUndefined = N.minKeyUndefined0 +let maxKeyUndefined = N.maxKeyUndefined0 +let minUndefined = N.minUndefined0 +let maxUndefined = N.maxUndefined0 +let get = N.get0 +let getUndefined = N.getUndefined0 +let getWithDefault = N.getWithDefault0 +let getExn = N.getExn0 let mapWithKey = N.mapi0 let map = N.map0 @@ -69,7 +69,7 @@ let rec set (t : _ t) newK newD ~cmp = | None -> N.singleton0 newK newD | Some n -> let k= N.key n in - let c = (Bs_Cmp.getCmp cmp) newK k [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) newK k [@bs] in if c = 0 then N.return (N.updateValue n newD) else @@ -88,7 +88,7 @@ let rec update (t : _ t) newK f ~cmp : _ t = end | Some n -> let k= N.key n in - let c = (Bs_Cmp.getCmp cmp) newK k [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) newK k [@bs] in if c = 0 then match f (Some (N.value n)) [@bs] with | None -> @@ -133,7 +133,7 @@ let rec update (t : _ t) newK f ~cmp : _ t = let rec removeAux0 n x ~cmp = let l,v,r = N.(left n, key n, right n ) in - let c = (Bs_Cmp.getCmp cmp) x v [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in if c = 0 then match N.toOpt l, N.toOpt r with | None, _ -> r @@ -174,7 +174,7 @@ let mergeMany h arr ~cmp = let rec splitAuxPivot n x pres ~cmp = let l,v,d,r = N.(left n , key n, value n, right n) in - let c = (Bs_Cmp.getCmp cmp) x v [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in if c = 0 then begin pres := Some d; (l, r) diff --git a/jscomp/others/bs_SortedMapDict.mli b/jscomp/others/bs_SortedMapDict.mli index 98cafaa88af..70cf5ea45d2 100644 --- a/jscomp/others/bs_SortedMapDict.mli +++ b/jscomp/others/bs_SortedMapDict.mli @@ -81,21 +81,22 @@ val ofArray: val keysToArray: ('k, 'a, 'id) t -> 'k array val valuesToArray: ('k, 'a, 'id) t -> 'a array val minKey: ('k, _, _) t -> 'k option -val minKeyNull: ('k, _, _) t -> 'k Js.null +val minKeyUndefined: ('k, _, _) t -> 'k Js.undefined val maxKey: ('k, _, _) t -> 'k option -val maxKeyNull: ('k, _, _) t -> 'k Js.null +val maxKeyUndefined: ('k, _, _) t -> 'k Js.undefined val minimum: ('k, 'a, _) t -> ('k * 'a) option -val minNull: ('k, 'a, _) t -> ('k * 'a) Js.null +val minUndefined: ('k, 'a, _) t -> ('k * 'a) Js.undefined val maximum: ('k, 'a, _) t -> ('k * 'a) option -val maxNull:('k, 'a, _) t -> ('k * 'a) Js.null +val maxUndefined:('k, 'a, _) t -> ('k * 'a) Js.undefined val get: ('k, 'a, 'id) t -> 'k -> cmp:('k, 'id) cmp -> 'a option -val getNull: +val getUndefined: ('k, 'a, 'id) t -> 'k -> cmp:('k, 'id) cmp -> - 'a Js.null + 'a Js.undefined + val getWithDefault: ('k, 'a, 'id) t -> 'k -> 'a -> cmp:('k, 'id) cmp -> diff --git a/jscomp/others/bs_SortedSetDict.ml b/jscomp/others/bs_SortedSetDict.ml index db1b2a0a52b..8ee285c36fa 100644 --- a/jscomp/others/bs_SortedSetDict.ml +++ b/jscomp/others/bs_SortedSetDict.ml @@ -39,7 +39,7 @@ let rec add (t : _ t) x ~cmp : _ t = | None -> N.singleton0 x | Some nt -> let k = N.key nt in - let c = (Bs_Cmp.getCmp cmp) x k [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in if c = 0 then t else let l,r = N.(left nt, right nt) in @@ -57,7 +57,7 @@ let rec remove (t : _ t) x ~cmp : _ t = None -> t | Some n -> let l,v,r = N.(left n , key n, right n) in - let c = (Bs_Cmp.getCmp cmp) x v [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in if c = 0 then match N.toOpt l, N.toOpt r with | (None, _) -> r @@ -96,7 +96,7 @@ let removeMany h arr ~cmp = let rec splitAuxNoPivot ~cmp (n : _ N.node) x : _ * _ = let l,v,r = N.(left n , key n, right n) in - let c = (Bs_Cmp.getCmp cmp) x v [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in if c = 0 then l,r else if c < 0 then @@ -116,7 +116,7 @@ let rec splitAuxNoPivot ~cmp (n : _ N.node) x : _ * _ = let rec splitAuxPivot ~cmp (n : _ N.node) x pres : _ * _ = let l,v,r = N.(left n , key n, right n) in - let c = (Bs_Cmp.getCmp cmp) x v [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in if c = 0 then begin pres := true; @@ -214,13 +214,13 @@ let some = N.some0 let size = N.length0 let toList = N.toList0 let toArray = N.toArray0 -let minimum = N.minOpt0 -let maximum = N.maxOpt0 -let maxNull = N.maxNull0 -let minNull = N.minNull0 -let get = N.findOpt0 -let getExn = N.findExn0 -let getNull = N.findNull0 +let minimum = N.minimum0 +let maximum = N.maximum0 +let maxUndefined = N.maxUndefined0 +let minUndefined = N.minUndefined0 +let get = N.get0 +let getExn = N.getExn0 +let getUndefined = N.getUndefined0 let ofSortedArrayUnsafe = N.ofSortedArrayUnsafe0 diff --git a/jscomp/others/bs_SortedSetDict.mli b/jscomp/others/bs_SortedSetDict.mli index ca73df12009..c6cc1c56b1a 100644 --- a/jscomp/others/bs_SortedSetDict.mli +++ b/jscomp/others/bs_SortedSetDict.mli @@ -118,18 +118,18 @@ val toList: ('elt, 'id) t -> 'elt list val toArray: ('elt, 'id) t -> 'elt array val minimum: ('elt, 'id) t -> 'elt option -val minNull: ('elt, 'id) t -> 'elt Js.null +val minUndefined: ('elt, 'id) t -> 'elt Js.undefined val maximum: ('elt, 'id) t -> 'elt option -val maxNull: ('elt, 'id) t -> 'elt Js.null +val maxUndefined: ('elt, 'id) t -> 'elt Js.undefined val get: ('elt, 'id) t -> 'elt -> cmp:('elt, 'id) cmp -> 'elt option -val getNull: ('elt, 'id) t -> 'elt -> +val getUndefined: ('elt, 'id) t -> 'elt -> cmp:('elt, 'id) cmp -> - 'elt Js.null + 'elt Js.undefined val getExn: ('elt, 'id) t -> 'elt -> cmp:('elt, 'id) cmp -> 'elt diff --git a/jscomp/others/bs_Stack.ml b/jscomp/others/bs_Stack.ml index e55283dd58f..d1b25d245c2 100644 --- a/jscomp/others/bs_Stack.ml +++ b/jscomp/others/bs_Stack.ml @@ -40,26 +40,26 @@ let copy (s : _ t) : _ t = t ~root:(root s) let push s x = rootSet s (Js.Null.return @@ cell ~head:x ~tail:(root s)) -let topNull (s : 'a t) : 'a Js.null = +let topUndefined (s : 'a t) = match Js.nullToOption (root s) with - | None -> Js.null - | Some x -> Js.Null.return (head x) + | None -> Js.undefined + | Some x -> Js.Undefined.return (head x) -let topOpt s = +let top s = match Js.nullToOption (root s) with | None -> None | Some x -> Some (head x) let isEmpty s = Js.Null.test (root s) -let popNull s = +let popUndefined s = match Js.nullToOption (root s) with - | None -> Js.null + | None -> Js.undefined | Some x -> rootSet s (tail x); - Js.Null.return (head x) + Js.Undefined.return (head x) -let popOpt s = +let pop s = match Js.nullToOption (root s) with | None -> None | Some x -> @@ -73,7 +73,7 @@ let rec lengthAux (x : _ cell) acc = | None -> acc + 1 | Some x -> lengthAux x (acc + 1) -let length s = +let size s = match Js.nullToOption (root s) with | None -> 0 | Some x -> lengthAux x 0 @@ -85,7 +85,7 @@ let rec iterAux (s : _ opt_cell) f = f (head x) [@bs]; iterAux (tail x) f -let iter s f = +let forEach s f = iterAux (root s) f let dynamicPopIter s f = diff --git a/jscomp/others/bs_Stack.mli b/jscomp/others/bs_Stack.mli index 5aa7bfc328b..c569fb361ac 100644 --- a/jscomp/others/bs_Stack.mli +++ b/jscomp/others/bs_Stack.mli @@ -35,19 +35,19 @@ val copy : 'a t -> 'a t val push : 'a t -> 'a -> unit -val popNull : 'a t -> 'a Js.null +val popUndefined : 'a t -> 'a Js.undefined -val popOpt : 'a t -> 'a option +val pop : 'a t -> 'a option -val topNull : 'a t -> 'a Js.null +val topUndefined : 'a t -> 'a Js.undefined -val topOpt : 'a t -> 'a option +val top : 'a t -> 'a option val isEmpty : 'a t -> bool -val length : 'a t -> int +val size : 'a t -> int -val iter : 'a t -> ('a -> unit [@bs]) -> unit +val forEach : 'a t -> ('a -> unit [@bs]) -> unit val dynamicPopIter : 'a t -> ('a -> unit [@bs]) -> unit (** [dynamicPopIter s f ] diff --git a/jscomp/others/bs_internalAVLset.ml b/jscomp/others/bs_internalAVLset.ml index 6a30066d80e..bf7119a2fd4 100644 --- a/jscomp/others/bs_internalAVLset.ml +++ b/jscomp/others/bs_internalAVLset.ml @@ -113,30 +113,30 @@ let rec min0Aux n = | None -> key n | Some n -> min0Aux n -let minOpt0 n = +let minimum0 n = match toOpt n with None -> None | Some n -> Some (min0Aux n) -let minNull0 n = +let minUndefined0 n = match toOpt n with - | None -> Js.null - | Some n -> return (min0Aux n) + | None -> Js.undefined + | Some n -> Js.Undefined.return (min0Aux n) let rec max0Aux n = match toOpt (right n) with | None -> key n | Some n -> max0Aux n -let maxOpt0 n = +let maximum0 n = match toOpt n with | None -> None | Some n -> Some (max0Aux n) -let maxNull0 n = +let maxUndefined0 n = match toOpt n with - | None -> Js.null - | Some n -> return (max0Aux n) + | None -> Js.undefined + | Some n -> Js.Undefined.return (max0Aux n) let rec removeMinAuxWithRef n v = let ln, rn, kn = left n, right n, key n in @@ -459,14 +459,14 @@ let rec mem0 (t: _ t0) x ~cmp = | None -> false | Some n -> let v = key n in - let c = (Bs_Cmp.getCmp cmp) x v [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in c = 0 || mem0 ~cmp (if c < 0 then left n else right n) x let rec compareAux e1 e2 ~cmp = match e1,e2 with | h1::t1, h2::t2 -> - let c = (Bs_Cmp.getCmp cmp) (key h1) (key h2) [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) (key h1) (key h2) [@bs] in if c = 0 then compareAux ~cmp (stackAllLeft (right h1) t1) @@ -492,7 +492,7 @@ let rec subset0 (s1 : _ t0) (s2 : _ t0) ~cmp = | Some t1 , Some t2 -> let l1,v1,r1 = (left t1, key t1, right t1) in let l2,v2,r2 = (left t2, key t2, right t2) in - let c = (Bs_Cmp.getCmp cmp) v1 v2 [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) v1 v2 [@bs] in if c = 0 then subset0 ~cmp l1 l2 && subset0 ~cmp r1 r2 else if c < 0 then @@ -502,33 +502,33 @@ let rec subset0 (s1 : _ t0) (s2 : _ t0) ~cmp = subset0 ~cmp (create empty v1 r1 ) r2 && subset0 ~cmp l1 s2 -let rec findOpt0 (n : _ t0) x ~cmp = +let rec get0 (n : _ t0) x ~cmp = match toOpt n with None -> None | Some t (* Node(l, v, r, _) *) -> let v = key t in - let c = (Bs_Cmp.getCmp cmp) x v [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in if c = 0 then Some v - else findOpt0 ~cmp (if c < 0 then left t else right t) x + else get0 ~cmp (if c < 0 then left t else right t) x -let rec findNull0 (n : _ t0) x ~cmp = +let rec getUndefined0 (n : _ t0) x ~cmp = match toOpt n with - None -> Js.null + None -> Js.Undefined.empty | Some t (* Node(l, v, r, _) *) -> let v = key t in - let c = (Bs_Cmp.getCmp cmp) x v [@bs] in - if c = 0 then return v - else findNull0 ~cmp (if c < 0 then left t else right t) x + let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in + if c = 0 then Js.Undefined.return v + else getUndefined0 ~cmp (if c < 0 then left t else right t) x -let rec findExn0 (n : _ t0) x ~cmp = +let rec getExn0 (n : _ t0) x ~cmp = match toOpt n with - None -> [%assert "findExn0"] + None -> [%assert "getExn0"] | Some t (* Node(l, v, r, _) *) -> let v = key t in - let c = (Bs_Cmp.getCmp cmp) x v [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in if c = 0 then v - else findExn0 ~cmp (if c < 0 then left t else right t) x + else getExn0 ~cmp (if c < 0 then left t else right t) x (******************************************************************) @@ -606,7 +606,7 @@ let rec addMutate ~cmp (t : _ t0) x = | None -> singleton0 x | Some nt -> let k = key nt in - let c = (Bs_Cmp.getCmp cmp) x k [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in if c = 0 then t else let l, r = (left nt, right nt) in @@ -624,7 +624,7 @@ let ofArray0 (xs : _ array) ~cmp = if len = 0 then empty0 else let next = ref (S.strictlySortedLength xs - (fun [@bs] x y -> (Bs_Cmp.getCmp cmp) x y [@bs] < 0)) in + (fun [@bs] x y -> (Bs_Cmp.getCmpIntenral cmp) x y [@bs] < 0)) in let result = ref (if !next >= 0 then ofSortedArrayAux xs 0 !next diff --git a/jscomp/others/bs_internalAVLset.mli b/jscomp/others/bs_internalAVLset.mli index 464e7212208..078ebbd6577 100644 --- a/jscomp/others/bs_internalAVLset.mli +++ b/jscomp/others/bs_internalAVLset.mli @@ -49,10 +49,10 @@ val bal : 'a t0 -> 'a -> 'a t0 -> 'a t0 val singleton0 : 'a -> 'a t0 -val minOpt0 : 'a t0 -> 'a option -val minNull0 : 'a t0 -> 'a Js.null -val maxOpt0 : 'a t0 -> 'a option -val maxNull0 : 'a t0 -> 'a Js.null +val minimum0 : 'a t0 -> 'a option +val minUndefined0 : 'a t0 -> 'a Js.undefined +val maximum0 : 'a t0 -> 'a option +val maxUndefined0 : 'a t0 -> 'a Js.undefined val removeMinAuxWithRef : 'a node -> 'a ref -> 'a t0 (* [removeMinAuxWithRef n cell] return a new node with @@ -91,9 +91,9 @@ val mem0 : 'a t0 -> 'a -> cmp:('a, 'b) Bs_Cmp.cmp -> bool val cmp0 : 'a t0 -> 'a t0 -> cmp:('a, 'b) Bs_Cmp.cmp -> int val eq0 : 'a t0 -> 'a t0 -> cmp:('a, 'b) Bs_Cmp.cmp -> bool val subset0 : 'a t0 -> 'a t0 -> cmp:('a, 'b) Bs_Cmp.cmp -> bool -val findOpt0 : 'a t0 -> 'a -> cmp:('a, 'b) Bs_Cmp.cmp -> 'a option -val findNull0 : 'a t0 -> 'a -> cmp:('a, 'b) Bs_Cmp.cmp -> 'a Js.null -val findExn0 : 'a t0 -> 'a -> cmp:('a, 'b) Bs_Cmp.cmp -> 'a +val get0 : 'a t0 -> 'a -> cmp:('a, 'b) Bs_Cmp.cmp -> 'a option +val getUndefined0 : 'a t0 -> 'a -> cmp:('a, 'b) Bs_Cmp.cmp -> 'a Js.undefined +val getExn0 : 'a t0 -> 'a -> cmp:('a, 'b) Bs_Cmp.cmp -> 'a val ofArray0 : 'a array -> cmp:('a, 'b) Bs_Cmp.cmp -> 'a t0 diff --git a/jscomp/others/bs_internalAVLtree.ml b/jscomp/others/bs_internalAVLtree.ml index 81e5e5e4750..285b6f3a2ad 100644 --- a/jscomp/others/bs_internalAVLtree.ml +++ b/jscomp/others/bs_internalAVLtree.ml @@ -96,60 +96,60 @@ let rec minKey0Aux n = | None -> key n | Some n -> minKey0Aux n -let minKeyOpt0 n = +let minKey0 n = match toOpt n with | None -> None | Some n -> Some (minKey0Aux n) -let minKeyNull0 n = +let minKeyUndefined0 n = match toOpt n with - | None -> Js.null - | Some n -> return (minKey0Aux n) + | None -> Js.undefined + | Some n -> Js.Undefined.return (minKey0Aux n) let rec maxKey0Aux n = match toOpt (right n) with | None -> key n | Some n -> maxKey0Aux n -let maxKeyOpt0 n = +let maxKey0 n = match toOpt n with | None -> None | Some n -> Some (maxKey0Aux n) -let maxKeyNull0 n = +let maxKeyUndefined0 n = match toOpt n with - | None -> Js.null - | Some n -> return (maxKey0Aux n) + | None -> Js.undefined + | Some n -> Js.Undefined.return (maxKey0Aux n) let rec minKV0Aux n = match toOpt (left n) with | None -> key n , value n | Some n -> minKV0Aux n -let minKVOpt0 n = +let minimum0 n = match toOpt n with None -> None | Some n -> Some (minKV0Aux n) -let minKVNull0 n = +let minUndefined0 n = match toOpt n with - | None -> Js.null - | Some n -> return (minKV0Aux n) + | None -> Js.undefined + | Some n -> Js.Undefined.return (minKV0Aux n) let rec maxKV0Aux n = match toOpt (right n) with | None -> key n, value n | Some n -> maxKV0Aux n -let maxKVOpt0 n = +let maximum0 n = match toOpt n with | None -> None | Some n -> Some (maxKV0Aux n) -let maxKVNull0 n = +let maxUndefined0 n = match toOpt n with - | None -> Js.null - | Some n -> return (maxKV0Aux n) + | None -> Js.undefined + | Some n -> Js.Undefined.return (maxKV0Aux n) let rec removeMinAuxWithRef n kr vr = @@ -520,7 +520,7 @@ let ofSortedArrayUnsafe0 arr = let rec compareAux e1 e2 ~kcmp ~vcmp = match e1,e2 with | h1::t1, h2::t2 -> - let c = (Bs_Cmp.getCmp kcmp) (key h1) (key h2) [@bs] in + let c = (Bs_Cmp.getCmpIntenral kcmp) (key h1) (key h2) [@bs] in if c = 0 then let cx = vcmp (value h1) (value h2) [@bs] in if cx = 0 then @@ -534,7 +534,7 @@ let rec compareAux e1 e2 ~kcmp ~vcmp = let rec eqAux e1 e2 ~kcmp ~veq = match e1,e2 with | h1::t1, h2::t2 -> - if (Bs_Cmp.getCmp kcmp) (key h1) (key h2) [@bs] = 0 && + if (Bs_Cmp.getCmpIntenral kcmp) (key h1) (key h2) [@bs] = 0 && veq (value h1) (value h2) [@bs] then eqAux ~kcmp ~veq ( stackAllLeft (right h1) t1 ) (stackAllLeft (right h2) t2) @@ -553,43 +553,43 @@ let eq0 s1 s2 ~kcmp ~veq = eqAux (stackAllLeft s1 []) (stackAllLeft s2 []) ~kcmp ~veq else false -let rec findOpt0 n x ~cmp = +let rec get0 n x ~cmp = match toOpt n with None -> None | Some n (* Node(l, v, d, r, _) *) -> let v = key n in - let c = (Bs_Cmp.getCmp cmp) x v [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in if c = 0 then Some (value n) - else findOpt0 ~cmp (if c < 0 then left n else right n) x + else get0 ~cmp (if c < 0 then left n else right n) x -let rec findNull0 n x ~cmp = +let rec getUndefined0 n x ~cmp = match toOpt n with - | None -> Js.null + | None -> Js.undefined | Some n -> let v = key n in - let c = (Bs_Cmp.getCmp cmp) x v [@bs] in - if c = 0 then return (value n ) - else findNull0 ~cmp (if c < 0 then left n else right n) x + let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in + if c = 0 then Js.Undefined.return (value n ) + else getUndefined0 ~cmp (if c < 0 then left n else right n) x -let rec findExn0 n x ~cmp = +let rec getExn0 n x ~cmp = match toOpt n with None -> - [%assert "findExn0"] + [%assert "getExn0"] | Some n (* Node(l, v, d, r, _)*) -> let v = key n in - let c = (Bs_Cmp.getCmp cmp) x v [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in if c = 0 then value n - else findExn0 ~cmp (if c < 0 then left n else right n) x + else getExn0 ~cmp (if c < 0 then left n else right n) x -let rec findWithDefault0 n x def ~cmp = +let rec getWithDefault0 n x def ~cmp = match toOpt n with None -> def | Some n (* Node(l, v, d, r, _)*) -> let v = key n in - let c = (Bs_Cmp.getCmp cmp) x v [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in if c = 0 then value n - else findWithDefault0 ~cmp (if c < 0 then left n else right n) x def + else getWithDefault0 ~cmp (if c < 0 then left n else right n) x def let rec mem0 n x ~cmp = match toOpt n with @@ -597,7 +597,7 @@ let rec mem0 n x ~cmp = false | Some n (* Node(l, v, d, r, _) *) -> let v = key n in - let c = (Bs_Cmp.getCmp cmp) x v [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in c = 0 || mem0 ~cmp (if c < 0 then left n else right n) x @@ -676,7 +676,7 @@ let rec updateMutate (t : _ t0) x data ~cmp = | None -> singleton0 x data | Some nt -> let k = key nt in - let c = (Bs_Cmp.getCmp cmp) x k [@bs] in + let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in if c = 0 then begin valueSet nt data; return nt @@ -698,7 +698,7 @@ let ofArray0 (xs : _ array) ~cmp = let next = ref (S.strictlySortedLength xs (fun[@bs] (x0,_) (y0,_) -> - (Bs_Cmp.getCmp cmp) x0 y0 [@bs] < 0 + (Bs_Cmp.getCmpIntenral cmp) x0 y0 [@bs] < 0 )) in let result = ref ( diff --git a/jscomp/others/bs_internalAVLtree.mli b/jscomp/others/bs_internalAVLtree.mli index 8d3f66aaa19..a765c666e75 100644 --- a/jscomp/others/bs_internalAVLtree.mli +++ b/jscomp/others/bs_internalAVLtree.mli @@ -47,17 +47,17 @@ val singleton0 : 'a -> 'b -> ('a,'b) t0 val updateValue : ('k, 'v) node -> 'v -> ('k,'v) node -val minKeyOpt0 : ('a, 'b) t0 -> 'a option -val minKeyNull0: ('a, 'b) t0 -> 'a Js.null +val minKey0: ('a, 'b) t0 -> 'a option +val minKeyUndefined0: ('a, 'b) t0 -> 'a Js.undefined -val maxKeyOpt0 : ('a, 'b) t0 -> 'a option -val maxKeyNull0 : ('a, 'b) t0 -> 'a Js.null +val maxKey0 : ('a, 'b) t0 -> 'a option +val maxKeyUndefined0 : ('a, 'b) t0 -> 'a Js.undefined -val minKVOpt0 : ('a, 'b) t0 -> ('a * 'b) option -val minKVNull0 : ('a,'b) t0 -> ('a * 'b) Js.null +val minimum0 : ('a, 'b) t0 -> ('a * 'b) option +val minUndefined0 : ('a,'b) t0 -> ('a * 'b) Js.undefined -val maxKVOpt0 : ('a,'b) t0 -> ('a * 'b) option -val maxKVNull0 : ('a,'b) t0 -> ('a * 'b) Js.null +val maximum0 : ('a,'b) t0 -> ('a * 'b) option +val maxUndefined0 : ('a,'b) t0 -> ('a * 'b) Js.undefined val removeMinAuxWithRef : ('a, 'b) node -> 'a ref -> 'b ref -> ('a,'b) t0 @@ -124,25 +124,25 @@ val eq0: veq:('b -> 'c -> bool [@bs]) -> bool -val findOpt0: +val get0: ('a, 'b) t0 -> 'a -> cmp:('a,_) Bs_Cmp.cmp -> 'b option -val findNull0: +val getUndefined0: ('a, 'b) t0 -> 'a -> cmp:('a,_) Bs_Cmp.cmp -> - 'b Js.null + 'b Js.undefined -val findWithDefault0: +val getWithDefault0: ('a, 'b) t0 -> 'a -> 'b -> cmp:('a,_) Bs_Cmp.cmp -> 'b -val findExn0: +val getExn0: ('a, 'b) t0 -> 'a -> cmp:('a,_) Bs_Cmp.cmp -> diff --git a/jscomp/others/bs_internalMapInt.ml b/jscomp/others/bs_internalMapInt.ml index 449c3028458..95eaa373eed 100644 --- a/jscomp/others/bs_internalMapInt.ml +++ b/jscomp/others/bs_internalMapInt.ml @@ -24,38 +24,38 @@ let rec add t (x : key) (data : _) = else N.bal (N.left n) k v (add (N.right n) x data ) -let rec findOpt n (x : key) = +let rec get n (x : key) = match N.toOpt n with None -> None | Some n -> let v = N.key n in if x = v then Some (N.value n) - else findOpt (if x < v then N.left n else N.right n) x + else get (if x < v then N.left n else N.right n) x -let rec findNull n (x : key) = +let rec getUndefined n (x : key) = match N.toOpt n with | None -> - Js.null + Js.undefined | Some n -> let v = N.key n in - if x = v then N.return (N.value n) - else findNull (if x < v then (N.left n) else (N.right n)) x + if x = v then Js.Undefined.return (N.value n) + else getUndefined (if x < v then (N.left n) else (N.right n)) x -let rec findExn n (x : key) = +let rec getExn n (x : key) = match N.toOpt n with - | None -> [%assert "findExn"] + | None -> [%assert "getExn"] | Some n -> let v = N.key n in if x = v then (N.value n) - else findExn (if x < v then (N.left n) else (N.right n)) x + else getExn (if x < v then (N.left n) else (N.right n)) x -let rec findWithDefault n (x : key) def = +let rec getWithDefault n (x : key) def = match N.toOpt n with | None -> def | Some n -> let v = N.key n in if x = v then (N.value n) - else findWithDefault (if x < v then (N.left n) else (N.right n)) x def + else getWithDefault (if x < v then (N.left n) else (N.right n)) x def let rec mem n (x : key)= match N.toOpt n with @@ -173,7 +173,7 @@ let rec addMutate (t : _ t) x data : _ t = | None -> N.singleton0 x data | Some nt -> let k = N.key nt in - (* let c = (Bs_Cmp.getCmp cmp) x k [@bs] in *) + (* let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in *) if x = k then begin N.keySet nt x; N.valueSet nt data; diff --git a/jscomp/others/bs_internalMapString.ml b/jscomp/others/bs_internalMapString.ml index 2c2605a31e8..4b7f55818ae 100644 --- a/jscomp/others/bs_internalMapString.ml +++ b/jscomp/others/bs_internalMapString.ml @@ -24,38 +24,38 @@ let rec add t (x : key) (data : _) = else N.bal (N.left n) k v (add (N.right n) x data ) -let rec findOpt n (x : key) = +let rec get n (x : key) = match N.toOpt n with None -> None | Some n -> let v = N.key n in if x = v then Some (N.value n) - else findOpt (if x < v then N.left n else N.right n) x + else get (if x < v then N.left n else N.right n) x -let rec findNull n (x : key) = +let rec getUndefined n (x : key) = match N.toOpt n with | None -> - Js.null + Js.undefined | Some n -> let v = N.key n in - if x = v then N.return (N.value n) - else findNull (if x < v then (N.left n) else (N.right n)) x + if x = v then Js.Undefined.return (N.value n) + else getUndefined (if x < v then (N.left n) else (N.right n)) x -let rec findExn n (x : key) = +let rec getExn n (x : key) = match N.toOpt n with - | None -> [%assert "findExn"] + | None -> [%assert "getExn"] | Some n -> let v = N.key n in if x = v then (N.value n) - else findExn (if x < v then (N.left n) else (N.right n)) x + else getExn (if x < v then (N.left n) else (N.right n)) x -let rec findWithDefault n (x : key) def = +let rec getWithDefault n (x : key) def = match N.toOpt n with | None -> def | Some n -> let v = N.key n in if x = v then (N.value n) - else findWithDefault (if x < v then (N.left n) else (N.right n)) x def + else getWithDefault (if x < v then (N.left n) else (N.right n)) x def let rec mem n (x : key)= match N.toOpt n with @@ -173,7 +173,7 @@ let rec addMutate (t : _ t) x data : _ t = | None -> N.singleton0 x data | Some nt -> let k = N.key nt in - (* let c = (Bs_Cmp.getCmp cmp) x k [@bs] in *) + (* let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in *) if x = k then begin N.keySet nt x; N.valueSet nt data; diff --git a/jscomp/others/bs_internalSetInt.ml b/jscomp/others/bs_internalSetInt.ml index 735cf6468b2..c41ca5c9185 100644 --- a/jscomp/others/bs_internalSetInt.ml +++ b/jscomp/others/bs_internalSetInt.ml @@ -63,31 +63,31 @@ let rec subset (s1 : t) (s2 : t) = subset N.(create empty v1 r1 ) r2 && subset l1 s2 -let rec findOpt (n :t) (x : elt) = +let rec get (n :t) (x : elt) = match N.toOpt n with | None -> None | Some t -> let v = N.key t in if x = v then Some v - else findOpt (if x < v then N.left t else N.right t) x + else get (if x < v then N.left t else N.right t) x -let rec findNull (n :t) (x : elt) = +let rec getUndefined (n :t) (x : elt) = match N.toOpt n with - | None -> Js.null + | None -> Js.undefined | Some t -> let v = N.key t in - if x = v then N.return v - else findNull (if x < v then N.left t else N.right t) x + if x = v then Js.Undefined.return v + else getUndefined (if x < v then N.left t else N.right t) x -let rec findExn (n :t) (x : elt) = +let rec getExn (n :t) (x : elt) = match N.toOpt n with - | None -> [%assert "findExn"] + | None -> [%assert "getExn"] | Some t -> let v = N.key t in if x = v then v - else findExn (if x < v then N.left t else N.right t) x + else getExn (if x < v then N.left t else N.right t) x (****************************************************************************) let rec addMutate t (x : elt)= diff --git a/jscomp/others/bs_internalSetString.ml b/jscomp/others/bs_internalSetString.ml index cb9e6329668..f8807248371 100644 --- a/jscomp/others/bs_internalSetString.ml +++ b/jscomp/others/bs_internalSetString.ml @@ -63,31 +63,31 @@ let rec subset (s1 : t) (s2 : t) = subset N.(create empty v1 r1 ) r2 && subset l1 s2 -let rec findOpt (n :t) (x : elt) = +let rec get (n :t) (x : elt) = match N.toOpt n with | None -> None | Some t -> let v = N.key t in if x = v then Some v - else findOpt (if x < v then N.left t else N.right t) x + else get (if x < v then N.left t else N.right t) x -let rec findNull (n :t) (x : elt) = +let rec getUndefined (n :t) (x : elt) = match N.toOpt n with - | None -> Js.null + | None -> Js.undefined | Some t -> let v = N.key t in - if x = v then N.return v - else findNull (if x < v then N.left t else N.right t) x + if x = v then Js.Undefined.return v + else getUndefined (if x < v then N.left t else N.right t) x -let rec findExn (n :t) (x : elt) = +let rec getExn (n :t) (x : elt) = match N.toOpt n with - | None -> [%assert "findExn"] + | None -> [%assert "getExn"] | Some t -> let v = N.key t in if x = v then v - else findExn (if x < v then N.left t else N.right t) x + else getExn (if x < v then N.left t else N.right t) x (****************************************************************************) let rec addMutate t (x : elt)= diff --git a/jscomp/others/internal_map.cppo.ml b/jscomp/others/internal_map.cppo.ml index d5c3c5f2809..48da29a6a02 100644 --- a/jscomp/others/internal_map.cppo.ml +++ b/jscomp/others/internal_map.cppo.ml @@ -28,38 +28,38 @@ let rec add t (x : key) (data : _) = else N.bal (N.left n) k v (add (N.right n) x data ) -let rec findOpt n (x : key) = +let rec get n (x : key) = match N.toOpt n with None -> None | Some n -> let v = N.key n in if x = v then Some (N.value n) - else findOpt (if x < v then N.left n else N.right n) x + else get (if x < v then N.left n else N.right n) x -let rec findNull n (x : key) = +let rec getUndefined n (x : key) = match N.toOpt n with | None -> - Js.null + Js.undefined | Some n -> let v = N.key n in - if x = v then N.return (N.value n) - else findNull (if x < v then (N.left n) else (N.right n)) x + if x = v then Js.Undefined.return (N.value n) + else getUndefined (if x < v then (N.left n) else (N.right n)) x -let rec findExn n (x : key) = +let rec getExn n (x : key) = match N.toOpt n with - | None -> [%assert "findExn"] + | None -> [%assert "getExn"] | Some n -> let v = N.key n in if x = v then (N.value n) - else findExn (if x < v then (N.left n) else (N.right n)) x + else getExn (if x < v then (N.left n) else (N.right n)) x -let rec findWithDefault n (x : key) def = +let rec getWithDefault n (x : key) def = match N.toOpt n with | None -> def | Some n -> let v = N.key n in if x = v then (N.value n) - else findWithDefault (if x < v then (N.left n) else (N.right n)) x def + else getWithDefault (if x < v then (N.left n) else (N.right n)) x def let rec mem n (x : key)= match N.toOpt n with @@ -177,7 +177,7 @@ let rec addMutate (t : _ t) x data : _ t = | None -> N.singleton0 x data | Some nt -> let k = N.key nt in - (* let c = (Bs_Cmp.getCmp cmp) x k [@bs] in *) + (* let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in *) if x = k then begin N.keySet nt x; N.valueSet nt data; diff --git a/jscomp/others/internal_set.cppo.ml b/jscomp/others/internal_set.cppo.ml index d8fccf0a90b..ecc835f554d 100644 --- a/jscomp/others/internal_set.cppo.ml +++ b/jscomp/others/internal_set.cppo.ml @@ -68,31 +68,31 @@ let rec subset (s1 : t) (s2 : t) = subset N.(create empty v1 r1 ) r2 && subset l1 s2 -let rec findOpt (n :t) (x : elt) = +let rec get (n :t) (x : elt) = match N.toOpt n with | None -> None | Some t -> let v = N.key t in if x = v then Some v - else findOpt (if x < v then N.left t else N.right t) x + else get (if x < v then N.left t else N.right t) x -let rec findNull (n :t) (x : elt) = +let rec getUndefined (n :t) (x : elt) = match N.toOpt n with - | None -> Js.null + | None -> Js.undefined | Some t -> let v = N.key t in - if x = v then N.return v - else findNull (if x < v then N.left t else N.right t) x + if x = v then Js.Undefined.return v + else getUndefined (if x < v then N.left t else N.right t) x -let rec findExn (n :t) (x : elt) = +let rec getExn (n :t) (x : elt) = match N.toOpt n with - | None -> [%assert "findExn"] + | None -> [%assert "getExn"] | Some t -> let v = N.key t in if x = v then v - else findExn (if x < v then N.left t else N.right t) x + else getExn (if x < v then N.left t else N.right t) x (****************************************************************************) let rec addMutate t (x : elt)= diff --git a/jscomp/others/map.cppo.ml b/jscomp/others/map.cppo.ml index 0f7768c9f1b..bfed673daf3 100644 --- a/jscomp/others/map.cppo.ml +++ b/jscomp/others/map.cppo.ml @@ -18,14 +18,14 @@ let empty = N.empty0 let isEmpty = N.isEmpty0 let singleton = N.singleton0 -let minKey = N.minKeyOpt0 -let minKeyNull = N.minKeyNull0 -let maxKey = N.maxKeyOpt0 -let maxKeyNull = N.maxKeyNull0 -let minimum = N.minKVOpt0 -let minNull = N.minKVNull0 -let maximum = N.maxKVOpt0 -let maxNull = N.maxKVNull0 +let minKey = N.minKey0 +let minKeyUndefined = N.minKeyUndefined0 +let maxKey = N.maxKey0 +let maxKeyUndefined = N.maxKeyUndefined0 +let minimum = N.minimum0 +let minUndefined = N.minUndefined0 +let maximum = N.maximum0 +let maxUndefined = N.maxUndefined0 let forEach = N.iter0 let map = N.map0 let mapWithKey = N.mapi0 @@ -148,10 +148,10 @@ let mergeArray h arr = let has = I.mem let cmp = I.cmp let eq = I.eq -let get = I.findOpt -let getNull = I.findNull -let getWithDefault = I.findWithDefault -let getExn = I.findExn +let get = I.get +let getUndefined = I.getUndefined +let getWithDefault = I.getWithDefault +let getExn = I.getExn let split = I.split let merge = I.merge let ofArray = I.ofArray diff --git a/jscomp/others/map.cppo.mli b/jscomp/others/map.cppo.mli index e2fd047da08..e76c9b75de0 100644 --- a/jscomp/others/map.cppo.mli +++ b/jscomp/others/map.cppo.mli @@ -47,15 +47,15 @@ val ofArray: (key * 'a) array -> 'a t val keysToArray: 'a t -> key array val valuesToArray: 'a t -> 'a array val minKey: _ t -> key option -val minKeyNull: _ t -> key Js.null +val minKeyUndefined: _ t -> key Js.undefined val maxKey: _ t -> key option -val maxKeyNull: _ t -> key Js.null +val maxKeyUndefined: _ t -> key Js.undefined val minimum: 'a t -> (key * 'a) option -val minNull: 'a t -> (key * 'a) Js.null +val minUndefined: 'a t -> (key * 'a) Js.undefined val maximum: 'a t -> (key * 'a) option -val maxNull: 'a t -> (key * 'a) Js.null +val maxUndefined: 'a t -> (key * 'a) Js.undefined val get: 'a t -> key -> 'a option -val getNull: 'a t -> key -> 'a Js.null +val getUndefined: 'a t -> key -> 'a Js.undefined val getWithDefault: 'a t -> key -> 'a -> 'a val getExn: 'a t -> key -> 'a val checkInvariantInternal: _ t -> bool diff --git a/jscomp/others/mapm.cppo.ml b/jscomp/others/mapm.cppo.ml index a5e0c97c79f..18f2b9f255a 100644 --- a/jscomp/others/mapm.cppo.ml +++ b/jscomp/others/mapm.cppo.ml @@ -24,14 +24,14 @@ let empty () = t ~data:N.empty0 let isEmpty m = N.isEmpty0 (data m) let singleton k v = t ~data:(N.singleton0 k v) -let minKeyNull m = N.minKeyNull0 (data m) -let minKey m = N.minKeyOpt0 (data m) -let maxKeyNull m = N.maxKeyNull0 (data m) -let maxKey m = N.maxKeyOpt0 (data m) -let minimum m = N.minKVOpt0 (data m) -let minNull m = N.minKVNull0 (data m) -let maximum m = N.maxKVOpt0 (data m) -let maxNull m = N.maxKVNull0 (data m) +let minKeyUndefined m = N.minKeyUndefined0 (data m) +let minKey m = N.minKey0 (data m) +let maxKeyUndefined m = N.maxKeyUndefined0 (data m) +let maxKey m = N.maxKey0 (data m) +let minimum m = N.minimum0 (data m) +let minUndefined m = N.minUndefined0 (data m) +let maximum m = N.maximum0 (data m) +let maxUndefined m = N.maxUndefined0 (data m) let set (m : _ t) k v = let old_data = data m in @@ -99,7 +99,7 @@ let rec updateDone0 t (x : key) f = | None -> t) | Some nt -> let k = N.key nt in - (* let c = (Bs_Cmp.getCmp cmp) x k [@bs] in *) + (* let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in *) if k = x then begin match f (Some (N.value nt)) [@bs] with | None -> @@ -166,8 +166,7 @@ let cmp d0 d1 = I.cmp (data d0) (data d1) let eq d0 d1 = I.eq (data d0) (data d1) -let get d x = - I.findOpt (data d) x -let getNull d x = I.findNull (data d) x -let getWithDefault d x def = I.findWithDefault (data d) x def -let getExn d x = I.findExn (data d) x +let get d x = I.get (data d) x +let getUndefined d x = I.getUndefined (data d) x +let getWithDefault d x def = I.getWithDefault (data d) x def +let getExn d x = I.getExn (data d) x diff --git a/jscomp/others/mapm.cppo.mli b/jscomp/others/mapm.cppo.mli index bd810b1a0d8..ef2de393c53 100644 --- a/jscomp/others/mapm.cppo.mli +++ b/jscomp/others/mapm.cppo.mli @@ -78,15 +78,15 @@ val ofArray: (key * 'a) array -> 'a t val keysToArray: 'a t -> key array val valuesToArray: 'a t -> 'a array val minKey: _ t -> key option -val minKeyNull: _ t -> key Js.null +val minKeyUndefined: _ t -> key Js.undefined val maxKey: _ t -> key option -val maxKeyNull: _ t -> key Js.null +val maxKeyUndefined: _ t -> key Js.undefined val minimum: 'a t -> (key * 'a) option -val minNull: 'a t -> (key * 'a) Js.null +val minUndefined: 'a t -> (key * 'a) Js.undefined val maximum: 'a t -> (key * 'a) option -val maxNull: 'a t -> (key * 'a) Js.null +val maxUndefined: 'a t -> (key * 'a) Js.undefined val get: 'a t -> key -> 'a option -val getNull: 'a t -> key -> 'a Js.null +val getUndefined: 'a t -> key -> 'a Js.undefined val getWithDefault: 'a t -> key -> 'a -> 'a val getExn: 'a t -> key -> 'a val checkInvariantInternal: _ t -> bool diff --git a/jscomp/others/set.cppo.ml b/jscomp/others/set.cppo.ml index 873116db417..858fb011f87 100644 --- a/jscomp/others/set.cppo.ml +++ b/jscomp/others/set.cppo.ml @@ -15,10 +15,10 @@ type t = I.t let empty = N.empty0 let isEmpty = N.isEmpty0 let singleton = N.singleton0 -let minimum = N.minOpt0 -let minNull = N.minNull0 -let maximum = N.maxOpt0 -let maxNull = N.maxNull0 +let minimum = N.minimum0 +let minUndefined = N.minUndefined0 +let maximum = N.maximum0 +let maxUndefined = N.maxUndefined0 let forEach = N.iter0 let reduce = N.fold0 let every = N.every0 @@ -92,9 +92,9 @@ let removeMany h arr = let ofArray = I.ofArray let cmp = I.cmp let eq = I.eq -let get = I.findOpt -let getNull = I.findNull -let getExn = I.findExn +let get = I.get +let getUndefined = I.getUndefined +let getExn = I.getExn let subset = I.subset let has = I.mem diff --git a/jscomp/others/set.cppo.mli b/jscomp/others/set.cppo.mli index f3aeeddca81..5321d8c9e81 100644 --- a/jscomp/others/set.cppo.mli +++ b/jscomp/others/set.cppo.mli @@ -97,14 +97,14 @@ val toArray: t -> elt array val minimum: t -> elt option -val minNull: t -> elt Js.null +val minUndefined: t -> elt Js.undefined val maximum: t -> elt option -val maxNull: t -> elt Js.null +val maxUndefined: t -> elt Js.undefined val get: t -> elt -> elt option -val getNull: t -> elt -> elt Js.null +val getUndefined: t -> elt -> elt Js.undefined val getExn: t -> elt -> elt val split: t -> elt -> (t * t) * bool (** [split x s] returns a triple [(l, present, r)], where diff --git a/jscomp/others/setm.cppo.ml b/jscomp/others/setm.cppo.ml index 0fa55f99384..15a5926ad06 100644 --- a/jscomp/others/setm.cppo.ml +++ b/jscomp/others/setm.cppo.ml @@ -69,16 +69,16 @@ let singleton x = t ~data:(N.singleton0 x) let minimum d = - N.minOpt0 (data d) + N.minimum0 (data d) -let minNull d = - N.minNull0 (data d) +let minUndefined d = + N.minUndefined0 (data d) let maximum d = - N.maxOpt0 (data d) + N.maximum0 (data d) -let maxNull d = -N.maxNull0 (data d) +let maxUndefined d = + N.maxUndefined0 (data d) let forEach d f = N.iter0 (data d) f @@ -150,7 +150,7 @@ let removeMany (d : t) xs = let rec removeMutateCheckAux nt (x : elt) removed = let k = N.key nt in - (* let c = (Bs_Cmp.getCmp cmp) x k [@bs] in *) + (* let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in *) if x = k then let () = removed := true in let l,r = N.(left nt, right nt) in @@ -199,7 +199,7 @@ let rec addMutateCheckAux t (x : elt) added = N.singleton0 x | Some nt -> let k = N.key nt in - (* let c = (Bs_Cmp.getCmp cmp) x k [@bs] in *) + (* let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in *) if x = k then t else let l, r = N.(left nt, right nt) in @@ -227,11 +227,11 @@ let cmp d0 d1 = let eq d0 d1 = I.eq (data d0) (data d1) let get d x = - I.findOpt (data d) x -let getNull d x = - I.findNull (data d) x + I.get (data d) x +let getUndefined d x = + I.getUndefined (data d) x let getExn d x = - I.findExn (data d) x + I.getExn (data d) x let split d key = let s = data d in let arr = N.toArray0 s in @@ -266,7 +266,7 @@ let intersect dataa datab = let tmp = A.makeUninitializedUnsafe totalSize in ignore @@ N.fillArray dataa0 0 tmp ; ignore @@ N.fillArray datab0 sizea tmp; - (* let p = Bs_Cmp.getCmp M.cmp in *) + (* let p = Bs_Cmp.getCmpIntenral M.cmp in *) if ((A.getUnsafe tmp (sizea - 1) < A.getUnsafe tmp sizea)) || @@ -291,7 +291,7 @@ let diff dataa datab : t = let tmp = A.makeUninitializedUnsafe totalSize in ignore @@ N.fillArray dataa0 0 tmp ; ignore @@ N.fillArray datab0 sizea tmp; - (* let p = Bs_Cmp.getCmp M.cmp in *) + (* let p = Bs_Cmp.getCmpIntenral M.cmp in *) if ( (A.getUnsafe tmp (sizea - 1)) < (A.getUnsafe tmp sizea)) || @@ -315,7 +315,7 @@ let union (dataa : t) (datab : t) : t = let tmp = A.makeUninitializedUnsafe totalSize in ignore @@ N.fillArray dataa0 0 tmp ; ignore @@ N.fillArray datab0 sizea tmp ; - (* let p = (Bs_Cmp.getCmp M.cmp) in *) + (* let p = (Bs_Cmp.getCmpIntenral M.cmp) in *) if (A.getUnsafe tmp (sizea - 1) < A.getUnsafe tmp sizea) then diff --git a/jscomp/others/setm.cppo.mli b/jscomp/others/setm.cppo.mli index c326e4306a4..8972f710445 100644 --- a/jscomp/others/setm.cppo.mli +++ b/jscomp/others/setm.cppo.mli @@ -87,12 +87,12 @@ val toArray: t -> elt array val minimum: t -> elt option -val minNull: t -> elt Js.null +val minUndefined: t -> elt Js.undefined val maximum: t -> elt option -val maxNull: t -> elt Js.null +val maxUndefined: t -> elt Js.undefined val get: t -> elt -> elt option -val getNull: t -> elt -> elt Js.null +val getUndefined: t -> elt -> elt Js.undefined val getExn: t -> elt -> elt val split: t -> elt -> (t * t) * bool (** diff --git a/jscomp/runtime/.depend b/jscomp/runtime/.depend index 03f3aa1925b..ddce947f3dc 100644 --- a/jscomp/runtime/.depend +++ b/jscomp/runtime/.depend @@ -35,7 +35,7 @@ bs_obj.cmj : js.cmj js_nativeint.cmj : js_int.cmj : js_null.cmj : js_exn.cmj js.cmj js_null.cmi -js_undefined.cmj : js.cmj js_undefined.cmi +js_undefined.cmj : js_exn.cmj js.cmj js_undefined.cmi caml_array.cmi : caml_string.cmi : caml_bytes.cmi : diff --git a/jscomp/runtime/js_undefined.ml b/jscomp/runtime/js_undefined.ml index e768c110526..07433c5c85b 100644 --- a/jscomp/runtime/js_undefined.ml +++ b/jscomp/runtime/js_undefined.ml @@ -31,8 +31,14 @@ external return : 'a -> 'a t = "%identity" external test : 'a t -> bool = "#is_undef" external testAny : 'a -> bool = "#is_undef" -external empty : 'a t = "undefined" -[@@bs.val] +external empty : 'a t = "#undefined" + +external getUnsafe : 'a t -> 'a = "%identity" + +let getExn f = + match toOption f with + | None -> Js_exn.raiseError "Js.Undefined.getExn" + | Some x -> x let bind x f = match to_opt x with @@ -44,7 +50,9 @@ let iter x f = | None -> () | Some x -> f x [@bs] -let from_opt x = +let fromOption x = match x with | None -> empty | Some x -> return x + +let from_opt = fromOption diff --git a/jscomp/runtime/js_undefined.mli b/jscomp/runtime/js_undefined.mli index 38b34d3f4d4..f59f1d33e8e 100644 --- a/jscomp/runtime/js_undefined.mli +++ b/jscomp/runtime/js_undefined.mli @@ -42,8 +42,11 @@ external testAny : 'a -> bool = "#is_undef" (** The empty value, [undefined] *) -external empty : 'a t = "undefined" [@@bs.val] +external empty : 'a t = "#undefined" +external getUnsafe : 'a t -> 'a = "%identity" + +val getExn: 'a t -> 'a (** Maps the contained value using the given function @@ -78,7 +81,9 @@ val iter : 'a t -> ('a -> unit [@bs]) -> unit %} *) +val fromOption: 'a option -> 'a t val from_opt : 'a option -> 'a t +[@@ocaml.deprecated "Use fromOption instead"] (** Maps ['a Js.undefined] to ['a option] diff --git a/jscomp/test/bs_map_test.js b/jscomp/test/bs_map_test.js index 097f4e968a7..7425837d420 100644 --- a/jscomp/test/bs_map_test.js +++ b/jscomp/test/bs_map_test.js @@ -24,20 +24,16 @@ function b(loc, v) { var Icmp = /* module */[/* cmp */Caml_primitive.caml_int_compare]; -var cmp = Caml_primitive.caml_int_compare; - -var Icmp2 = /* module */[/* cmp */cmp]; +var Icmp2 = /* module */[/* cmp */Caml_primitive.caml_int_compare]; var m0 = { dict: Icmp, data: Bs_SortedMapDict.empty }; -function cmp$1(x, y) { - return Caml_primitive.caml_int_compare(y, x); -} - -var I2 = /* module */[/* cmp */cmp$1]; +var I2 = /* module */[/* cmp */(function (x, y) { + return Caml_primitive.caml_int_compare(y, x); + })]; var m = { dict: Icmp2, @@ -77,12 +73,12 @@ var v = { var m_dict$1 = m.dict; -var cmp$2 = m_dict$1[/* cmp */0]; +var cmp = m_dict$1[/* cmp */0]; var data$1 = v.data; for(var i$1 = 0; i$1 <= 100000; ++i$1){ - data$1 = Bs_SortedSetDict.add(data$1, i$1, cmp$2); + data$1 = Bs_SortedSetDict.add(data$1, i$1, cmp); } console.log(data$1); @@ -106,7 +102,7 @@ var u0 = f(Bs_Array.map(Array_data_util.randomRange(0, 39), (function (x) { var u1 = Bs_Map.set(u0, 39, 120); -b("File \"bs_map_test.ml\", line 84, characters 4-11", Bs_Array.every2(Bs_SortedMapDict.toArray(u0.data), Bs_Array.map(Array_data_util.range(0, 39), (function (x) { +b("File \"bs_map_test.ml\", line 77, characters 4-11", Bs_Array.every2(Bs_SortedMapDict.toArray(u0.data), Bs_Array.map(Array_data_util.range(0, 39), (function (x) { return /* tuple */[ x, x @@ -119,7 +115,7 @@ b("File \"bs_map_test.ml\", line 84, characters 4-11", Bs_Array.every2(Bs_Sorted } }))); -b("File \"bs_map_test.ml\", line 89, characters 4-11", Bs_List.every2(Bs_SortedMapDict.toList(u0.data), Bs_Array.toList(Bs_Array.map(Array_data_util.range(0, 39), (function (x) { +b("File \"bs_map_test.ml\", line 82, characters 4-11", Bs_List.every2(Bs_SortedMapDict.toList(u0.data), Bs_Array.toList(Bs_Array.map(Array_data_util.range(0, 39), (function (x) { return /* tuple */[ x, x @@ -132,9 +128,9 @@ b("File \"bs_map_test.ml\", line 89, characters 4-11", Bs_List.every2(Bs_SortedM } }))); -eq("File \"bs_map_test.ml\", line 94, characters 5-12", Bs_Map.get(u0, 39), /* Some */[39]); +eq("File \"bs_map_test.ml\", line 87, characters 5-12", Bs_Map.get(u0, 39), /* Some */[39]); -eq("File \"bs_map_test.ml\", line 95, characters 5-12", Bs_Map.get(u1, 39), /* Some */[120]); +eq("File \"bs_map_test.ml\", line 88, characters 5-12", Bs_Map.get(u1, 39), /* Some */[120]); var u = f(Bs_Array.makeByAndShuffle(10000, (function (x) { return /* tuple */[ @@ -143,7 +139,7 @@ var u = f(Bs_Array.makeByAndShuffle(10000, (function (x) { ]; }))); -eq("File \"bs_map_test.ml\", line 101, characters 4-11", Bs_Array.makeBy(10000, (function (x) { +eq("File \"bs_map_test.ml\", line 94, characters 4-11", Bs_Array.makeBy(10000, (function (x) { return /* tuple */[ x, x diff --git a/jscomp/test/bs_map_test.ml b/jscomp/test/bs_map_test.ml index 66468784e8b..6edfda73dc4 100644 --- a/jscomp/test/bs_map_test.ml +++ b/jscomp/test/bs_map_test.ml @@ -9,13 +9,10 @@ module Icmp = compare x y ) ) -module Icmp2 = Bs.Cmp.Make( - struct - type t = int - let cmp = fun [@bs] (x : int) y -> - compare x y - end - ) +module Icmp2 = +(val Bs.Cmp.make ~cmp:(fun [@bs] (x : int) y -> + compare x y )) + module M = Bs.Map module MI = Bs.MapInt (* module B = Bs.Bag *) @@ -25,13 +22,9 @@ module L = Bs.List let m0 : (_,string,_) M.t = M.empty (module Icmp) -module I2 = Bs.Cmp.Make( - struct - type t = int - let cmp = fun [@bs] (x : int) y -> - compare y x - end - ) +module I2 = +(val Bs.Cmp.make ~cmp:(fun [@bs] (x : int) y -> compare y x )) + let m = M.empty (module Icmp2) let m2 : (int, string, _) M.t = M.empty (module I2) diff --git a/jscomp/test/bs_mutable_set_test.js b/jscomp/test/bs_mutable_set_test.js index e57aa097573..876eb54e6cc 100644 --- a/jscomp/test/bs_mutable_set_test.js +++ b/jscomp/test/bs_mutable_set_test.js @@ -87,11 +87,11 @@ Bs_SetIntM.remove(v$3, 30); Bs_SetIntM.remove(v$3, 29); -b("File \"bs_mutable_set_test.ml\", line 55, characters 4-11", +(28 === Bs_internalAVLset.maxNull0(v$3.data))); +b("File \"bs_mutable_set_test.ml\", line 55, characters 4-11", +(28 === Bs_internalAVLset.maxUndefined0(v$3.data))); Bs_SetIntM.remove(v$3, 0); -b("File \"bs_mutable_set_test.ml\", line 57, characters 4-11", +(1 === Bs_internalAVLset.minNull0(v$3.data))); +b("File \"bs_mutable_set_test.ml\", line 57, characters 4-11", +(1 === Bs_internalAVLset.minUndefined0(v$3.data))); eq("File \"bs_mutable_set_test.ml\", line 58, characters 5-12", Bs_internalAVLset.length0(v$3.data), 28); diff --git a/jscomp/test/bs_mutable_set_test.ml b/jscomp/test/bs_mutable_set_test.ml index 590afddf245..187374ab167 100644 --- a/jscomp/test/bs_mutable_set_test.ml +++ b/jscomp/test/bs_mutable_set_test.ml @@ -52,9 +52,9 @@ let () = let v = N.ofArray (A.makeBy 30 (fun [@bs]i -> i)) in N.remove v 30; N.remove v 29 ; - b __LOC__ (Js.eqNull 28 (N.maxNull v )); + b __LOC__ (Js.eqUndefined 28 (N.maxUndefined v )); N.remove v 0 ; - b __LOC__ (Js.eqNull 1 (N.minNull v)); + b __LOC__ (Js.eqUndefined 1 (N.minUndefined v)); eq __LOC__ (N.size v ) 28; let vv = I.randomRange 1 28 in for i = 0 to A.length vv - 1 do diff --git a/jscomp/test/bs_poly_map_test.js b/jscomp/test/bs_poly_map_test.js index 446ed33401d..25f1a7ef795 100644 --- a/jscomp/test/bs_poly_map_test.js +++ b/jscomp/test/bs_poly_map_test.js @@ -135,15 +135,15 @@ b("File \"bs_poly_map_test.ml\", line 70, characters 4-11", Bs_Map.has(a0, 3)); b("File \"bs_poly_map_test.ml\", line 71, characters 4-11", 1 - Bs_Map.has(a5, 3)); -b("File \"bs_poly_map_test.ml\", line 72, characters 4-11", +(3 === Bs_Map.getNull(a0, 3))); +b("File \"bs_poly_map_test.ml\", line 72, characters 4-11", +(3 === Bs_Map.getUndefined(a0, 3))); -b("File \"bs_poly_map_test.ml\", line 73, characters 4-11", +(33 === Bs_Map.getNull(a1, 3))); +b("File \"bs_poly_map_test.ml\", line 73, characters 4-11", +(33 === Bs_Map.getUndefined(a1, 3))); -b("File \"bs_poly_map_test.ml\", line 74, characters 4-11", +(Bs_Map.getNull(a2, 3) === null)); +b("File \"bs_poly_map_test.ml\", line 74, characters 4-11", +(Bs_Map.getUndefined(a2, 3) === undefined)); -b("File \"bs_poly_map_test.ml\", line 76, characters 4-11", +(11 === Bs_Map.getNull(a3, 3))); +b("File \"bs_poly_map_test.ml\", line 76, characters 4-11", +(11 === Bs_Map.getUndefined(a3, 3))); -b("File \"bs_poly_map_test.ml\", line 77, characters 4-11", +(Bs_Map.getNull(a4, 3) === null)); +b("File \"bs_poly_map_test.ml\", line 77, characters 4-11", +(Bs_Map.getUndefined(a4, 3) === undefined)); var a7 = Bs_Map.removeMany(a0, /* array */[ 7, diff --git a/jscomp/test/bs_poly_map_test.ml b/jscomp/test/bs_poly_map_test.ml index 5b055421476..6d2972034d5 100644 --- a/jscomp/test/bs_poly_map_test.ml +++ b/jscomp/test/bs_poly_map_test.ml @@ -69,12 +69,12 @@ let () = b __LOC__ (a5 == a6); b __LOC__ (M.has a0 3); b __LOC__ (not (M.has a5 3)); - b __LOC__ (Js.eqNull 3 (M.getNull a0 3)); - b __LOC__ (Js.eqNull 33 (M.getNull a1 3)); - b __LOC__ (Js.Null.test (M.getNull a2 3)); + b __LOC__ (Js.eqUndefined 3 (M.getUndefined a0 3)); + b __LOC__ (Js.eqUndefined 33 (M.getUndefined a1 3)); + b __LOC__ (Js.Undefined.test (M.getUndefined a2 3)); - b __LOC__ (Js.eqNull 11 (M.getNull a3 3)); - b __LOC__ (Js.Null.test (M.getNull a4 3)); + b __LOC__ (Js.eqUndefined 11 (M.getUndefined a3 3)); + b __LOC__ (Js.Undefined.test (M.getUndefined a4 3)); let a7 = M.removeMany a0 [|7;8;0;1;3;2;4;922;4;5;6;|] in eq __LOC__ (M.keysToArray a7) [|9;10|]; diff --git a/jscomp/test/bs_poly_mutable_set_test.js b/jscomp/test/bs_poly_mutable_set_test.js index 09832a05952..c210538aef8 100644 --- a/jscomp/test/bs_poly_mutable_set_test.js +++ b/jscomp/test/bs_poly_mutable_set_test.js @@ -35,9 +35,9 @@ eq("File \"bs_poly_mutable_set_test.ml\", line 19, characters 5-12", Bs_internal var r = Array_data_util.randomRange(0, 30); -b("File \"bs_poly_mutable_set_test.ml\", line 21, characters 4-11", +(29 === Bs_internalAVLset.maxNull0(u.data))); +b("File \"bs_poly_mutable_set_test.ml\", line 21, characters 4-11", +(29 === Bs_internalAVLset.maxUndefined0(u.data))); -b("File \"bs_poly_mutable_set_test.ml\", line 22, characters 4-11", +(1 === Bs_internalAVLset.minNull0(u.data))); +b("File \"bs_poly_mutable_set_test.ml\", line 22, characters 4-11", +(1 === Bs_internalAVLset.minUndefined0(u.data))); Bs_SetM.add(u, 3); diff --git a/jscomp/test/bs_poly_mutable_set_test.ml b/jscomp/test/bs_poly_mutable_set_test.ml index 1379ba89781..bd5e429a414 100644 --- a/jscomp/test/bs_poly_mutable_set_test.ml +++ b/jscomp/test/bs_poly_mutable_set_test.ml @@ -18,8 +18,8 @@ let () = b __LOC__ (N.removeCheck u 20); eq __LOC__ (N.size u) 28 ; let r = I.randomRange 0 30 in - b __LOC__ (Js.eqNull 29 (N.maxNull u)); - b __LOC__ (Js.eqNull 1 (N.minNull u)); + b __LOC__ (Js.eqUndefined 29 (N.maxUndefined u)); + b __LOC__ (Js.eqUndefined 1 (N.minUndefined u)); N.add u 3; for i = 0 to A.length r - 1 do N.remove u (A.getUnsafe r i) diff --git a/jscomp/test/bs_poly_set_test.js b/jscomp/test/bs_poly_set_test.js index fc3b51f83ca..3da6516c5f8 100644 --- a/jscomp/test/bs_poly_set_test.js +++ b/jscomp/test/bs_poly_set_test.js @@ -79,9 +79,9 @@ b("File \"bs_poly_set_test.ml\", line 34, characters 4-11", +(u2 === u1)); eq("File \"bs_poly_set_test.ml\", line 35, characters 5-12", Bs_SortedSetDict.size(u4.data), 28); -b("File \"bs_poly_set_test.ml\", line 36, characters 4-11", +(29 === Bs_SortedSetDict.maxNull(u4.data))); +b("File \"bs_poly_set_test.ml\", line 36, characters 4-11", +(29 === Bs_SortedSetDict.maxUndefined(u4.data))); -b("File \"bs_poly_set_test.ml\", line 37, characters 4-11", +(1 === Bs_SortedSetDict.minNull(u4.data))); +b("File \"bs_poly_set_test.ml\", line 37, characters 4-11", +(1 === Bs_SortedSetDict.minUndefined(u4.data))); b("File \"bs_poly_set_test.ml\", line 38, characters 4-11", +(u4 === u5)); @@ -149,11 +149,11 @@ b("File \"bs_poly_set_test.ml\", line 72, characters 4-11", Bs_Set.subset(u22, u b("File \"bs_poly_set_test.ml\", line 73, characters 4-11", Bs_Set.subset(u21, u17) && Bs_Set.subset(u21, u18)); -b("File \"bs_poly_set_test.ml\", line 74, characters 4-11", +(47 === Bs_Set.getNull(u22, 47))); +b("File \"bs_poly_set_test.ml\", line 74, characters 4-11", +(47 === Bs_Set.getUndefined(u22, 47))); b("File \"bs_poly_set_test.ml\", line 75, characters 4-11", Caml_obj.caml_equal(/* Some */[47], Bs_Set.get(u22, 47))); -b("File \"bs_poly_set_test.ml\", line 76, characters 4-11", +(Bs_Set.getNull(u22, 59) === null)); +b("File \"bs_poly_set_test.ml\", line 76, characters 4-11", +(Bs_Set.getUndefined(u22, 59) === undefined)); b("File \"bs_poly_set_test.ml\", line 77, characters 4-11", +(/* None */0 === Bs_Set.get(u22, 59))); @@ -180,14 +180,14 @@ var m$2 = { data: Bs_SortedSetDict.empty }; -b("File \"bs_poly_set_test.ml\", line 82, characters 4-11", Caml_obj.caml_equal(Bs_SortedSetDict.minNull(m$2.data), null)); +b("File \"bs_poly_set_test.ml\", line 82, characters 4-11", Caml_obj.caml_equal(Bs_SortedSetDict.minUndefined(m$2.data), undefined)); var m$3 = { dict: IntCmp, data: Bs_SortedSetDict.empty }; -b("File \"bs_poly_set_test.ml\", line 83, characters 4-11", Caml_obj.caml_equal(Bs_SortedSetDict.maxNull(m$3.data), null)); +b("File \"bs_poly_set_test.ml\", line 83, characters 4-11", Caml_obj.caml_equal(Bs_SortedSetDict.maxUndefined(m$3.data), undefined)); function testIterToList(xs) { var v = [/* [] */0]; diff --git a/jscomp/test/bs_poly_set_test.ml b/jscomp/test/bs_poly_set_test.ml index 89f097c8db6..27fbe9815ff 100644 --- a/jscomp/test/bs_poly_set_test.ml +++ b/jscomp/test/bs_poly_set_test.ml @@ -33,8 +33,8 @@ let () = b __LOC__ (u0 != u1); b __LOC__ (u2 == u1); eq __LOC__ (N.size u4) 28; - b __LOC__ (Js.eqNull 29 (N.maxNull u4)); - b __LOC__ (Js.eqNull 1 (N.minNull u4)); + b __LOC__ (Js.eqUndefined 29 (N.maxUndefined u4)); + b __LOC__ (Js.eqUndefined 1 (N.minUndefined u4)); b __LOC__ (u4 == u5); b __LOC__ (N.isEmpty u6); eq __LOC__ (N.size u7) 3 ; @@ -71,16 +71,16 @@ let () = b __LOC__ (not (N.subset u18 u23)); b __LOC__ (N.subset u22 u17); b __LOC__ (N.subset u21 u17 && N.subset u21 u18); - b __LOC__ (Js.eqNull 47 (N.getNull u22 47)); + b __LOC__ (Js.eqUndefined 47 (N.getUndefined u22 47)); b __LOC__ ( Some 47 = (N.get u22 47)); - b __LOC__ (Js.Null.test (N.getNull u22 59)); + b __LOC__ (Js.Undefined.test (N.getUndefined u22 59)); b __LOC__ (None = (N.get u22 59)); let u25 = N.add u22 59 in eq __LOC__ (N.size u25) 60; b __LOC__ (N.minimum (N.empty (module IntCmp)) = None); b __LOC__ (N.maximum (N.empty (module IntCmp)) = None); - b __LOC__ (N.minNull (N.empty (module IntCmp)) = Js.null); - b __LOC__ (N.maxNull (N.empty (module IntCmp)) = Js.null) + b __LOC__ (N.minUndefined (N.empty (module IntCmp)) = Js.undefined); + b __LOC__ (N.maxUndefined (N.empty (module IntCmp)) = Js.undefined) let testIterToList xs = let v = ref [] in diff --git a/jscomp/test/bs_set_int_test.js b/jscomp/test/bs_set_int_test.js index d5ba33fb450..41bf59e4a52 100644 --- a/jscomp/test/bs_set_int_test.js +++ b/jscomp/test/bs_set_int_test.js @@ -145,9 +145,9 @@ var v$1 = Bs_SetInt.ofArray(/* array */[ -1 ]); -var minv = Bs_SetInt.minNull(v$1); +var minv = Bs_SetInt.minUndefined(v$1); -var maxv = Bs_SetInt.maxNull(v$1); +var maxv = Bs_SetInt.maxUndefined(v$1); function approx(loc, x, y) { return b(loc, +(x === y)); diff --git a/jscomp/test/bs_set_int_test.ml b/jscomp/test/bs_set_int_test.ml index aaa8fd39ddb..1100518b7de 100644 --- a/jscomp/test/bs_set_int_test.ml +++ b/jscomp/test/bs_set_int_test.ml @@ -68,9 +68,9 @@ let () = let () = let ss = [|1;222;3;4;2;0;33;-1|] in let v = ofA [|1;222;3;4;2;0;33;-1|] in - let minv, maxv = N.minNull v, N.maxNull v in + let minv, maxv = N.minUndefined v, N.maxUndefined v in let approx loc (x : int) y = - b loc (Js.eqNull x y) in + b loc (Js.eqUndefined x y) in eq __LOC__ (N.reduce v 0 (fun [@bs] x y -> x + y) ) (A.reduce ss 0 (fun [@bs] x y -> x + y) ) ; approx __LOC__ (-1) minv ; approx __LOC__ 222 maxv; diff --git a/jscomp/test/bs_stack_test.js b/jscomp/test/bs_stack_test.js index 4c5dd26676b..89f7eaac09f 100644 --- a/jscomp/test/bs_stack_test.js +++ b/jscomp/test/bs_stack_test.js @@ -1,8 +1,8 @@ 'use strict'; -var Js_null = require("../../lib/js/js_null.js"); var Bs_Queue = require("../../lib/js/bs_Queue.js"); var Bs_Stack = require("../../lib/js/bs_Stack.js"); +var Js_undefined = require("../../lib/js/js_undefined.js"); function inOrder(v) { var current = v; @@ -10,17 +10,17 @@ function inOrder(v) { root: null }; var q = Bs_Queue.make(/* () */0); - while(current !== null) { + while(current !== undefined) { var v$1 = current; Bs_Stack.push(s, v$1); current = v$1.left; }; while(s.root !== null) { - current = Bs_Stack.popNull(s); + current = Bs_Stack.popUndefined(s); var v$2 = current; Bs_Queue.add(q, v$2.value); current = v$2.right; - while(current !== null) { + while(current !== undefined) { var v$3 = current; Bs_Stack.push(s, v$3); current = v$3.left; @@ -35,7 +35,7 @@ function inOrder3(v) { root: null }; var q = Bs_Queue.make(/* () */0); - while(current !== null) { + while(current !== undefined) { var v$1 = current; Bs_Stack.push(s, v$1); current = v$1.left; @@ -43,7 +43,7 @@ function inOrder3(v) { Bs_Stack.dynamicPopIter(s, (function (popped) { Bs_Queue.add(q, popped.value); var current = popped.right; - while(current !== null) { + while(current !== undefined) { var v = current; Bs_Stack.push(s, v); current = v.left; @@ -61,12 +61,12 @@ function inOrder2(v) { }; var q = Bs_Queue.make(/* () */0); while(todo) { - if (cursor !== null) { + if (cursor !== undefined) { var v$1 = cursor; Bs_Stack.push(s, v$1); cursor = v$1.left; } else if (s.root !== null) { - cursor = Bs_Stack.popNull(s); + cursor = Bs_Stack.popUndefined(s); var current = cursor; Bs_Queue.add(q, current.value); cursor = current.right; @@ -80,8 +80,8 @@ function inOrder2(v) { function n(l, r, a) { return { value: a, - left: Js_null.fromOption(l), - right: Js_null.fromOption(r) + left: Js_undefined.fromOption(l), + right: Js_undefined.fromOption(r) }; } @@ -89,7 +89,7 @@ var test1 = n(/* Some */[n(/* Some */[n(/* None */0, /* None */0, 4)], /* Some * function pushAllLeft(st1, s1) { var current = st1; - while(current !== null) { + while(current !== undefined) { var v = current; Bs_Stack.push(s1, v); current = v.left; diff --git a/jscomp/test/bs_stack_test.ml b/jscomp/test/bs_stack_test.ml index bc75f6230b7..941cad0c2fc 100644 --- a/jscomp/test/bs_stack_test.ml +++ b/jscomp/test/bs_stack_test.ml @@ -5,7 +5,7 @@ type node = { left : t; right : t } -and t = node Js.null +and t = node Js.undefined [@@bs.deriving abstract] @@ -17,18 +17,18 @@ let inOrder (v : t) = let current = ref v in let s : node S.t = S.create () in let q : int Q.t = Q.make () in - while !current != Js.null do - let v = Js.Null.getUnsafe !current in + while !current != Js.undefined do + let v = Js.Undefined.getUnsafe !current in S.push s v; current := left v; done ; while not (S.isEmpty s ) do - current := S.popNull s ; - let v = Js.Null.getUnsafe !current in + current := S.popUndefined s ; + let v = Js.Undefined.getUnsafe !current in Q.add q (value v); current := right v ; - while !current != Js.null do - let v = Js.Null.getUnsafe !current in + while !current != Js.undefined do + let v = Js.Undefined.getUnsafe !current in S.push s v; current := left v; done ; @@ -39,16 +39,16 @@ let inOrder3 (v : t) = let current = ref v in let s : node S.t = S.create () in let q : int Q.t = Q.make () in - while !current != Js.null do - let v = Js.Null.getUnsafe !current in + while !current != Js.undefined do + let v = Js.Undefined.getUnsafe !current in S.push s v; current := left v; done ; S.dynamicPopIter s begin fun [@bs] popped -> Q.add q (value popped); let current = ref (right popped) in - while !current != Js.null do - let v = Js.Null.getUnsafe !current in + while !current != Js.undefined do + let v = Js.Undefined.getUnsafe !current in S.push s v; current := left v done @@ -61,16 +61,16 @@ let inOrder2 (v : t) = let s : node S.t = S.create () in let q : int Q.t = Q.make () in while !todo do - if !cursor != Js.null then + if !cursor != Js.undefined then ( - let v = (Js.Null.getUnsafe !cursor) in + let v = (Js.Undefined.getUnsafe !cursor) in S.push s v; cursor := left v) else begin if not (S.isEmpty s) then - (cursor := S.popNull s ; - let current = Js.Null.getUnsafe !cursor in + (cursor := S.popUndefined s ; + let current = Js.Undefined.getUnsafe !cursor in Q.add q (value current); cursor := right current) else @@ -81,8 +81,8 @@ let inOrder2 (v : t) = let n ?l ?r a = node ~value:a - ~left:(Js.Null.fromOption l) - ~right:(Js.Null.fromOption r) + ~left:(Js.Undefined.fromOption l) + ~right:(Js.Undefined.fromOption r) let test1 = @@ -95,8 +95,8 @@ let test1 = let pushAllLeft st1 s1 = let current = ref st1 in - while !current != Js.null do - let v = Js.Null.getUnsafe !current in + while !current != Js.undefined do + let v = Js.Undefined.getUnsafe !current in S.push s1 v; current := left v; done @@ -131,5 +131,5 @@ let test3 = ~r:(n 3) let () = - Js.log (inOrder (Js.Null.return test1)); - Js.log (inOrder3 (Js.Null.return test1)) + Js.log (inOrder (Js.Undefined.return test1)); + Js.log (inOrder3 (Js.Undefined.return test1)) diff --git a/lib/js/bs_Array.js b/lib/js/bs_Array.js index f978c93491f..0efe34dfeaa 100644 --- a/lib/js/bs_Array.js +++ b/lib/js/bs_Array.js @@ -424,7 +424,7 @@ function every2(a, b, p) { } } -function compareTo(a, b, p) { +function cmp(a, b, p) { var lena = a.length; var lenb = b.length; if (lena > lenb) { @@ -455,7 +455,7 @@ function compareTo(a, b, p) { } } -var equalTo = every2; +var eq = every2; exports.get = get; exports.set = set; @@ -488,6 +488,6 @@ exports.reduce = reduce; exports.reduceReverse = reduceReverse; exports.every = every; exports.every2 = every2; -exports.compareTo = compareTo; -exports.equalTo = equalTo; +exports.cmp = cmp; +exports.eq = eq; /* No side effect */ diff --git a/lib/js/bs_Cmp.js b/lib/js/bs_Cmp.js index c63fa2cbd5c..019005b2699 100644 --- a/lib/js/bs_Cmp.js +++ b/lib/js/bs_Cmp.js @@ -1,15 +1,9 @@ 'use strict'; -function Make(M) { - var cmp = M[/* cmp */0]; - return /* module */[/* cmp */cmp]; -} - function make(cmp) { return /* module */[/* cmp */cmp]; } -exports.Make = Make; exports.make = make; /* No side effect */ diff --git a/lib/js/bs_List.js b/lib/js/bs_List.js index ab1ef37a8ba..3b87b11b71f 100644 --- a/lib/js/bs_List.js +++ b/lib/js/bs_List.js @@ -903,7 +903,7 @@ function every2(_l1, _l2, p) { }; } -function compare(_l1, _l2, p) { +function cmp(_l1, _l2, p) { while(true) { var l2 = _l2; var l1 = _l1; @@ -929,7 +929,7 @@ function compare(_l1, _l2, p) { }; } -function equal(_l1, _l2, p) { +function eq(_l1, _l2, p) { while(true) { var l2 = _l2; var l1 = _l1; @@ -1292,8 +1292,8 @@ exports.reduceReverse2 = reduceReverse2; exports.every = every; exports.some = some; exports.every2 = every2; -exports.compare = compare; -exports.equal = equal; +exports.cmp = cmp; +exports.eq = eq; exports.some2 = some2; exports.has = has; exports.hasByReference = hasByReference; diff --git a/lib/js/bs_Map.js b/lib/js/bs_Map.js index 62e1f771dea..3c75306efed 100644 --- a/lib/js/bs_Map.js +++ b/lib/js/bs_Map.js @@ -185,32 +185,32 @@ function minKey(m) { return Bs_SortedMapDict.minKey(m.data); } -function minKeyNull(m) { - return Bs_SortedMapDict.minKeyNull(m.data); +function minKeyUndefined(m) { + return Bs_SortedMapDict.minKeyUndefined(m.data); } function maxKey(m) { return Bs_SortedMapDict.maxKey(m.data); } -function maxKeyNull(m) { - return Bs_SortedMapDict.maxKeyNull(m.data); +function maxKeyUndefined(m) { + return Bs_SortedMapDict.maxKeyUndefined(m.data); } function minimum(m) { return Bs_SortedMapDict.minimum(m.data); } -function minNull(m) { - return Bs_SortedMapDict.minNull(m.data); +function minUndefined(m) { + return Bs_SortedMapDict.minUndefined(m.data); } function maximum(m) { return Bs_SortedMapDict.maximum(m.data); } -function maxNull(m) { - return Bs_SortedMapDict.maxNull(m.data); +function maxUndefined(m) { + return Bs_SortedMapDict.maxUndefined(m.data); } function get(map, x) { @@ -218,9 +218,9 @@ function get(map, x) { return Bs_SortedMapDict.get(map.data, x, X[/* cmp */0]); } -function getNull(map, x) { +function getUndefined(map, x) { var X = map.dict; - return Bs_SortedMapDict.getNull(map.data, x, X[/* cmp */0]); + return Bs_SortedMapDict.getUndefined(map.data, x, X[/* cmp */0]); } function getWithDefault(map, x, def) { @@ -273,15 +273,15 @@ exports.ofArray = ofArray; exports.keysToArray = keysToArray; exports.valuesToArray = valuesToArray; exports.minKey = minKey; -exports.minKeyNull = minKeyNull; +exports.minKeyUndefined = minKeyUndefined; exports.maxKey = maxKey; -exports.maxKeyNull = maxKeyNull; +exports.maxKeyUndefined = maxKeyUndefined; exports.minimum = minimum; -exports.minNull = minNull; +exports.minUndefined = minUndefined; exports.maximum = maximum; -exports.maxNull = maxNull; +exports.maxUndefined = maxUndefined; exports.get = get; -exports.getNull = getNull; +exports.getUndefined = getUndefined; exports.getWithDefault = getWithDefault; exports.getExn = getExn; exports.checkInvariantInternal = checkInvariantInternal; diff --git a/lib/js/bs_MapInt.js b/lib/js/bs_MapInt.js index 88b0462e63e..0721d88c9b8 100644 --- a/lib/js/bs_MapInt.js +++ b/lib/js/bs_MapInt.js @@ -188,29 +188,29 @@ var keysToArray = Bs_internalAVLtree.keysToArray0; var valuesToArray = Bs_internalAVLtree.valuesToArray0; -var minKey = Bs_internalAVLtree.minKeyOpt0; +var minKey = Bs_internalAVLtree.minKey0; -var minKeyNull = Bs_internalAVLtree.minKeyNull0; +var minKeyUndefined = Bs_internalAVLtree.minKeyUndefined0; -var maxKey = Bs_internalAVLtree.maxKeyOpt0; +var maxKey = Bs_internalAVLtree.maxKey0; -var maxKeyNull = Bs_internalAVLtree.maxKeyNull0; +var maxKeyUndefined = Bs_internalAVLtree.maxKeyUndefined0; -var minimum = Bs_internalAVLtree.minKVOpt0; +var minimum = Bs_internalAVLtree.minimum0; -var minNull = Bs_internalAVLtree.minKVNull0; +var minUndefined = Bs_internalAVLtree.minUndefined0; -var maximum = Bs_internalAVLtree.maxKVOpt0; +var maximum = Bs_internalAVLtree.maximum0; -var maxNull = Bs_internalAVLtree.maxKVNull0; +var maxUndefined = Bs_internalAVLtree.maxUndefined0; -var get = Bs_internalMapInt.findOpt; +var get = Bs_internalMapInt.get; -var getNull = Bs_internalMapInt.findNull; +var getUndefined = Bs_internalMapInt.getUndefined; -var getWithDefault = Bs_internalMapInt.findWithDefault; +var getWithDefault = Bs_internalMapInt.getWithDefault; -var getExn = Bs_internalMapInt.findExn; +var getExn = Bs_internalMapInt.getExn; var merge = Bs_internalMapInt.merge; @@ -242,15 +242,15 @@ exports.ofArray = ofArray; exports.keysToArray = keysToArray; exports.valuesToArray = valuesToArray; exports.minKey = minKey; -exports.minKeyNull = minKeyNull; +exports.minKeyUndefined = minKeyUndefined; exports.maxKey = maxKey; -exports.maxKeyNull = maxKeyNull; +exports.maxKeyUndefined = maxKeyUndefined; exports.minimum = minimum; -exports.minNull = minNull; +exports.minUndefined = minUndefined; exports.maximum = maximum; -exports.maxNull = maxNull; +exports.maxUndefined = maxUndefined; exports.get = get; -exports.getNull = getNull; +exports.getUndefined = getUndefined; exports.getWithDefault = getWithDefault; exports.getExn = getExn; exports.remove = remove; diff --git a/lib/js/bs_MapIntM.js b/lib/js/bs_MapIntM.js index 9f86054ca2d..d55fa746935 100644 --- a/lib/js/bs_MapIntM.js +++ b/lib/js/bs_MapIntM.js @@ -13,36 +13,36 @@ function isEmpty(m) { return Bs_internalAVLtree.isEmpty0(m.data); } -function minKeyNull(m) { - return Bs_internalAVLtree.minKeyNull0(m.data); +function minKeyUndefined(m) { + return Bs_internalAVLtree.minKeyUndefined0(m.data); } function minKey(m) { - return Bs_internalAVLtree.minKeyOpt0(m.data); + return Bs_internalAVLtree.minKey0(m.data); } -function maxKeyNull(m) { - return Bs_internalAVLtree.maxKeyNull0(m.data); +function maxKeyUndefined(m) { + return Bs_internalAVLtree.maxKeyUndefined0(m.data); } function maxKey(m) { - return Bs_internalAVLtree.maxKeyOpt0(m.data); + return Bs_internalAVLtree.maxKey0(m.data); } function minimum(m) { - return Bs_internalAVLtree.minKVOpt0(m.data); + return Bs_internalAVLtree.minimum0(m.data); } -function minNull(m) { - return Bs_internalAVLtree.minKVNull0(m.data); +function minUndefined(m) { + return Bs_internalAVLtree.minUndefined0(m.data); } function maximum(m) { - return Bs_internalAVLtree.maxKVOpt0(m.data); + return Bs_internalAVLtree.maximum0(m.data); } -function maxNull(m) { - return Bs_internalAVLtree.maxKVNull0(m.data); +function maxUndefined(m) { + return Bs_internalAVLtree.maxUndefined0(m.data); } function set(m, k, v) { @@ -275,19 +275,19 @@ function eq(d0, d1) { } function get(d, x) { - return Bs_internalMapInt.findOpt(d.data, x); + return Bs_internalMapInt.get(d.data, x); } -function getNull(d, x) { - return Bs_internalMapInt.findNull(d.data, x); +function getUndefined(d, x) { + return Bs_internalMapInt.getUndefined(d.data, x); } function getWithDefault(d, x, def) { - return Bs_internalMapInt.findWithDefault(d.data, x, def); + return Bs_internalMapInt.getWithDefault(d.data, x, def); } function getExn(d, x) { - return Bs_internalMapInt.findExn(d.data, x); + return Bs_internalMapInt.getExn(d.data, x); } exports.empty = empty; @@ -306,15 +306,15 @@ exports.ofArray = ofArray; exports.keysToArray = keysToArray; exports.valuesToArray = valuesToArray; exports.minKey = minKey; -exports.minKeyNull = minKeyNull; +exports.minKeyUndefined = minKeyUndefined; exports.maxKey = maxKey; -exports.maxKeyNull = maxKeyNull; +exports.maxKeyUndefined = maxKeyUndefined; exports.minimum = minimum; -exports.minNull = minNull; +exports.minUndefined = minUndefined; exports.maximum = maximum; -exports.maxNull = maxNull; +exports.maxUndefined = maxUndefined; exports.get = get; -exports.getNull = getNull; +exports.getUndefined = getUndefined; exports.getWithDefault = getWithDefault; exports.getExn = getExn; exports.checkInvariantInternal = checkInvariantInternal; diff --git a/lib/js/bs_MapM.js b/lib/js/bs_MapM.js index fc3b475476e..b0dae138436 100644 --- a/lib/js/bs_MapM.js +++ b/lib/js/bs_MapM.js @@ -165,35 +165,35 @@ function isEmpty(d) { } function minKey(m) { - return Bs_internalAVLtree.minKeyOpt0(m.data); + return Bs_internalAVLtree.minKey0(m.data); } -function minKeyNull(m) { - return Bs_internalAVLtree.minKeyNull0(m.data); +function minKeyUndefined(m) { + return Bs_internalAVLtree.minKeyUndefined0(m.data); } function maxKey(m) { - return Bs_internalAVLtree.maxKeyOpt0(m.data); + return Bs_internalAVLtree.maxKey0(m.data); } -function maxKeyNull(m) { - return Bs_internalAVLtree.maxKeyNull0(m.data); +function maxKeyUndefined(m) { + return Bs_internalAVLtree.maxKeyUndefined0(m.data); } function minimum(m) { - return Bs_internalAVLtree.minKVOpt0(m.data); + return Bs_internalAVLtree.minimum0(m.data); } -function minNull(m) { - return Bs_internalAVLtree.minKVNull0(m.data); +function minUndefined(m) { + return Bs_internalAVLtree.minUndefined0(m.data); } function maximum(m) { - return Bs_internalAVLtree.maxKVOpt0(m.data); + return Bs_internalAVLtree.maximum0(m.data); } -function maxNull(m) { - return Bs_internalAVLtree.maxKVNull0(m.data); +function maxUndefined(m) { + return Bs_internalAVLtree.maxUndefined0(m.data); } function forEach(d, f) { @@ -271,25 +271,25 @@ function mapWithKey(map, f) { function get(map, x) { var dict = map.dict; var map$1 = map.data; - return Bs_internalAVLtree.findOpt0(map$1, x, dict[/* cmp */0]); + return Bs_internalAVLtree.get0(map$1, x, dict[/* cmp */0]); } -function getNull(map, x) { +function getUndefined(map, x) { var dict = map.dict; var map$1 = map.data; - return Bs_internalAVLtree.findNull0(map$1, x, dict[/* cmp */0]); + return Bs_internalAVLtree.getUndefined0(map$1, x, dict[/* cmp */0]); } function getWithDefault(map, x, def) { var dict = map.dict; var map$1 = map.data; - return Bs_internalAVLtree.findWithDefault0(map$1, x, def, dict[/* cmp */0]); + return Bs_internalAVLtree.getWithDefault0(map$1, x, def, dict[/* cmp */0]); } function getExn(map, x) { var dict = map.dict; var map$1 = map.data; - return Bs_internalAVLtree.findExn0(map$1, x, dict[/* cmp */0]); + return Bs_internalAVLtree.getExn0(map$1, x, dict[/* cmp */0]); } function has(map, x) { @@ -354,15 +354,15 @@ exports.ofArray = ofArray; exports.keysToArray = keysToArray; exports.valuesToArray = valuesToArray; exports.minKey = minKey; -exports.minKeyNull = minKeyNull; +exports.minKeyUndefined = minKeyUndefined; exports.maxKey = maxKey; -exports.maxKeyNull = maxKeyNull; +exports.maxKeyUndefined = maxKeyUndefined; exports.minimum = minimum; -exports.minNull = minNull; +exports.minUndefined = minUndefined; exports.maximum = maximum; -exports.maxNull = maxNull; +exports.maxUndefined = maxUndefined; exports.get = get; -exports.getNull = getNull; +exports.getUndefined = getUndefined; exports.getWithDefault = getWithDefault; exports.getExn = getExn; exports.checkInvariantInternal = checkInvariantInternal; diff --git a/lib/js/bs_MapString.js b/lib/js/bs_MapString.js index b56325d703d..4c2dddc8473 100644 --- a/lib/js/bs_MapString.js +++ b/lib/js/bs_MapString.js @@ -188,29 +188,29 @@ var keysToArray = Bs_internalAVLtree.keysToArray0; var valuesToArray = Bs_internalAVLtree.valuesToArray0; -var minKey = Bs_internalAVLtree.minKeyOpt0; +var minKey = Bs_internalAVLtree.minKey0; -var minKeyNull = Bs_internalAVLtree.minKeyNull0; +var minKeyUndefined = Bs_internalAVLtree.minKeyUndefined0; -var maxKey = Bs_internalAVLtree.maxKeyOpt0; +var maxKey = Bs_internalAVLtree.maxKey0; -var maxKeyNull = Bs_internalAVLtree.maxKeyNull0; +var maxKeyUndefined = Bs_internalAVLtree.maxKeyUndefined0; -var minimum = Bs_internalAVLtree.minKVOpt0; +var minimum = Bs_internalAVLtree.minimum0; -var minNull = Bs_internalAVLtree.minKVNull0; +var minUndefined = Bs_internalAVLtree.minUndefined0; -var maximum = Bs_internalAVLtree.maxKVOpt0; +var maximum = Bs_internalAVLtree.maximum0; -var maxNull = Bs_internalAVLtree.maxKVNull0; +var maxUndefined = Bs_internalAVLtree.maxUndefined0; -var get = Bs_internalMapString.findOpt; +var get = Bs_internalMapString.get; -var getNull = Bs_internalMapString.findNull; +var getUndefined = Bs_internalMapString.getUndefined; -var getWithDefault = Bs_internalMapString.findWithDefault; +var getWithDefault = Bs_internalMapString.getWithDefault; -var getExn = Bs_internalMapString.findExn; +var getExn = Bs_internalMapString.getExn; var merge = Bs_internalMapString.merge; @@ -242,15 +242,15 @@ exports.ofArray = ofArray; exports.keysToArray = keysToArray; exports.valuesToArray = valuesToArray; exports.minKey = minKey; -exports.minKeyNull = minKeyNull; +exports.minKeyUndefined = minKeyUndefined; exports.maxKey = maxKey; -exports.maxKeyNull = maxKeyNull; +exports.maxKeyUndefined = maxKeyUndefined; exports.minimum = minimum; -exports.minNull = minNull; +exports.minUndefined = minUndefined; exports.maximum = maximum; -exports.maxNull = maxNull; +exports.maxUndefined = maxUndefined; exports.get = get; -exports.getNull = getNull; +exports.getUndefined = getUndefined; exports.getWithDefault = getWithDefault; exports.getExn = getExn; exports.remove = remove; diff --git a/lib/js/bs_MapStringM.js b/lib/js/bs_MapStringM.js index 7dbafc37b66..341ab6692b5 100644 --- a/lib/js/bs_MapStringM.js +++ b/lib/js/bs_MapStringM.js @@ -13,36 +13,36 @@ function isEmpty(m) { return Bs_internalAVLtree.isEmpty0(m.data); } -function minKeyNull(m) { - return Bs_internalAVLtree.minKeyNull0(m.data); +function minKeyUndefined(m) { + return Bs_internalAVLtree.minKeyUndefined0(m.data); } function minKey(m) { - return Bs_internalAVLtree.minKeyOpt0(m.data); + return Bs_internalAVLtree.minKey0(m.data); } -function maxKeyNull(m) { - return Bs_internalAVLtree.maxKeyNull0(m.data); +function maxKeyUndefined(m) { + return Bs_internalAVLtree.maxKeyUndefined0(m.data); } function maxKey(m) { - return Bs_internalAVLtree.maxKeyOpt0(m.data); + return Bs_internalAVLtree.maxKey0(m.data); } function minimum(m) { - return Bs_internalAVLtree.minKVOpt0(m.data); + return Bs_internalAVLtree.minimum0(m.data); } -function minNull(m) { - return Bs_internalAVLtree.minKVNull0(m.data); +function minUndefined(m) { + return Bs_internalAVLtree.minUndefined0(m.data); } function maximum(m) { - return Bs_internalAVLtree.maxKVOpt0(m.data); + return Bs_internalAVLtree.maximum0(m.data); } -function maxNull(m) { - return Bs_internalAVLtree.maxKVNull0(m.data); +function maxUndefined(m) { + return Bs_internalAVLtree.maxUndefined0(m.data); } function set(m, k, v) { @@ -275,19 +275,19 @@ function eq(d0, d1) { } function get(d, x) { - return Bs_internalMapString.findOpt(d.data, x); + return Bs_internalMapString.get(d.data, x); } -function getNull(d, x) { - return Bs_internalMapString.findNull(d.data, x); +function getUndefined(d, x) { + return Bs_internalMapString.getUndefined(d.data, x); } function getWithDefault(d, x, def) { - return Bs_internalMapString.findWithDefault(d.data, x, def); + return Bs_internalMapString.getWithDefault(d.data, x, def); } function getExn(d, x) { - return Bs_internalMapString.findExn(d.data, x); + return Bs_internalMapString.getExn(d.data, x); } exports.empty = empty; @@ -306,15 +306,15 @@ exports.ofArray = ofArray; exports.keysToArray = keysToArray; exports.valuesToArray = valuesToArray; exports.minKey = minKey; -exports.minKeyNull = minKeyNull; +exports.minKeyUndefined = minKeyUndefined; exports.maxKey = maxKey; -exports.maxKeyNull = maxKeyNull; +exports.maxKeyUndefined = maxKeyUndefined; exports.minimum = minimum; -exports.minNull = minNull; +exports.minUndefined = minUndefined; exports.maximum = maximum; -exports.maxNull = maxNull; +exports.maxUndefined = maxUndefined; exports.get = get; -exports.getNull = getNull; +exports.getUndefined = getUndefined; exports.getWithDefault = getWithDefault; exports.getExn = getExn; exports.checkInvariantInternal = checkInvariantInternal; diff --git a/lib/js/bs_Set.js b/lib/js/bs_Set.js index e2227dc3431..f905e2a8270 100644 --- a/lib/js/bs_Set.js +++ b/lib/js/bs_Set.js @@ -176,16 +176,16 @@ function minimum(m) { return Bs_SortedSetDict.minimum(m.data); } -function minNull(m) { - return Bs_SortedSetDict.minNull(m.data); +function minUndefined(m) { + return Bs_SortedSetDict.minUndefined(m.data); } function maximum(m) { return Bs_SortedSetDict.maximum(m.data); } -function maxNull(m) { - return Bs_SortedSetDict.maxNull(m.data); +function maxUndefined(m) { + return Bs_SortedSetDict.maxUndefined(m.data); } function get(m, e) { @@ -193,9 +193,9 @@ function get(m, e) { return Bs_SortedSetDict.get(m.data, e, M[/* cmp */0]); } -function getNull(m, e) { +function getUndefined(m, e) { var M = m.dict; - return Bs_SortedSetDict.getNull(m.data, e, M[/* cmp */0]); + return Bs_SortedSetDict.getUndefined(m.data, e, M[/* cmp */0]); } function getExn(m, e) { @@ -259,11 +259,11 @@ exports.size = size; exports.toList = toList; exports.toArray = toArray; exports.minimum = minimum; -exports.minNull = minNull; +exports.minUndefined = minUndefined; exports.maximum = maximum; -exports.maxNull = maxNull; +exports.maxUndefined = maxUndefined; exports.get = get; -exports.getNull = getNull; +exports.getUndefined = getUndefined; exports.getExn = getExn; exports.split = split; exports.checkInvariantInternal = checkInvariantInternal; diff --git a/lib/js/bs_SetInt.js b/lib/js/bs_SetInt.js index 185c2c37f46..8ffeaa311f2 100644 --- a/lib/js/bs_SetInt.js +++ b/lib/js/bs_SetInt.js @@ -293,19 +293,19 @@ var toList = Bs_internalAVLset.toList0; var toArray = Bs_internalAVLset.toArray0; -var minimum = Bs_internalAVLset.minOpt0; +var minimum = Bs_internalAVLset.minimum0; -var minNull = Bs_internalAVLset.minNull0; +var minUndefined = Bs_internalAVLset.minUndefined0; -var maximum = Bs_internalAVLset.maxOpt0; +var maximum = Bs_internalAVLset.maximum0; -var maxNull = Bs_internalAVLset.maxNull0; +var maxUndefined = Bs_internalAVLset.maxUndefined0; -var get = Bs_internalSetInt.findOpt; +var get = Bs_internalSetInt.get; -var getNull = Bs_internalSetInt.findNull; +var getUndefined = Bs_internalSetInt.getUndefined; -var getExn = Bs_internalSetInt.findExn; +var getExn = Bs_internalSetInt.getExn; var checkInvariantInternal = Bs_internalAVLset.checkInvariantInternal; @@ -334,11 +334,11 @@ exports.size = size; exports.toList = toList; exports.toArray = toArray; exports.minimum = minimum; -exports.minNull = minNull; +exports.minUndefined = minUndefined; exports.maximum = maximum; -exports.maxNull = maxNull; +exports.maxUndefined = maxUndefined; exports.get = get; -exports.getNull = getNull; +exports.getUndefined = getUndefined; exports.getExn = getExn; exports.split = split; exports.checkInvariantInternal = checkInvariantInternal; diff --git a/lib/js/bs_SetIntM.js b/lib/js/bs_SetIntM.js index c32cfbed72e..d8fb24f37f6 100644 --- a/lib/js/bs_SetIntM.js +++ b/lib/js/bs_SetIntM.js @@ -67,19 +67,19 @@ function isEmpty(d) { } function minimum(d) { - return Bs_internalAVLset.minOpt0(d.data); + return Bs_internalAVLset.minimum0(d.data); } -function minNull(d) { - return Bs_internalAVLset.minNull0(d.data); +function minUndefined(d) { + return Bs_internalAVLset.minUndefined0(d.data); } function maximum(d) { - return Bs_internalAVLset.maxOpt0(d.data); + return Bs_internalAVLset.maximum0(d.data); } -function maxNull(d) { - return Bs_internalAVLset.maxNull0(d.data); +function maxUndefined(d) { + return Bs_internalAVLset.maxUndefined0(d.data); } function forEach(d, f) { @@ -306,15 +306,15 @@ function eq(d0, d1) { } function get(d, x) { - return Bs_internalSetInt.findOpt(d.data, x); + return Bs_internalSetInt.get(d.data, x); } -function getNull(d, x) { - return Bs_internalSetInt.findNull(d.data, x); +function getUndefined(d, x) { + return Bs_internalSetInt.getUndefined(d.data, x); } function getExn(d, x) { - return Bs_internalSetInt.findExn(d.data, x); + return Bs_internalSetInt.getExn(d.data, x); } function split(d, key) { @@ -494,11 +494,11 @@ exports.size = size; exports.toList = toList; exports.toArray = toArray; exports.minimum = minimum; -exports.minNull = minNull; +exports.minUndefined = minUndefined; exports.maximum = maximum; -exports.maxNull = maxNull; +exports.maxUndefined = maxUndefined; exports.get = get; -exports.getNull = getNull; +exports.getUndefined = getUndefined; exports.getExn = getExn; exports.split = split; exports.checkInvariantInternal = checkInvariantInternal; diff --git a/lib/js/bs_SetM.js b/lib/js/bs_SetM.js index 7f8ede1305f..30b787590ab 100644 --- a/lib/js/bs_SetM.js +++ b/lib/js/bs_SetM.js @@ -260,19 +260,19 @@ function isEmpty(d) { } function minimum(d) { - return Bs_internalAVLset.minOpt0(d.data); + return Bs_internalAVLset.minimum0(d.data); } -function minNull(d) { - return Bs_internalAVLset.minNull0(d.data); +function minUndefined(d) { + return Bs_internalAVLset.minUndefined0(d.data); } function maximum(d) { - return Bs_internalAVLset.maxOpt0(d.data); + return Bs_internalAVLset.maximum0(d.data); } -function maxNull(d) { - return Bs_internalAVLset.maxNull0(d.data); +function maxUndefined(d) { + return Bs_internalAVLset.maxUndefined0(d.data); } function forEach(d, f) { @@ -326,17 +326,17 @@ function eq(d0, d1) { function get(d, x) { var M = d.dict; - return Bs_internalAVLset.findOpt0(d.data, x, M[/* cmp */0]); + return Bs_internalAVLset.get0(d.data, x, M[/* cmp */0]); } -function getNull(d, x) { +function getUndefined(d, x) { var M = d.dict; - return Bs_internalAVLset.findNull0(d.data, x, M[/* cmp */0]); + return Bs_internalAVLset.getUndefined0(d.data, x, M[/* cmp */0]); } function getExn(d, x) { var dict = d.dict; - return Bs_internalAVLset.findExn0(d.data, x, dict[/* cmp */0]); + return Bs_internalAVLset.getExn0(d.data, x, dict[/* cmp */0]); } function has(d, x) { @@ -543,11 +543,11 @@ exports.size = size; exports.toList = toList; exports.toArray = toArray; exports.minimum = minimum; -exports.minNull = minNull; +exports.minUndefined = minUndefined; exports.maximum = maximum; -exports.maxNull = maxNull; +exports.maxUndefined = maxUndefined; exports.get = get; -exports.getNull = getNull; +exports.getUndefined = getUndefined; exports.getExn = getExn; exports.split = split; exports.checkInvariantInternal = checkInvariantInternal; diff --git a/lib/js/bs_SetString.js b/lib/js/bs_SetString.js index ab3182c7df3..610ed566805 100644 --- a/lib/js/bs_SetString.js +++ b/lib/js/bs_SetString.js @@ -293,19 +293,19 @@ var toList = Bs_internalAVLset.toList0; var toArray = Bs_internalAVLset.toArray0; -var minimum = Bs_internalAVLset.minOpt0; +var minimum = Bs_internalAVLset.minimum0; -var minNull = Bs_internalAVLset.minNull0; +var minUndefined = Bs_internalAVLset.minUndefined0; -var maximum = Bs_internalAVLset.maxOpt0; +var maximum = Bs_internalAVLset.maximum0; -var maxNull = Bs_internalAVLset.maxNull0; +var maxUndefined = Bs_internalAVLset.maxUndefined0; -var get = Bs_internalSetString.findOpt; +var get = Bs_internalSetString.get; -var getNull = Bs_internalSetString.findNull; +var getUndefined = Bs_internalSetString.getUndefined; -var getExn = Bs_internalSetString.findExn; +var getExn = Bs_internalSetString.getExn; var checkInvariantInternal = Bs_internalAVLset.checkInvariantInternal; @@ -334,11 +334,11 @@ exports.size = size; exports.toList = toList; exports.toArray = toArray; exports.minimum = minimum; -exports.minNull = minNull; +exports.minUndefined = minUndefined; exports.maximum = maximum; -exports.maxNull = maxNull; +exports.maxUndefined = maxUndefined; exports.get = get; -exports.getNull = getNull; +exports.getUndefined = getUndefined; exports.getExn = getExn; exports.split = split; exports.checkInvariantInternal = checkInvariantInternal; diff --git a/lib/js/bs_SetStringM.js b/lib/js/bs_SetStringM.js index d655afbf312..c5d90f495b8 100644 --- a/lib/js/bs_SetStringM.js +++ b/lib/js/bs_SetStringM.js @@ -67,19 +67,19 @@ function isEmpty(d) { } function minimum(d) { - return Bs_internalAVLset.minOpt0(d.data); + return Bs_internalAVLset.minimum0(d.data); } -function minNull(d) { - return Bs_internalAVLset.minNull0(d.data); +function minUndefined(d) { + return Bs_internalAVLset.minUndefined0(d.data); } function maximum(d) { - return Bs_internalAVLset.maxOpt0(d.data); + return Bs_internalAVLset.maximum0(d.data); } -function maxNull(d) { - return Bs_internalAVLset.maxNull0(d.data); +function maxUndefined(d) { + return Bs_internalAVLset.maxUndefined0(d.data); } function forEach(d, f) { @@ -306,15 +306,15 @@ function eq(d0, d1) { } function get(d, x) { - return Bs_internalSetString.findOpt(d.data, x); + return Bs_internalSetString.get(d.data, x); } -function getNull(d, x) { - return Bs_internalSetString.findNull(d.data, x); +function getUndefined(d, x) { + return Bs_internalSetString.getUndefined(d.data, x); } function getExn(d, x) { - return Bs_internalSetString.findExn(d.data, x); + return Bs_internalSetString.getExn(d.data, x); } function split(d, key) { @@ -494,11 +494,11 @@ exports.size = size; exports.toList = toList; exports.toArray = toArray; exports.minimum = minimum; -exports.minNull = minNull; +exports.minUndefined = minUndefined; exports.maximum = maximum; -exports.maxNull = maxNull; +exports.maxUndefined = maxUndefined; exports.get = get; -exports.getNull = getNull; +exports.getUndefined = getUndefined; exports.getExn = getExn; exports.split = split; exports.checkInvariantInternal = checkInvariantInternal; diff --git a/lib/js/bs_SortedMapDict.js b/lib/js/bs_SortedMapDict.js index 995f637f64a..8b1b1918083 100644 --- a/lib/js/bs_SortedMapDict.js +++ b/lib/js/bs_SortedMapDict.js @@ -299,29 +299,29 @@ var keysToArray = Bs_internalAVLtree.keysToArray0; var valuesToArray = Bs_internalAVLtree.valuesToArray0; -var minKey = Bs_internalAVLtree.minKeyOpt0; +var minKey = Bs_internalAVLtree.minKey0; -var minKeyNull = Bs_internalAVLtree.minKeyNull0; +var minKeyUndefined = Bs_internalAVLtree.minKeyUndefined0; -var maxKey = Bs_internalAVLtree.maxKeyOpt0; +var maxKey = Bs_internalAVLtree.maxKey0; -var maxKeyNull = Bs_internalAVLtree.maxKeyNull0; +var maxKeyUndefined = Bs_internalAVLtree.maxKeyUndefined0; -var minimum = Bs_internalAVLtree.minKVOpt0; +var minimum = Bs_internalAVLtree.minimum0; -var minNull = Bs_internalAVLtree.minKVNull0; +var minUndefined = Bs_internalAVLtree.minUndefined0; -var maximum = Bs_internalAVLtree.maxKVOpt0; +var maximum = Bs_internalAVLtree.maximum0; -var maxNull = Bs_internalAVLtree.maxKVNull0; +var maxUndefined = Bs_internalAVLtree.maxUndefined0; -var get = Bs_internalAVLtree.findOpt0; +var get = Bs_internalAVLtree.get0; -var getNull = Bs_internalAVLtree.findNull0; +var getUndefined = Bs_internalAVLtree.getUndefined0; -var getWithDefault = Bs_internalAVLtree.findWithDefault0; +var getWithDefault = Bs_internalAVLtree.getWithDefault0; -var getExn = Bs_internalAVLtree.findExn0; +var getExn = Bs_internalAVLtree.getExn0; var checkInvariantInternal = Bs_internalAVLtree.checkInvariantInternal; @@ -349,15 +349,15 @@ exports.ofArray = ofArray; exports.keysToArray = keysToArray; exports.valuesToArray = valuesToArray; exports.minKey = minKey; -exports.minKeyNull = minKeyNull; +exports.minKeyUndefined = minKeyUndefined; exports.maxKey = maxKey; -exports.maxKeyNull = maxKeyNull; +exports.maxKeyUndefined = maxKeyUndefined; exports.minimum = minimum; -exports.minNull = minNull; +exports.minUndefined = minUndefined; exports.maximum = maximum; -exports.maxNull = maxNull; +exports.maxUndefined = maxUndefined; exports.get = get; -exports.getNull = getNull; +exports.getUndefined = getUndefined; exports.getWithDefault = getWithDefault; exports.getExn = getExn; exports.checkInvariantInternal = checkInvariantInternal; diff --git a/lib/js/bs_SortedSetDict.js b/lib/js/bs_SortedSetDict.js index b2d316e3941..833d8f2a5ee 100644 --- a/lib/js/bs_SortedSetDict.js +++ b/lib/js/bs_SortedSetDict.js @@ -300,19 +300,19 @@ var toList = Bs_internalAVLset.toList0; var toArray = Bs_internalAVLset.toArray0; -var minimum = Bs_internalAVLset.minOpt0; +var minimum = Bs_internalAVLset.minimum0; -var minNull = Bs_internalAVLset.minNull0; +var minUndefined = Bs_internalAVLset.minUndefined0; -var maximum = Bs_internalAVLset.maxOpt0; +var maximum = Bs_internalAVLset.maximum0; -var maxNull = Bs_internalAVLset.maxNull0; +var maxUndefined = Bs_internalAVLset.maxUndefined0; -var get = Bs_internalAVLset.findOpt0; +var get = Bs_internalAVLset.get0; -var getNull = Bs_internalAVLset.findNull0; +var getUndefined = Bs_internalAVLset.getUndefined0; -var getExn = Bs_internalAVLset.findExn0; +var getExn = Bs_internalAVLset.getExn0; var checkInvariantInternal = Bs_internalAVLset.checkInvariantInternal; @@ -341,11 +341,11 @@ exports.size = size; exports.toList = toList; exports.toArray = toArray; exports.minimum = minimum; -exports.minNull = minNull; +exports.minUndefined = minUndefined; exports.maximum = maximum; -exports.maxNull = maxNull; +exports.maxUndefined = maxUndefined; exports.get = get; -exports.getNull = getNull; +exports.getUndefined = getUndefined; exports.getExn = getExn; exports.split = split; exports.checkInvariantInternal = checkInvariantInternal; diff --git a/lib/js/bs_Stack.js b/lib/js/bs_Stack.js index 4ea8dcc1d91..295345bdc7a 100644 --- a/lib/js/bs_Stack.js +++ b/lib/js/bs_Stack.js @@ -26,16 +26,16 @@ function push(s, x) { return /* () */0; } -function topNull(s) { +function topUndefined(s) { var match = s.root; if (match !== null) { return match.head; } else { - return null; + return undefined; } } -function topOpt(s) { +function top(s) { var match = s.root; if (match !== null) { return /* Some */[match.head]; @@ -48,17 +48,17 @@ function isEmpty(s) { return +(s.root === null); } -function popNull(s) { +function popUndefined(s) { var match = s.root; if (match !== null) { s.root = match.tail; return match.head; } else { - return null; + return undefined; } } -function popOpt(s) { +function pop(s) { var match = s.root; if (match !== null) { s.root = match.tail; @@ -68,7 +68,7 @@ function popOpt(s) { } } -function length(s) { +function size(s) { var match = s.root; if (match !== null) { var _x = match; @@ -91,7 +91,7 @@ function length(s) { } } -function iter(s, f) { +function forEach(s, f) { var _s = s.root; var f$1 = f; while(true) { @@ -122,12 +122,12 @@ exports.create = create; exports.clear = clear; exports.copy = copy; exports.push = push; -exports.popNull = popNull; -exports.popOpt = popOpt; -exports.topNull = topNull; -exports.topOpt = topOpt; +exports.popUndefined = popUndefined; +exports.pop = pop; +exports.topUndefined = topUndefined; +exports.top = top; exports.isEmpty = isEmpty; -exports.length = length; -exports.iter = iter; +exports.size = size; +exports.forEach = forEach; exports.dynamicPopIter = dynamicPopIter; /* No side effect */ diff --git a/lib/js/bs_internalAVLset.js b/lib/js/bs_internalAVLset.js index 396c88069c5..eb94a80fc1a 100644 --- a/lib/js/bs_internalAVLset.js +++ b/lib/js/bs_internalAVLset.js @@ -108,7 +108,7 @@ function min0Aux(_n) { }; } -function minOpt0(n) { +function minimum0(n) { if (n !== null) { return /* Some */[min0Aux(n)]; } else { @@ -116,11 +116,11 @@ function minOpt0(n) { } } -function minNull0(n) { +function minUndefined0(n) { if (n !== null) { return min0Aux(n); } else { - return null; + return undefined; } } @@ -138,7 +138,7 @@ function max0Aux(_n) { }; } -function maxOpt0(n) { +function maximum0(n) { if (n !== null) { return /* Some */[max0Aux(n)]; } else { @@ -146,11 +146,11 @@ function maxOpt0(n) { } } -function maxNull0(n) { +function maxUndefined0(n) { if (n !== null) { return max0Aux(n); } else { - return null; + return undefined; } } @@ -732,7 +732,7 @@ function subset0(_s1, _s2, cmp) { }; } -function findOpt0(_n, x, cmp) { +function get0(_n, x, cmp) { while(true) { var n = _n; if (n !== null) { @@ -751,7 +751,7 @@ function findOpt0(_n, x, cmp) { }; } -function findNull0(_n, x, cmp) { +function getUndefined0(_n, x, cmp) { while(true) { var n = _n; if (n !== null) { @@ -765,12 +765,12 @@ function findNull0(_n, x, cmp) { return v; } } else { - return null; + return undefined; } }; } -function findExn0(_n, x, cmp) { +function getExn0(_n, x, cmp) { while(true) { var n = _n; if (n !== null) { @@ -784,7 +784,7 @@ function findExn0(_n, x, cmp) { return v; } } else { - throw new Error("findExn0"); + throw new Error("getExn0"); } }; } @@ -933,10 +933,10 @@ exports.copy = copy; exports.create = create; exports.bal = bal; exports.singleton0 = singleton0; -exports.minOpt0 = minOpt0; -exports.minNull0 = minNull0; -exports.maxOpt0 = maxOpt0; -exports.maxNull0 = maxNull0; +exports.minimum0 = minimum0; +exports.minUndefined0 = minUndefined0; +exports.maximum0 = maximum0; +exports.maxUndefined0 = maxUndefined0; exports.removeMinAuxWithRef = removeMinAuxWithRef; exports.empty0 = empty0; exports.isEmpty0 = isEmpty0; @@ -964,9 +964,9 @@ exports.mem0 = mem0; exports.cmp0 = cmp0; exports.eq0 = eq0; exports.subset0 = subset0; -exports.findOpt0 = findOpt0; -exports.findNull0 = findNull0; -exports.findExn0 = findExn0; +exports.get0 = get0; +exports.getUndefined0 = getUndefined0; +exports.getExn0 = getExn0; exports.ofArray0 = ofArray0; exports.addMutate = addMutate; exports.balMutate = balMutate; diff --git a/lib/js/bs_internalAVLtree.js b/lib/js/bs_internalAVLtree.js index ffc1527dabd..c6f37a1fb12 100644 --- a/lib/js/bs_internalAVLtree.js +++ b/lib/js/bs_internalAVLtree.js @@ -130,7 +130,7 @@ function minKey0Aux(_n) { }; } -function minKeyOpt0(n) { +function minKey0(n) { if (n !== null) { return /* Some */[minKey0Aux(n)]; } else { @@ -138,11 +138,11 @@ function minKeyOpt0(n) { } } -function minKeyNull0(n) { +function minKeyUndefined0(n) { if (n !== null) { return minKey0Aux(n); } else { - return null; + return undefined; } } @@ -160,7 +160,7 @@ function maxKey0Aux(_n) { }; } -function maxKeyOpt0(n) { +function maxKey0(n) { if (n !== null) { return /* Some */[maxKey0Aux(n)]; } else { @@ -168,11 +168,11 @@ function maxKeyOpt0(n) { } } -function maxKeyNull0(n) { +function maxKeyUndefined0(n) { if (n !== null) { return maxKey0Aux(n); } else { - return null; + return undefined; } } @@ -193,7 +193,7 @@ function minKV0Aux(_n) { }; } -function minKVOpt0(n) { +function minimum0(n) { if (n !== null) { return /* Some */[minKV0Aux(n)]; } else { @@ -201,11 +201,11 @@ function minKVOpt0(n) { } } -function minKVNull0(n) { +function minUndefined0(n) { if (n !== null) { return minKV0Aux(n); } else { - return null; + return undefined; } } @@ -226,7 +226,7 @@ function maxKV0Aux(_n) { }; } -function maxKVOpt0(n) { +function maximum0(n) { if (n !== null) { return /* Some */[maxKV0Aux(n)]; } else { @@ -234,11 +234,11 @@ function maxKVOpt0(n) { } } -function maxKVNull0(n) { +function maxUndefined0(n) { if (n !== null) { return maxKV0Aux(n); } else { - return null; + return undefined; } } @@ -863,7 +863,7 @@ function eq0(s1, s2, kcmp, veq) { } } -function findOpt0(_n, x, cmp) { +function get0(_n, x, cmp) { while(true) { var n = _n; if (n !== null) { @@ -882,7 +882,7 @@ function findOpt0(_n, x, cmp) { }; } -function findNull0(_n, x, cmp) { +function getUndefined0(_n, x, cmp) { while(true) { var n = _n; if (n !== null) { @@ -896,12 +896,12 @@ function findNull0(_n, x, cmp) { return n.value; } } else { - return null; + return undefined; } }; } -function findExn0(_n, x, cmp) { +function getExn0(_n, x, cmp) { while(true) { var n = _n; if (n !== null) { @@ -915,12 +915,12 @@ function findExn0(_n, x, cmp) { return n.value; } } else { - throw new Error("findExn0"); + throw new Error("getExn0"); } }; } -function findWithDefault0(_n, x, def, cmp) { +function getWithDefault0(_n, x, def, cmp) { while(true) { var n = _n; if (n !== null) { @@ -1105,14 +1105,14 @@ exports.create = create; exports.bal = bal; exports.singleton0 = singleton0; exports.updateValue = updateValue; -exports.minKeyOpt0 = minKeyOpt0; -exports.minKeyNull0 = minKeyNull0; -exports.maxKeyOpt0 = maxKeyOpt0; -exports.maxKeyNull0 = maxKeyNull0; -exports.minKVOpt0 = minKVOpt0; -exports.minKVNull0 = minKVNull0; -exports.maxKVOpt0 = maxKVOpt0; -exports.maxKVNull0 = maxKVNull0; +exports.minKey0 = minKey0; +exports.minKeyUndefined0 = minKeyUndefined0; +exports.maxKey0 = maxKey0; +exports.maxKeyUndefined0 = maxKeyUndefined0; +exports.minimum0 = minimum0; +exports.minUndefined0 = minUndefined0; +exports.maximum0 = maximum0; +exports.maxUndefined0 = maxUndefined0; exports.removeMinAuxWithRef = removeMinAuxWithRef; exports.empty0 = empty0; exports.isEmpty0 = isEmpty0; @@ -1142,10 +1142,10 @@ exports.ofSortedArrayRevAux = ofSortedArrayRevAux; exports.ofSortedArrayUnsafe0 = ofSortedArrayUnsafe0; exports.cmp0 = cmp0; exports.eq0 = eq0; -exports.findOpt0 = findOpt0; -exports.findNull0 = findNull0; -exports.findWithDefault0 = findWithDefault0; -exports.findExn0 = findExn0; +exports.get0 = get0; +exports.getUndefined0 = getUndefined0; +exports.getWithDefault0 = getWithDefault0; +exports.getExn0 = getExn0; exports.mem0 = mem0; exports.ofArray0 = ofArray0; exports.updateMutate = updateMutate; diff --git a/lib/js/bs_internalMapInt.js b/lib/js/bs_internalMapInt.js index fa888966092..50d251f9068 100644 --- a/lib/js/bs_internalMapInt.js +++ b/lib/js/bs_internalMapInt.js @@ -22,7 +22,7 @@ function add(t, x, data) { } } -function findOpt(_n, x) { +function get(_n, x) { while(true) { var n = _n; if (n !== null) { @@ -40,7 +40,7 @@ function findOpt(_n, x) { }; } -function findNull(_n, x) { +function getUndefined(_n, x) { while(true) { var n = _n; if (n !== null) { @@ -53,12 +53,12 @@ function findNull(_n, x) { } } else { - return null; + return undefined; } }; } -function findExn(_n, x) { +function getExn(_n, x) { while(true) { var n = _n; if (n !== null) { @@ -71,12 +71,12 @@ function findExn(_n, x) { } } else { - throw new Error("findExn"); + throw new Error("getExn"); } }; } -function findWithDefault(_n, x, def) { +function getWithDefault(_n, x, def) { while(true) { var n = _n; if (n !== null) { @@ -363,10 +363,10 @@ exports.N = N; exports.A = A; exports.S = S; exports.add = add; -exports.findOpt = findOpt; -exports.findNull = findNull; -exports.findExn = findExn; -exports.findWithDefault = findWithDefault; +exports.get = get; +exports.getUndefined = getUndefined; +exports.getExn = getExn; +exports.getWithDefault = getWithDefault; exports.mem = mem; exports.remove = remove; exports.splitAux = splitAux; diff --git a/lib/js/bs_internalMapString.js b/lib/js/bs_internalMapString.js index 6e32e3ed10d..c8724945a86 100644 --- a/lib/js/bs_internalMapString.js +++ b/lib/js/bs_internalMapString.js @@ -22,7 +22,7 @@ function add(t, x, data) { } } -function findOpt(_n, x) { +function get(_n, x) { while(true) { var n = _n; if (n !== null) { @@ -40,7 +40,7 @@ function findOpt(_n, x) { }; } -function findNull(_n, x) { +function getUndefined(_n, x) { while(true) { var n = _n; if (n !== null) { @@ -53,12 +53,12 @@ function findNull(_n, x) { } } else { - return null; + return undefined; } }; } -function findExn(_n, x) { +function getExn(_n, x) { while(true) { var n = _n; if (n !== null) { @@ -71,12 +71,12 @@ function findExn(_n, x) { } } else { - throw new Error("findExn"); + throw new Error("getExn"); } }; } -function findWithDefault(_n, x, def) { +function getWithDefault(_n, x, def) { while(true) { var n = _n; if (n !== null) { @@ -363,10 +363,10 @@ exports.N = N; exports.A = A; exports.S = S; exports.add = add; -exports.findOpt = findOpt; -exports.findNull = findNull; -exports.findExn = findExn; -exports.findWithDefault = findWithDefault; +exports.get = get; +exports.getUndefined = getUndefined; +exports.getExn = getExn; +exports.getWithDefault = getWithDefault; exports.mem = mem; exports.remove = remove; exports.splitAux = splitAux; diff --git a/lib/js/bs_internalSetInt.js b/lib/js/bs_internalSetInt.js index 90abcf668bd..868f0e352d6 100644 --- a/lib/js/bs_internalSetInt.js +++ b/lib/js/bs_internalSetInt.js @@ -111,7 +111,7 @@ function subset(_s1, _s2) { }; } -function findOpt(_n, x) { +function get(_n, x) { while(true) { var n = _n; if (n !== null) { @@ -129,7 +129,7 @@ function findOpt(_n, x) { }; } -function findNull(_n, x) { +function getUndefined(_n, x) { while(true) { var n = _n; if (n !== null) { @@ -142,12 +142,12 @@ function findNull(_n, x) { } } else { - return null; + return undefined; } }; } -function findExn(_n, x) { +function getExn(_n, x) { while(true) { var n = _n; if (n !== null) { @@ -160,7 +160,7 @@ function findExn(_n, x) { } } else { - throw new Error("findExn"); + throw new Error("getExn"); } }; } @@ -219,9 +219,9 @@ exports.compareAux = compareAux; exports.cmp = cmp; exports.eq = eq; exports.subset = subset; -exports.findOpt = findOpt; -exports.findNull = findNull; -exports.findExn = findExn; +exports.get = get; +exports.getUndefined = getUndefined; +exports.getExn = getExn; exports.addMutate = addMutate; exports.ofArray = ofArray; /* No side effect */ diff --git a/lib/js/bs_internalSetString.js b/lib/js/bs_internalSetString.js index 1f1cd0c2055..2e53cd018b6 100644 --- a/lib/js/bs_internalSetString.js +++ b/lib/js/bs_internalSetString.js @@ -111,7 +111,7 @@ function subset(_s1, _s2) { }; } -function findOpt(_n, x) { +function get(_n, x) { while(true) { var n = _n; if (n !== null) { @@ -129,7 +129,7 @@ function findOpt(_n, x) { }; } -function findNull(_n, x) { +function getUndefined(_n, x) { while(true) { var n = _n; if (n !== null) { @@ -142,12 +142,12 @@ function findNull(_n, x) { } } else { - return null; + return undefined; } }; } -function findExn(_n, x) { +function getExn(_n, x) { while(true) { var n = _n; if (n !== null) { @@ -160,7 +160,7 @@ function findExn(_n, x) { } } else { - throw new Error("findExn"); + throw new Error("getExn"); } }; } @@ -219,9 +219,9 @@ exports.compareAux = compareAux; exports.cmp = cmp; exports.eq = eq; exports.subset = subset; -exports.findOpt = findOpt; -exports.findNull = findNull; -exports.findExn = findExn; +exports.get = get; +exports.getUndefined = getUndefined; +exports.getExn = getExn; exports.addMutate = addMutate; exports.ofArray = ofArray; /* No side effect */ diff --git a/lib/js/caml_io.js b/lib/js/caml_io.js index 76455b41afc..7135f6972cb 100644 --- a/lib/js/caml_io.js +++ b/lib/js/caml_io.js @@ -7,8 +7,6 @@ function $caret(prim, prim$1) { return prim + prim$1; } -var stdin = undefined; - var stdout = /* record */[ /* buffer */"", /* output */(function (_, s) { @@ -114,6 +112,8 @@ function caml_ml_out_channels_list() { ]; } +var stdin = undefined; + exports.$caret = $caret; exports.stdin = stdin; exports.stdout = stdout; @@ -127,4 +127,4 @@ exports.caml_ml_output_char = caml_ml_output_char; exports.caml_ml_input = caml_ml_input; exports.caml_ml_input_char = caml_ml_input_char; exports.caml_ml_out_channels_list = caml_ml_out_channels_list; -/* stdin Not a pure module */ +/* node_std_output Not a pure module */ diff --git a/lib/js/js_undefined.js b/lib/js/js_undefined.js index b2e38619f5d..eacf27efa89 100644 --- a/lib/js/js_undefined.js +++ b/lib/js/js_undefined.js @@ -1,6 +1,14 @@ 'use strict'; +function getExn(f) { + if (f !== undefined) { + return f; + } else { + throw new Error("Js.Undefined.getExn"); + } +} + function bind(x, f) { if (x !== undefined) { return f(x); @@ -17,7 +25,7 @@ function iter(x, f) { } } -function from_opt(x) { +function fromOption(x) { if (x) { return x[0]; } else { @@ -25,7 +33,11 @@ function from_opt(x) { } } +var from_opt = fromOption; + +exports.getExn = getExn; exports.bind = bind; exports.iter = iter; +exports.fromOption = fromOption; exports.from_opt = from_opt; /* No side effect */ From c77827537ee5dab4233917589fce879a8957e8d6 Mon Sep 17 00:00:00 2001 From: Hongbo Zhang Date: Sun, 28 Jan 2018 12:15:29 +0800 Subject: [PATCH 09/17] clean up bs_internalAVLset --- jscomp/others/.depend | 4 +- jscomp/others/bs_Array.ml | 2 +- jscomp/others/bs_Array.mli | 2 +- jscomp/others/bs_List.ml | 2 +- jscomp/others/bs_List.mli | 2 +- jscomp/others/bs_SetInt.ml | 37 +++-- jscomp/others/bs_SetIntM.ml | 38 ++--- jscomp/others/bs_SetM.ml | 197 +++++++++++++------------- jscomp/others/bs_SetString.ml | 37 +++-- jscomp/others/bs_SetStringM.ml | 38 ++--- jscomp/others/bs_SortedSetDict.ml | 58 ++++---- jscomp/others/bs_internalAVLset.ml | 141 +++++++++--------- jscomp/others/bs_internalAVLset.mli | 88 ++++++------ jscomp/others/bs_internalSetInt.ml | 10 +- jscomp/others/bs_internalSetString.ml | 10 +- jscomp/others/internal_set.cppo.ml | 10 +- jscomp/others/set.cppo.ml | 37 +++-- jscomp/others/setm.cppo.ml | 38 ++--- jscomp/test/bs_list_test.js | 14 +- jscomp/test/bs_list_test.ml | 4 +- jscomp/test/ffi_test.js | 4 +- lib/js/bs_Array.js | 4 +- lib/js/bs_List.js | 4 +- lib/js/bs_SetInt.js | 52 +++---- lib/js/bs_SetIntM.js | 44 +++--- lib/js/bs_SetM.js | 160 ++++++++++----------- lib/js/bs_SetString.js | 52 +++---- lib/js/bs_SetStringM.js | 44 +++--- lib/js/bs_SortedSetDict.js | 66 ++++----- lib/js/bs_internalAVLset.js | 166 +++++++++++----------- lib/js/bs_internalSetInt.js | 16 +-- lib/js/bs_internalSetString.js | 16 +-- 32 files changed, 696 insertions(+), 701 deletions(-) diff --git a/jscomp/others/.depend b/jscomp/others/.depend index 387d7ee567a..b7949b12d77 100644 --- a/jscomp/others/.depend +++ b/jscomp/others/.depend @@ -62,8 +62,8 @@ bs_MapStringM.cmj : bs_internalMapString.cmj bs_internalAVLtree.cmj \ bs_MapIntM.cmj : bs_internalMapInt.cmj bs_internalAVLtree.cmj bs_SortInt.cmj \ bs_Array.cmj bs_MapIntM.cmi bs_Set.cmj : bs_SortedSetDict.cmj bs_Cmp.cmj bs_Array.cmj bs_Set.cmi -bs_SetM.cmj : bs_internalAVLset.cmj bs_Sort.cmj bs_Cmp.cmj bs_BagM.cmj \ - bs_Array.cmj bs_SetM.cmi +bs_SetM.cmj : bs_internalAVLset.cmj bs_Sort.cmj bs_Cmp.cmj bs_Array.cmj \ + bs_SetM.cmi bs_MapM.cmj : bs_internalAVLtree.cmj bs_Sort.cmj bs_Cmp.cmj bs_BagM.cmj \ bs_Array.cmj bs_MapM.cmi bs_internalSetInt.cmj : bs_internalAVLset.cmj bs_SortInt.cmj bs_Array.cmj diff --git a/jscomp/others/bs_Array.ml b/jscomp/others/bs_Array.ml index 43bb5760598..218efddcc85 100644 --- a/jscomp/others/bs_Array.ml +++ b/jscomp/others/bs_Array.ml @@ -112,7 +112,7 @@ let zip xs ys = done ; s -let map2 xs ys f = +let zipBy xs ys f = let lenx, leny = length xs, length ys in let len = Pervasives.min lenx leny in let s = makeUninitializedUnsafe len in diff --git a/jscomp/others/bs_Array.mli b/jscomp/others/bs_Array.mli index c32c64d941c..820d50dc90f 100644 --- a/jscomp/others/bs_Array.mli +++ b/jscomp/others/bs_Array.mli @@ -102,7 +102,7 @@ val forEach: 'a array -> ('a -> unit [@bs]) -> unit val map: 'a array -> ('a -> 'b [@bs]) -> 'b array -val map2: 'a array -> 'b array -> ('a -> 'b -> 'c [@bs]) -> 'c array +val zipBy: 'a array -> 'b array -> ('a -> 'b -> 'c [@bs]) -> 'c array val keepBy: 'a array -> ('a -> bool [@bs]) -> 'a array diff --git a/jscomp/others/bs_List.ml b/jscomp/others/bs_List.ml index 94d2cee582f..964ca189cf9 100644 --- a/jscomp/others/bs_List.ml +++ b/jscomp/others/bs_List.ml @@ -313,7 +313,7 @@ let map xs f = copyAuxWithMap t cell f; cell -let map2 l1 l2 f = +let zipBy l1 l2 f = match (l1, l2) with | (a1::l1, a2::l2) -> let cell = mutableCell (f a1 a2 [@bs]) [] in diff --git a/jscomp/others/bs_List.mli b/jscomp/others/bs_List.mli index 5250a8fb673..eb8ee765aad 100644 --- a/jscomp/others/bs_List.mli +++ b/jscomp/others/bs_List.mli @@ -49,7 +49,7 @@ val concat: 'a t -> 'a t -> 'a t val map: 'a t -> ('a -> 'b [@bs]) -> 'b t -val map2: 'a t -> 'b t -> ('a -> 'b -> 'c [@bs]) -> 'c t +val zipBy: 'a t -> 'b t -> ('a -> 'b -> 'c [@bs]) -> 'c t val mapWithIndex: 'a t -> (int -> 'a -> 'b [@bs]) -> 'b t diff --git a/jscomp/others/bs_SetInt.ml b/jscomp/others/bs_SetInt.ml index f09086cb9a2..cec7fef6f71 100644 --- a/jscomp/others/bs_SetInt.ml +++ b/jscomp/others/bs_SetInt.ml @@ -8,28 +8,27 @@ type elt = I.elt type t = I.t -let empty = N.empty0 -let isEmpty = N.isEmpty0 -let singleton = N.singleton0 -let minimum = N.minimum0 -let minUndefined = N.minUndefined0 -let maximum = N.maximum0 -let maxUndefined = N.maxUndefined0 -let forEach = N.iter0 -let reduce = N.fold0 -let every = N.every0 -let some = N.some0 -let keepBy = N.filterShared0 -let partition = N.partitionShared0 -let size = N.length0 -let toList = N.toList0 -let toArray = N.toArray0 -let ofSortedArrayUnsafe = N.ofSortedArrayUnsafe0 +let empty = N.empty +let isEmpty = N.isEmpty +let minimum = N.minimum +let minUndefined = N.minUndefined +let maximum = N.maximum +let maxUndefined = N.maxUndefined +let forEach = N.forEach +let reduce = N.reduce +let every = N.every +let some = N.some +let keepBy = N.filterShared +let partition = N.partitionShared +let size = N.size +let toList = N.toList +let toArray = N.toArray +let ofSortedArrayUnsafe = N.ofSortedArrayUnsafe let checkInvariantInternal = N.checkInvariantInternal let rec add (t : t) (x : elt) : t = match N.toOpt t with - None -> N.singleton0 x + None -> N.singleton x | Some nt -> let v = N.key nt in if x = v then t else @@ -92,7 +91,7 @@ let get = I.get let getUndefined = I.getUndefined let getExn = I.getExn let subset = I.subset -let has = I.mem +let has = I.has let rec splitAuxNoPivot (n : _ N.node) (x : elt) : t * t = let l,v,r = N.(left n , key n, right n) in diff --git a/jscomp/others/bs_SetIntM.ml b/jscomp/others/bs_SetIntM.ml index ab38f8ed902..d4639e532a4 100644 --- a/jscomp/others/bs_SetIntM.ml +++ b/jscomp/others/bs_SetIntM.ml @@ -55,35 +55,35 @@ let removeMutate nt x = | Some nt -> removeMutateAux nt x -let empty () = t ~data:N.empty0 +let empty () = t ~data:N.empty let isEmpty d = - N.isEmpty0 (data d) + N.isEmpty (data d) let singleton x = - t ~data:(N.singleton0 x) + t ~data:(N.singleton x) let minimum d = - N.minimum0 (data d) + N.minimum (data d) let minUndefined d = - N.minUndefined0 (data d) + N.minUndefined (data d) let maximum d = - N.maximum0 (data d) + N.maximum (data d) let maxUndefined d = - N.maxUndefined0 (data d) + N.maxUndefined (data d) let forEach d f = - N.iter0 (data d) f + N.forEach (data d) f let reduce d acc cb = - N.fold0 (data d) acc cb + N.reduce (data d) acc cb let every d p = - N.every0 (data d) p + N.every (data d) p let some d p = - N.some0 (data d) p + N.some (data d) p let keepBy d p = t ~data:(N.filterCopy (data d) p ) @@ -91,13 +91,13 @@ let partition d p = let a , b = N.partitionCopy (data d) p in t ~data:a, t ~data:b let size d = - N.length0 (data d) + N.size (data d) let toList d = - N.toList0 (data d) + N.toList (data d) let toArray d = - N.toArray0 (data d) + N.toArray (data d) let ofSortedArrayUnsafe xs = - t ~data:(N.ofSortedArrayUnsafe0 xs) + t ~data:(N.ofSortedArrayUnsafe xs) let checkInvariantInternal d = N.checkInvariantInternal (data d) @@ -128,7 +128,7 @@ let rec removeArrayMutateAux t xs i len = let ele = A.getUnsafe xs i in let u = removeMutateAux t ele in match N.toOpt u with - | None -> N.empty0 + | None -> N.empty | Some t -> removeArrayMutateAux t xs (i+1) len else N.return t @@ -191,7 +191,7 @@ let rec addMutateCheckAux t (x : elt) added = match N.toOpt t with | None -> added := true; - N.singleton0 x + N.singleton x | Some nt -> let k = N.key nt in (* let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in *) @@ -229,7 +229,7 @@ let getExn d x = I.getExn (data d) x let split d key = let s = data d in - let arr = N.toArray0 s in + let arr = N.toArray s in let i = S.binarySearch arr key in let len = A.length arr in if i < 0 then @@ -320,6 +320,6 @@ let union (dataa : t) (datab : t) : t = let k = S.union tmp 0 sizea tmp sizea sizeb tmp2 0 in t ~data:(N.ofSortedArrayAux tmp2 0 k) -let has d x = I.mem (data d) x +let has d x = I.has (data d) x let copy d = t ~data:(N.copy (data d)) diff --git a/jscomp/others/bs_SetM.ml b/jscomp/others/bs_SetM.ml index 02f60162def..baf11ac2e72 100644 --- a/jscomp/others/bs_SetM.ml +++ b/jscomp/others/bs_SetM.ml @@ -25,13 +25,19 @@ module N = Bs_internalAVLset -module B = Bs_BagM module A = Bs_Array module S = Bs_Sort -type ('k,'id) t0 = 'k N.t0 +type ('k,'id) t0 = 'k N.t + +type ('k, 'id) dict = ('k, 'id) Bs_Cmp.t + +type ('elt,'id) t = + { + dict: ('elt, 'id) dict; + mutable data: 'elt N.t + } [@@bs.deriving abstract] -type ('elt,'id) t = (('elt,'id) Bs_Cmp.t , ('elt,'id) t0) B.bag let rec removeMutateAux nt x ~cmp = @@ -63,14 +69,14 @@ let rec removeMutateAux nt x ~cmp = end let remove (type elt) (type id) (d : (elt,id) t) v = - let oldRoot = B.data d in - let module M = (val B.dict d) in + let oldRoot = data d in + let module M = (val dict d) in match N.toOpt oldRoot with | None -> () | Some oldRoot2 -> let newRoot = removeMutateAux ~cmp:M.cmp oldRoot2 v in if newRoot != oldRoot then - B.dataSet d newRoot + dataSet d newRoot let rec removeArrayMutateAux t xs i len ~cmp = @@ -78,20 +84,20 @@ let rec removeArrayMutateAux t xs i len ~cmp = let ele = A.getUnsafe xs i in let u = removeMutateAux t ele ~cmp in match N.toOpt u with - | None -> N.empty0 + | None -> N.empty | Some t -> removeArrayMutateAux t xs (i+1) len ~cmp else N.return t let removeMany (type elt) (type id) (d : (elt,id) t) xs = - let oldRoot = B.data d in + let oldRoot = data d in match N.toOpt oldRoot with | None -> () | Some nt -> let len = A.length xs in - let module M = (val B.dict d) in + let module M = (val dict d) in let newRoot = removeArrayMutateAux nt xs 0 len ~cmp:M.cmp in if newRoot != oldRoot then - B.dataSet d newRoot + dataSet d newRoot let rec removeMutateCheckAux nt x removed ~cmp= @@ -126,15 +132,15 @@ let rec removeMutateCheckAux nt x removed ~cmp= let removeCheck (type elt) (type id) (d : (elt,id) t) v = - let dict, oldRoot = B.(dict d, data d) in - let module M = (val dict) in + let oldRoot = data d in match N.toOpt oldRoot with | None -> false | Some oldRoot2 -> + let module M = (val dict d) in let removed = ref false in let newRoot = removeMutateCheckAux ~cmp:M.cmp oldRoot2 v removed in if newRoot != oldRoot then - B.dataSet d newRoot ; + dataSet d newRoot ; !removed @@ -143,7 +149,7 @@ let rec addMutateCheckAux (t : _ t0) x added ~cmp = match N.toOpt t with | None -> added := true; - N.singleton0 x + N.singleton x | Some nt -> let k = N.key nt in let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in @@ -159,122 +165,118 @@ let rec addMutateCheckAux (t : _ t0) x added ~cmp = N.return (N.balMutate nt) let addCheck (type elt) (type id) (m : (elt,id) t) e = - let dict, oldRoot = B.(dict m, data m) in + let dict, oldRoot = (dict m, data m) in let module M = (val dict) in let added = ref false in let newRoot = addMutateCheckAux ~cmp:M.cmp oldRoot e added in if newRoot != oldRoot then - B.dataSet m newRoot; + dataSet m newRoot; !added let split (type elt) (type id) (d : (elt,id) t) key = - let dict, s = B.dict d, B.data d in - let module M = (val dict ) in - let arr = N.toArray0 s in + let module M = (val dict d ) in + let arr = N.toArray (data d) in let i = S.binarySearchBy arr key (Bs_Cmp.getCmpIntenral M.cmp) in let len = A.length arr in if i < 0 then let next = - i -1 in - (B.bag + (t ~data:(N.ofSortedArrayAux arr 0 next) - ~dict + ~dict:(module M) , - B.bag + t ~data:(N.ofSortedArrayAux arr next (len - next)) - ~dict + ~dict:(module M) ), false else - (B.bag + (t ~data:(N.ofSortedArrayAux arr 0 i) - ~dict, - B.bag + ~dict:(module M), + t ~data:(N.ofSortedArrayAux arr (i+1) (len - i - 1)) - ~dict + ~dict:(module M) ), true let keepBy d p = - let data, dict = B.(data d, dict d) in - B.bag ~data:(N.filterCopy data p ) ~dict + t ~data:(N.filterCopy (data d) p ) ~dict:(dict d) let partition d p = - let data, dict = B.(data d, dict d) in - let a , b = N.partitionCopy data p in - B.bag ~data:a ~dict, B.bag ~data:b ~dict + let dict = dict d in + let a, b = N.partitionCopy (data d) p in + t ~data:a ~dict, t ~data:b ~dict let empty ~dict = - B.bag ~dict ~data:N.empty0 + t ~dict ~data:N.empty + let isEmpty d = - N.isEmpty0 (B.data d) + N.isEmpty (data d) + let singleton x ~dict = - B.bag ~data:(N.singleton0 x) ~dict + t ~data:(N.singleton x) ~dict let minimum d = - N.minimum0 (B.data d) + N.minimum (data d) let minUndefined d = - N.minUndefined0 (B.data d) + N.minUndefined (data d) let maximum d = - N.maximum0 (B.data d) + N.maximum (data d) let maxUndefined d = - N.maxUndefined0 (B.data d) + N.maxUndefined (data d) let forEach d f = - N.iter0 (B.data d) f + N.forEach (data d) f let reduce d acc cb = - N.fold0 (B.data d) acc cb + N.reduce (data d) acc cb let every d p = - N.every0 (B.data d) p + N.every (data d) p let some d p = - N.some0 (B.data d) p + N.some (data d) p let size d = - N.length0 (B.data d) + N.size (data d) let toList d = - N.toList0 (B.data d) + N.toList (data d) let toArray d = - N.toArray0 (B.data d) + N.toArray (data d) let ofSortedArrayUnsafe xs ~dict : _ t = - B.bag ~data:(N.ofSortedArrayUnsafe0 xs) ~dict + t ~data:(N.ofSortedArrayUnsafe xs) ~dict let checkInvariantInternal d = - N.checkInvariantInternal (B.data d) + N.checkInvariantInternal (data d) let cmp (type elt) (type id) (d0 : (elt,id) t) d1 = - let module M = (val B.dict d0) in - N.cmp0 ~cmp:M.cmp (B.data d0) (B.data d1) + let module M = (val dict d0) in + N.cmp ~cmp:M.cmp (data d0) (data d1) let eq (type elt) (type id) (d0 : (elt,id) t) d1 = - let module M = (val B.dict d0) in - N.eq0 ~cmp:M.cmp (B.data d0) (B.data d1) + let module M = (val dict d0) in + N.eq ~cmp:M.cmp (data d0) (data d1) let get (type elt) (type id) (d : (elt,id) t) x = - let module M = (val B.dict d) in - N.get0 ~cmp:M.cmp (B.data d) x + let module M = (val dict d) in + N.get ~cmp:M.cmp (data d) x let getUndefined (type elt) (type id) (d : (elt,id) t) x = - let module M = (val B.dict d) in - N.getUndefined0 ~cmp:M.cmp (B.data d) x + let module M = (val dict d) in + N.getUndefined ~cmp:M.cmp (data d) x let getExn (type elt) (type id) (d : (elt,id) t) x = - let dict = B.dict d in - let module M = (val dict) in - N.getExn0 ~cmp:M.cmp (B.data d) x + let module M = (val dict d) in + N.getExn ~cmp:M.cmp (data d) x let has (type elt) (type id) (d : (elt,id) t) x = - let dict = B.dict d in - let module M = (val dict) in - N.mem0 ~cmp:M.cmp (B.data d) x -let ofArray (type elt) (type id) data ~(dict : (elt,id) Bs_Cmp.t) = + let module M = (val dict d) in + N.has ~cmp:M.cmp (data d) x +let ofArray (type elt) (type id) data ~(dict : (elt,id) dict) = let module M = (val dict) in - B.bag ~dict ~data:(N.ofArray0 ~cmp:M.cmp data) + t ~dict ~data:(N.ofArray ~cmp:M.cmp data) let add (type elt) (type id) (m : (elt,id) t) e = - let oldRoot = B.(data m) in - let module M = (val B.dict m) in + let module M = (val dict m) in + let oldRoot = (data m) in let newRoot = N.addMutate ~cmp:M.cmp oldRoot e in if newRoot != oldRoot then - B.dataSet m newRoot + dataSet m newRoot let addArrayMutate (t : _ t0) xs ~cmp = let v = ref t in for i = 0 to A.length xs - 1 do v := N.addMutate !v (A.getUnsafe xs i) ~cmp done; - !v + !v + let mergeMany (type elt) (type id) (d : (elt,id) t ) xs = - let oldRoot = B.data d in - let module M = (val B.dict d) in - let newRoot = addArrayMutate oldRoot xs ~cmp:M.cmp in - if newRoot != oldRoot then - B.dataSet d newRoot + let module M = (val dict d) in + dataSet d (addArrayMutate (data d) xs ~cmp:M.cmp) @@ -283,15 +285,15 @@ let mergeMany (type elt) (type id) (d : (elt,id) t ) xs = let subset (type elt) (type id) (a : (elt,id) t) b = - let module M = (val B.dict a) in - N.subset0 ~cmp:M.cmp (B.data a) (B.data b) + let module M = (val dict a) in + N.subset ~cmp:M.cmp (data a) (data b) let intersect (type elt) (type id) (a : (elt,id) t) b : _ t = - let dict, dataa, datab = B.dict a, B.data a, B.data b in - let module M = (val dict) in - match N.toOpt dataa, N.toOpt datab with - | None, _ -> empty dict - | _, None -> empty dict + (* let dict, dataa, datab = dict a, data a, data b in *) + let module M = (val dict a) in + match N.toOpt (data a), N.toOpt (data b) with + | None, _ -> empty (module M) + | _, None -> empty (module M) | Some dataa0, Some datab0 -> let sizea, sizeb = N.lengthNode dataa0, N.lengthNode datab0 in @@ -307,19 +309,20 @@ let intersect (type elt) (type id) (a : (elt,id) t) b : _ t = (A.getUnsafe tmp (totalSize - 1)) (A.getUnsafe tmp 0) [@bs] < 0 ) - then empty dict + then empty (module M) else let tmp2 = A.makeUninitializedUnsafe (min sizea sizeb) in let k = S.intersect tmp 0 sizea tmp sizea sizeb tmp2 0 p in - B.bag ~data:(N.ofSortedArrayAux tmp2 0 k) - ~dict + t ~data:(N.ofSortedArrayAux tmp2 0 k) + ~dict:(module M) + let diff (type elt) (type id) (a : (elt,id) t) b : _ t = - let dict, dataa, datab = B.dict a, B.data a, B.data b in - let module M = (val dict) in - match N.toOpt dataa, N.toOpt datab with - | None, _ -> empty dict + let module M = (val dict a) in + let dataa = data a in + match N.toOpt dataa, N.toOpt (data b) with + | None, _ -> empty (module M) | _, None -> - B.bag ~data:(N.copy dataa) ~dict + t ~data:(N.copy dataa) ~dict:(module M) | Some dataa0, Some datab0 -> let sizea, sizeb = N.lengthNode dataa0, N.lengthNode datab0 in @@ -335,18 +338,18 @@ let diff (type elt) (type id) (a : (elt,id) t) b : _ t = (A.getUnsafe tmp (totalSize - 1)) (A.getUnsafe tmp 0) [@bs] < 0 ) - then B.bag ~data:(N.copy dataa) ~dict + then t ~data:(N.copy dataa) ~dict:(module M) else let tmp2 = A.makeUninitializedUnsafe sizea in let k = S.diff tmp 0 sizea tmp sizea sizeb tmp2 0 p in - B.bag ~data:(N.ofSortedArrayAux tmp2 0 k) ~dict + t ~data:(N.ofSortedArrayAux tmp2 0 k) ~dict:(module M) let union (type elt) (type id) (a : (elt,id) t) b = - let dict, dataa, datab = B.dict a, B.data a, B.data b in - let module M = (val dict) in + let module M = (val dict a) in + let dataa, datab = data a, data b in match N.toOpt dataa, N.toOpt datab with - | None, _ -> B.bag ~data:(N.copy datab) ~dict - | _, None -> B.bag ~data:(N.copy dataa) ~dict + | None, _ -> t ~data:(N.copy datab) ~dict:(module M) + | _, None -> t ~data:(N.copy dataa) ~dict:(module M) | Some dataa0, Some datab0 -> let sizea, sizeb = N.lengthNode dataa0, N.lengthNode datab0 in @@ -358,10 +361,10 @@ let union (type elt) (type id) (a : (elt,id) t) b = if p (A.getUnsafe tmp (sizea - 1)) (A.getUnsafe tmp sizea) [@bs] < 0 then - B.bag ~data:(N.ofSortedArrayAux tmp 0 totalSize) ~dict + t ~data:(N.ofSortedArrayAux tmp 0 totalSize) ~dict:(module M) else let tmp2 = A.makeUninitializedUnsafe totalSize in let k = S.union tmp 0 sizea tmp sizea sizeb tmp2 0 p in - B.bag ~data:(N.ofSortedArrayAux tmp2 0 k) ~dict + t ~data:(N.ofSortedArrayAux tmp2 0 k) ~dict:(module M) -let copy d = B.bag ~data:(N.copy (B.data d)) ~dict:(B.dict d) +let copy d = t ~data:(N.copy (data d)) ~dict:(dict d) diff --git a/jscomp/others/bs_SetString.ml b/jscomp/others/bs_SetString.ml index 4586d0eb515..15e81ba318f 100644 --- a/jscomp/others/bs_SetString.ml +++ b/jscomp/others/bs_SetString.ml @@ -8,28 +8,27 @@ type elt = I.elt type t = I.t -let empty = N.empty0 -let isEmpty = N.isEmpty0 -let singleton = N.singleton0 -let minimum = N.minimum0 -let minUndefined = N.minUndefined0 -let maximum = N.maximum0 -let maxUndefined = N.maxUndefined0 -let forEach = N.iter0 -let reduce = N.fold0 -let every = N.every0 -let some = N.some0 -let keepBy = N.filterShared0 -let partition = N.partitionShared0 -let size = N.length0 -let toList = N.toList0 -let toArray = N.toArray0 -let ofSortedArrayUnsafe = N.ofSortedArrayUnsafe0 +let empty = N.empty +let isEmpty = N.isEmpty +let minimum = N.minimum +let minUndefined = N.minUndefined +let maximum = N.maximum +let maxUndefined = N.maxUndefined +let forEach = N.forEach +let reduce = N.reduce +let every = N.every +let some = N.some +let keepBy = N.filterShared +let partition = N.partitionShared +let size = N.size +let toList = N.toList +let toArray = N.toArray +let ofSortedArrayUnsafe = N.ofSortedArrayUnsafe let checkInvariantInternal = N.checkInvariantInternal let rec add (t : t) (x : elt) : t = match N.toOpt t with - None -> N.singleton0 x + None -> N.singleton x | Some nt -> let v = N.key nt in if x = v then t else @@ -92,7 +91,7 @@ let get = I.get let getUndefined = I.getUndefined let getExn = I.getExn let subset = I.subset -let has = I.mem +let has = I.has let rec splitAuxNoPivot (n : _ N.node) (x : elt) : t * t = let l,v,r = N.(left n , key n, right n) in diff --git a/jscomp/others/bs_SetStringM.ml b/jscomp/others/bs_SetStringM.ml index edf5e199a48..c8110052fbe 100644 --- a/jscomp/others/bs_SetStringM.ml +++ b/jscomp/others/bs_SetStringM.ml @@ -55,35 +55,35 @@ let removeMutate nt x = | Some nt -> removeMutateAux nt x -let empty () = t ~data:N.empty0 +let empty () = t ~data:N.empty let isEmpty d = - N.isEmpty0 (data d) + N.isEmpty (data d) let singleton x = - t ~data:(N.singleton0 x) + t ~data:(N.singleton x) let minimum d = - N.minimum0 (data d) + N.minimum (data d) let minUndefined d = - N.minUndefined0 (data d) + N.minUndefined (data d) let maximum d = - N.maximum0 (data d) + N.maximum (data d) let maxUndefined d = - N.maxUndefined0 (data d) + N.maxUndefined (data d) let forEach d f = - N.iter0 (data d) f + N.forEach (data d) f let reduce d acc cb = - N.fold0 (data d) acc cb + N.reduce (data d) acc cb let every d p = - N.every0 (data d) p + N.every (data d) p let some d p = - N.some0 (data d) p + N.some (data d) p let keepBy d p = t ~data:(N.filterCopy (data d) p ) @@ -91,13 +91,13 @@ let partition d p = let a , b = N.partitionCopy (data d) p in t ~data:a, t ~data:b let size d = - N.length0 (data d) + N.size (data d) let toList d = - N.toList0 (data d) + N.toList (data d) let toArray d = - N.toArray0 (data d) + N.toArray (data d) let ofSortedArrayUnsafe xs = - t ~data:(N.ofSortedArrayUnsafe0 xs) + t ~data:(N.ofSortedArrayUnsafe xs) let checkInvariantInternal d = N.checkInvariantInternal (data d) @@ -128,7 +128,7 @@ let rec removeArrayMutateAux t xs i len = let ele = A.getUnsafe xs i in let u = removeMutateAux t ele in match N.toOpt u with - | None -> N.empty0 + | None -> N.empty | Some t -> removeArrayMutateAux t xs (i+1) len else N.return t @@ -191,7 +191,7 @@ let rec addMutateCheckAux t (x : elt) added = match N.toOpt t with | None -> added := true; - N.singleton0 x + N.singleton x | Some nt -> let k = N.key nt in (* let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in *) @@ -229,7 +229,7 @@ let getExn d x = I.getExn (data d) x let split d key = let s = data d in - let arr = N.toArray0 s in + let arr = N.toArray s in let i = S.binarySearch arr key in let len = A.length arr in if i < 0 then @@ -320,6 +320,6 @@ let union (dataa : t) (datab : t) : t = let k = S.union tmp 0 sizea tmp sizea sizeb tmp2 0 in t ~data:(N.ofSortedArrayAux tmp2 0 k) -let has d x = I.mem (data d) x +let has d x = I.has (data d) x let copy d = t ~data:(N.copy (data d)) diff --git a/jscomp/others/bs_SortedSetDict.ml b/jscomp/others/bs_SortedSetDict.ml index 8ee285c36fa..d4608a9b594 100644 --- a/jscomp/others/bs_SortedSetDict.ml +++ b/jscomp/others/bs_SortedSetDict.ml @@ -25,7 +25,7 @@ module N = Bs_internalAVLset module A = Bs_Array -type ('k,'id) t = 'k N.t0 +type ('k,'id) t = 'k N.t type ('key, 'id) cmp = ('key, 'id) Bs_Cmp.cmp @@ -36,7 +36,7 @@ type ('key, 'id) cmp = ('key, 'id) Bs_Cmp.cmp *) let rec add (t : _ t) x ~cmp : _ t = match N.toOpt t with - | None -> N.singleton0 x + | None -> N.singleton x | Some nt -> let k = N.key nt in let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in @@ -198,34 +198,34 @@ let rec diff s1 s2 ~cmp = else N.joinShared ll v1 rr -let empty = N.empty0 -let ofArray = N.ofArray0 -let isEmpty = N.isEmpty0 - - - -let cmp = N.cmp0 -let eq = N.eq0 -let has = N.mem0 -let forEach = N.iter0 -let reduce = N.fold0 -let every = N.every0 -let some = N.some0 -let size = N.length0 -let toList = N.toList0 -let toArray = N.toArray0 -let minimum = N.minimum0 -let maximum = N.maximum0 -let maxUndefined = N.maxUndefined0 -let minUndefined = N.minUndefined0 -let get = N.get0 -let getExn = N.getExn0 -let getUndefined = N.getUndefined0 +let empty = N.empty +let ofArray = N.ofArray +let isEmpty = N.isEmpty + + + +let cmp = N.cmp +let eq = N.eq +let has = N.has +let forEach = N.forEach +let reduce = N.reduce +let every = N.every +let some = N.some +let size = N.size +let toList = N.toList +let toArray = N.toArray +let minimum = N.minimum +let maximum = N.maximum +let maxUndefined = N.maxUndefined +let minUndefined = N.minUndefined +let get = N.get +let getExn = N.getExn +let getUndefined = N.getUndefined -let ofSortedArrayUnsafe = N.ofSortedArrayUnsafe0 -let subset = N.subset0 -let keepBy = N.filterShared0 -let partition = N.partitionShared0 +let ofSortedArrayUnsafe = N.ofSortedArrayUnsafe +let subset = N.subset +let keepBy = N.filterShared +let partition = N.partitionShared let checkInvariantInternal = N.checkInvariantInternal diff --git a/jscomp/others/bs_internalAVLset.ml b/jscomp/others/bs_internalAVLset.ml index bf7119a2fd4..b7f99e15c12 100644 --- a/jscomp/others/bs_internalAVLset.ml +++ b/jscomp/others/bs_internalAVLset.ml @@ -25,11 +25,12 @@ type 'elt node = { - mutable left : 'elt node Js.null; + mutable left : 'elt t; mutable key : 'elt ; - mutable right : 'elt node Js.null; + mutable right : 'elt t; mutable h : int } +and 'elt t = 'elt node Js.null [@@bs.deriving abstract] module A = Bs_Array @@ -39,12 +40,14 @@ external toOpt : 'a Js.null -> 'a option = "#null_to_opt" external return : 'a -> 'a Js.null = "%identity" external empty : 'a Js.null = "#null" external unsafeCoerce : 'a Js.null -> 'a = "%identity" -type 'elt t0 = 'elt node Js.null + +type ('a, 'b) cmp = ('a, 'b) Bs_Cmp.cmp + (* Sets are represented by balanced binary trees (the heights of the children differ by at most 2 *) -let height (n : _ t0) = +let height (n : _ t) = match toOpt n with | None -> 0 | Some n -> h n @@ -62,12 +65,12 @@ let rec copy n = l and r must be balanced and | height l - height r | <= 2. Inline expansion of height for better speed. *) -let create (l : _ t0) v (r : _ t0) = +let create (l : _ t) v (r : _ t) = let hl = match toOpt l with None -> 0 | Some n -> h n in let hr = match toOpt r with None -> 0 | Some n -> h n in return @@ node ~left:l ~key:v ~right:r ~h:(if hl >= hr then hl + 1 else hr + 1) -let singleton0 x = return @@ node ~left:empty ~key:x ~right:empty ~h:1 +let singleton x = return @@ node ~left:empty ~key:x ~right:empty ~h:1 let heightGe l r = match toOpt l, toOpt r with @@ -113,12 +116,12 @@ let rec min0Aux n = | None -> key n | Some n -> min0Aux n -let minimum0 n = +let minimum n = match toOpt n with None -> None | Some n -> Some (min0Aux n) -let minUndefined0 n = +let minUndefined n = match toOpt n with | None -> Js.undefined | Some n -> Js.Undefined.return (min0Aux n) @@ -128,12 +131,12 @@ let rec max0Aux n = | None -> key n | Some n -> max0Aux n -let maximum0 n = +let maximum n = match toOpt n with | None -> None | Some n -> Some (max0Aux n) -let maxUndefined0 n = +let maxUndefined n = match toOpt n with | None -> Js.undefined | Some n -> Js.Undefined.return (max0Aux n) @@ -149,9 +152,9 @@ let rec removeMinAuxWithRef n v = (* Implementation of the set operations *) -let empty0 = empty -let isEmpty0 n = match toOpt n with Some _ -> false | None -> true + +let isEmpty n = match toOpt n with Some _ -> false | None -> true let rec stackAllLeft v s = match toOpt v with @@ -159,37 +162,37 @@ let rec stackAllLeft v s = | Some x -> stackAllLeft (left x) (x::s) -let rec iter0 n f = +let rec forEach n f = match toOpt n with | None -> () | Some n -> - iter0 (left n) f; f (key n) [@bs]; iter0 (right n) f + forEach (left n) f; f (key n) [@bs]; forEach (right n) f -let rec fold0 s accu f = +let rec reduce s accu f = match toOpt s with | None -> accu | Some n -> let l,k,r = left n, key n , right n in - fold0 + reduce r - (f (fold0 l accu f) k [@bs]) f + (f (reduce l accu f) k [@bs]) f -let rec every0 n p = +let rec every n p = match toOpt n with | None -> true | Some n -> p (key n) [@bs] && - every0 (left n) p && - every0 (right n) p + every (left n) p && + every (right n) p -let rec some0 n p = +let rec some n p = match toOpt n with | None -> false | Some n -> p (key n) [@bs] || - some0 (left n) p || - some0 (right n) p + some (left n) p || + some (right n) p (* [addMinElement v n] and [addMaxElement v n] @@ -201,13 +204,13 @@ let rec some0 n p = let rec addMinElement n v = match toOpt n with - | None -> singleton0 v + | None -> singleton v | Some n -> bal (addMinElement (left n) v) (key n) (right n) let rec addMaxElement n v = match toOpt n with - | None -> singleton0 v + | None -> singleton v | Some n -> bal (left n) (key n) (addMaxElement (right n) v) @@ -240,14 +243,14 @@ let concatShared t1 t2 = -let rec partitionShared0 n p = +let rec partitionShared n p = match toOpt n with | None -> (empty, empty) | Some n -> let key = key n in - let (lt, lf) = partitionShared0 (left n) p in + let (lt, lf) = partitionShared (left n) p in let pv = p key [@bs] in - let (rt, rf) = partitionShared0 (right n) p in + let (rt, rf) = partitionShared (right n) p in if pv then (joinShared lt key rt, concatShared lf rf) else (concatShared lt rt, joinShared lf key rf) @@ -265,7 +268,7 @@ let rec lengthNode n = | Some r -> lengthNode r in 1 + sizeL + sizeR -let rec length0 n = +let size n = match toOpt n with | None -> 0 | Some n -> @@ -279,10 +282,10 @@ let rec toListAux accu n = ((key n) :: toListAux accu (right n)) (left n) -let toList0 s = +let toList s = toListAux [] s -let rec checkInvariantInternal (v : _ t0) = +let rec checkInvariantInternal (v : _ t) = match toOpt v with | None -> true | Some n -> @@ -349,7 +352,7 @@ let rec fillArrayWithFilter n i arr p = fillArrayWithFilter r rnext arr p -let toArray0 n = +let toArray n = match toOpt n with | None -> [||] | Some n -> @@ -360,19 +363,19 @@ let toArray0 n = let rec ofSortedArrayRevAux arr off len = match len with - | 0 -> empty0 - | 1 -> singleton0 (A.getUnsafe arr off) + | 0 -> empty + | 1 -> singleton (A.getUnsafe arr off) | 2 -> let x0,x1 = A.(getUnsafe arr off, getUnsafe arr (off - 1) ) in - return @@ node ~left:(singleton0 x0) ~key:x1 ~h:2 ~right:empty0 + return @@ node ~left:(singleton x0) ~key:x1 ~h:2 ~right:empty | 3 -> let x0,x1,x2 = A.(getUnsafe arr off, getUnsafe arr (off - 1), getUnsafe arr (off - 2)) in - return @@ node ~left:(singleton0 x0) - ~right:(singleton0 x2) + return @@ node ~left:(singleton x0) + ~right:(singleton x2) ~key:x1 ~h:2 | _ -> @@ -386,19 +389,19 @@ let rec ofSortedArrayRevAux arr off len = let rec ofSortedArrayAux arr off len = match len with - | 0 -> empty0 - | 1 -> singleton0 (A.getUnsafe arr off) + | 0 -> empty + | 1 -> singleton (A.getUnsafe arr off) | 2 -> let x0,x1 = A.(getUnsafe arr off, getUnsafe arr (off + 1) ) in - return @@ node ~left:(singleton0 x0) ~key:x1 ~h:2 ~right:empty0 + return @@ node ~left:(singleton x0) ~key:x1 ~h:2 ~right:empty | 3 -> let x0,x1,x2 = A.(getUnsafe arr off, getUnsafe arr (off + 1), getUnsafe arr (off + 2)) in - return @@ node ~left:(singleton0 x0) - ~right:(singleton0 x2) + return @@ node ~left:(singleton x0) + ~right:(singleton x2) ~key:x1 ~h:2 | _ -> @@ -409,17 +412,17 @@ let rec ofSortedArrayAux arr off len = ofSortedArrayAux arr (off + nl + 1) (len - nl - 1) in create left mid right -let ofSortedArrayUnsafe0 arr = +let ofSortedArrayUnsafe arr = ofSortedArrayAux arr 0 (A.length arr) -let rec filterShared0 n p = +let rec filterShared n p = match toOpt n with | None -> empty | Some n -> let l,v,r = left n, key n, right n in - let newL = filterShared0 l p in + let newL = filterShared l p in let pv = p v [@bs] in - let newR = filterShared0 r p in + let newR = filterShared r p in if pv then (if l == newL && r == newR then return n @@ -430,7 +433,7 @@ let rec filterShared0 n p = methods makes use of referential equality *) -let rec filterCopy n p : _ t0= +let rec filterCopy n p : _ t = match toOpt n with | None -> empty | Some n -> @@ -454,13 +457,13 @@ let partitionCopy n p = ofSortedArrayRevAux v backward (size - forwardLen) -let rec mem0 (t: _ t0) x ~cmp = +let rec has (t: _ t) x ~cmp = match toOpt t with | None -> false | Some n -> let v = key n in let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in - c = 0 || mem0 ~cmp (if c < 0 then left n else right n) x + c = 0 || has ~cmp (if c < 0 then left n else right n) x let rec compareAux e1 e2 ~cmp = @@ -474,18 +477,18 @@ let rec compareAux e1 e2 ~cmp = else c | _, _ -> 0 -let cmp0 s1 s2 ~cmp = - let len1,len2 = length0 s1, length0 s2 in +let cmp s1 s2 ~cmp = + let len1,len2 = size s1, size s2 in if len1 = len2 then compareAux ~cmp (stackAllLeft s1 []) (stackAllLeft s2 []) else if len1 < len2 then -1 else 1 -let eq0 s1 s2 ~cmp = - cmp0 ~cmp s1 s2 = 0 +let eq s1 s2 ~cmp:c = + cmp ~cmp:c s1 s2 = 0 -let rec subset0 (s1 : _ t0) (s2 : _ t0) ~cmp = +let rec subset (s1 : _ t) (s2 : _ t) ~cmp = match (toOpt s1, toOpt s2) with | None, _ -> true | _, None -> false @@ -494,41 +497,41 @@ let rec subset0 (s1 : _ t0) (s2 : _ t0) ~cmp = let l2,v2,r2 = (left t2, key t2, right t2) in let c = (Bs_Cmp.getCmpIntenral cmp) v1 v2 [@bs] in if c = 0 then - subset0 ~cmp l1 l2 && subset0 ~cmp r1 r2 + subset ~cmp l1 l2 && subset ~cmp r1 r2 else if c < 0 then - subset0 ~cmp (create l1 v1 empty) l2 && - subset0 ~cmp r1 s2 + subset ~cmp (create l1 v1 empty) l2 && + subset ~cmp r1 s2 else - subset0 ~cmp (create empty v1 r1 ) r2 && - subset0 ~cmp l1 s2 + subset ~cmp (create empty v1 r1 ) r2 && + subset ~cmp l1 s2 -let rec get0 (n : _ t0) x ~cmp = +let rec get (n : _ t) x ~cmp = match toOpt n with None -> None | Some t (* Node(l, v, r, _) *) -> let v = key t in let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in if c = 0 then Some v - else get0 ~cmp (if c < 0 then left t else right t) x + else get ~cmp (if c < 0 then left t else right t) x -let rec getUndefined0 (n : _ t0) x ~cmp = +let rec getUndefined (n : _ t) x ~cmp = match toOpt n with None -> Js.Undefined.empty | Some t (* Node(l, v, r, _) *) -> let v = key t in let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in if c = 0 then Js.Undefined.return v - else getUndefined0 ~cmp (if c < 0 then left t else right t) x + else getUndefined ~cmp (if c < 0 then left t else right t) x -let rec getExn0 (n : _ t0) x ~cmp = +let rec getExn (n : _ t) x ~cmp = match toOpt n with None -> [%assert "getExn0"] | Some t (* Node(l, v, r, _) *) -> let v = key t in let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in if c = 0 then v - else getExn0 ~cmp (if c < 0 then left t else right t) x + else getExn ~cmp (if c < 0 then left t else right t) x (******************************************************************) @@ -601,9 +604,9 @@ let balMutate nt = nt end -let rec addMutate ~cmp (t : _ t0) x = +let rec addMutate ~cmp (t : _ t) x = match toOpt t with - | None -> singleton0 x + | None -> singleton x | Some nt -> let k = key nt in let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in @@ -619,9 +622,9 @@ let rec addMutate ~cmp (t : _ t0) x = return (balMutate nt) -let ofArray0 (xs : _ array) ~cmp = +let ofArray (xs : _ array) ~cmp = let len = A.length xs in - if len = 0 then empty0 + if len = 0 then empty else let next = ref (S.strictlySortedLength xs (fun [@bs] x y -> (Bs_Cmp.getCmpIntenral cmp) x y [@bs] < 0)) in diff --git a/jscomp/others/bs_internalAVLset.mli b/jscomp/others/bs_internalAVLset.mli index 078ebbd6577..2621bc8a195 100644 --- a/jscomp/others/bs_internalAVLset.mli +++ b/jscomp/others/bs_internalAVLset.mli @@ -29,13 +29,15 @@ Such methods could be shared between [generic set/specalized set] whether mutable or immutable depends on use cases *) -type 'elt t0 = 'elt node Js.null +type 'elt t = 'elt node Js.null and 'elt node = private { - mutable left : 'elt t0; + mutable left : 'elt t; key : 'elt ; - mutable right : 'elt t0; + mutable right : 'elt t; h : int } [@@bs.deriving abstract] + +type ('a, 'b) cmp = ('a, 'b) Bs_Cmp.cmp (* TODO: node is used in [subset] *) external toOpt : 'a Js.null -> 'a option = "#null_to_opt" external return : 'a -> 'a Js.null = "%identity" @@ -43,65 +45,65 @@ external empty : 'a Js.null = "#null" -val copy : 'a t0 -> 'a t0 -val create : 'a t0 -> 'a -> 'a t0 -> 'a t0 -val bal : 'a t0 -> 'a -> 'a t0 -> 'a t0 -val singleton0 : 'a -> 'a t0 +val copy : 'a t -> 'a t +val create : 'a t -> 'a -> 'a t -> 'a t +val bal : 'a t -> 'a -> 'a t -> 'a t +val singleton : 'a -> 'a t -val minimum0 : 'a t0 -> 'a option -val minUndefined0 : 'a t0 -> 'a Js.undefined -val maximum0 : 'a t0 -> 'a option -val maxUndefined0 : 'a t0 -> 'a Js.undefined +val minimum : 'a t -> 'a option +val minUndefined : 'a t -> 'a Js.undefined +val maximum : 'a t -> 'a option +val maxUndefined : 'a t -> 'a Js.undefined -val removeMinAuxWithRef : 'a node -> 'a ref -> 'a t0 +val removeMinAuxWithRef : 'a node -> 'a ref -> 'a t (* [removeMinAuxWithRef n cell] return a new node with minimum removed and stored in cell *) -val empty0 : 'a t0 -val isEmpty0 : 'a t0 -> bool +val empty : 'a t +val isEmpty : 'a t -> bool -val stackAllLeft : 'a t0 -> 'a node list -> 'a node list +val stackAllLeft : 'a t -> 'a node list -> 'a node list -val iter0 : 'a t0 -> ('a -> 'b [@bs]) -> unit -val fold0 : 'a t0 -> 'b -> ('b -> 'a -> 'b [@bs]) -> 'b -val every0 : 'a t0 -> ('a -> bool [@bs]) -> bool -val some0 : 'a t0 -> ('a -> bool [@bs]) -> bool +val forEach : 'a t -> ('a -> 'b [@bs]) -> unit +val reduce : 'a t -> 'b -> ('b -> 'a -> 'b [@bs]) -> 'b +val every : 'a t -> ('a -> bool [@bs]) -> bool +val some : 'a t -> ('a -> bool [@bs]) -> bool -val joinShared : 'a t0 -> 'a -> 'a t0 -> 'a t0 -val concatShared : 'a t0 -> 'a t0 -> 'a t0 -val filterShared0 : 'a t0 -> ('a -> bool [@bs]) -> 'a t0 -val filterCopy : 'a t0 -> ('a -> bool [@bs]) -> 'a t0 +val joinShared : 'a t -> 'a -> 'a t -> 'a t +val concatShared : 'a t -> 'a t -> 'a t +val filterShared : 'a t -> ('a -> bool [@bs]) -> 'a t +val filterCopy : 'a t -> ('a -> bool [@bs]) -> 'a t -val partitionShared0 : - 'a t0 -> ('a -> bool [@bs]) -> 'a t0 * 'a t0 +val partitionShared: + 'a t -> ('a -> bool [@bs]) -> 'a t * 'a t val partitionCopy: - 'a t0 -> ('a -> bool [@bs]) -> 'a t0 * 'a t0 + 'a t -> ('a -> bool [@bs]) -> 'a t * 'a t val lengthNode : 'a node -> int -val length0 : 'a t0 -> int +val size: 'a t -> int -val toList0 : 'a t0 -> 'a list -val checkInvariantInternal : _ t0 -> bool +val toList: 'a t -> 'a list +val checkInvariantInternal : _ t -> bool val fillArray: 'a node -> int -> 'a array -> int -val toArray0 : 'a t0 -> 'a array -val ofSortedArrayAux : 'a array -> int -> int -> 'a t0 -val ofSortedArrayRevAux : 'a array -> int -> int -> 'a t0 -val ofSortedArrayUnsafe0 : 'a array -> 'a t0 -val mem0 : 'a t0 -> 'a -> cmp:('a, 'b) Bs_Cmp.cmp -> bool -val cmp0 : 'a t0 -> 'a t0 -> cmp:('a, 'b) Bs_Cmp.cmp -> int -val eq0 : 'a t0 -> 'a t0 -> cmp:('a, 'b) Bs_Cmp.cmp -> bool -val subset0 : 'a t0 -> 'a t0 -> cmp:('a, 'b) Bs_Cmp.cmp -> bool -val get0 : 'a t0 -> 'a -> cmp:('a, 'b) Bs_Cmp.cmp -> 'a option -val getUndefined0 : 'a t0 -> 'a -> cmp:('a, 'b) Bs_Cmp.cmp -> 'a Js.undefined -val getExn0 : 'a t0 -> 'a -> cmp:('a, 'b) Bs_Cmp.cmp -> 'a +val toArray: 'a t -> 'a array +val ofSortedArrayAux : 'a array -> int -> int -> 'a t +val ofSortedArrayRevAux : 'a array -> int -> int -> 'a t +val ofSortedArrayUnsafe : 'a array -> 'a t +val has: 'a t -> 'a -> cmp:('a, 'b) cmp -> bool +val cmp: 'a t -> 'a t -> cmp:('a, 'b) cmp -> int +val eq: 'a t -> 'a t -> cmp:('a, 'b) cmp -> bool +val subset : 'a t -> 'a t -> cmp:('a, 'b) cmp -> bool +val get : 'a t -> 'a -> cmp:('a, 'b) cmp -> 'a option +val getUndefined: 'a t -> 'a -> cmp:('a, 'b) cmp -> 'a Js.undefined +val getExn: 'a t -> 'a -> cmp:('a, 'b) cmp -> 'a -val ofArray0 : 'a array -> cmp:('a, 'b) Bs_Cmp.cmp -> 'a t0 +val ofArray: 'a array -> cmp:('a, 'b) cmp -> 'a t -val addMutate : cmp:('a, 'b) Bs_Cmp.cmp -> 'a t0 -> 'a -> 'a t0 +val addMutate : cmp:('a, 'b) cmp -> 'a t -> 'a -> 'a t val balMutate : 'a node -> 'a node -val removeMinAuxWithRootMutate : 'a node -> 'a node -> 'a t0 +val removeMinAuxWithRootMutate : 'a node -> 'a node -> 'a t (* [rmeoveMinAuxMutateWithRoot root n] remove the minimum of n in place and store its value in the [key root] *) diff --git a/jscomp/others/bs_internalSetInt.ml b/jscomp/others/bs_internalSetInt.ml index c41ca5c9185..8d2c1aa04e9 100644 --- a/jscomp/others/bs_internalSetInt.ml +++ b/jscomp/others/bs_internalSetInt.ml @@ -8,15 +8,15 @@ module N = Bs_internalAVLset module A = Bs_Array -type t = elt N.t0 +type t = elt N.t -let rec mem (t : t) (x : elt) = +let rec has (t : t) (x : elt) = match N.toOpt t with | None -> false | Some n -> let v = N.key n in - x = v || mem (if x < v then N.left n else N.right n) x + x = v || has (if x < v then N.left n else N.right n) x let rec compareAux e1 e2 = @@ -33,7 +33,7 @@ let rec compareAux e1 e2 = let cmp s1 s2 = - let len1, len2 = N.length0 s1, N.length0 s2 in + let len1, len2 = N.size s1, N.size s2 in if len1 = len2 then compareAux (N.stackAllLeft s1 []) (N.stackAllLeft s2 []) else if len1 < len2 then -1 else 1 @@ -92,7 +92,7 @@ let rec getExn (n :t) (x : elt) = (****************************************************************************) let rec addMutate t (x : elt)= match N.toOpt t with - | None -> N.singleton0 x + | None -> N.singleton x | Some nt -> let k = N.key nt in if x = k then t diff --git a/jscomp/others/bs_internalSetString.ml b/jscomp/others/bs_internalSetString.ml index f8807248371..dc635aed824 100644 --- a/jscomp/others/bs_internalSetString.ml +++ b/jscomp/others/bs_internalSetString.ml @@ -8,15 +8,15 @@ module N = Bs_internalAVLset module A = Bs_Array -type t = elt N.t0 +type t = elt N.t -let rec mem (t : t) (x : elt) = +let rec has (t : t) (x : elt) = match N.toOpt t with | None -> false | Some n -> let v = N.key n in - x = v || mem (if x < v then N.left n else N.right n) x + x = v || has (if x < v then N.left n else N.right n) x let rec compareAux e1 e2 = @@ -33,7 +33,7 @@ let rec compareAux e1 e2 = let cmp s1 s2 = - let len1, len2 = N.length0 s1, N.length0 s2 in + let len1, len2 = N.size s1, N.size s2 in if len1 = len2 then compareAux (N.stackAllLeft s1 []) (N.stackAllLeft s2 []) else if len1 < len2 then -1 else 1 @@ -92,7 +92,7 @@ let rec getExn (n :t) (x : elt) = (****************************************************************************) let rec addMutate t (x : elt)= match N.toOpt t with - | None -> N.singleton0 x + | None -> N.singleton x | Some nt -> let k = N.key nt in if x = k then t diff --git a/jscomp/others/internal_set.cppo.ml b/jscomp/others/internal_set.cppo.ml index ecc835f554d..67b7e45b1b3 100644 --- a/jscomp/others/internal_set.cppo.ml +++ b/jscomp/others/internal_set.cppo.ml @@ -13,15 +13,15 @@ module N = Bs_internalAVLset module A = Bs_Array -type t = elt N.t0 +type t = elt N.t -let rec mem (t : t) (x : elt) = +let rec has (t : t) (x : elt) = match N.toOpt t with | None -> false | Some n -> let v = N.key n in - x = v || mem (if x < v then N.left n else N.right n) x + x = v || has (if x < v then N.left n else N.right n) x let rec compareAux e1 e2 = @@ -38,7 +38,7 @@ let rec compareAux e1 e2 = let cmp s1 s2 = - let len1, len2 = N.length0 s1, N.length0 s2 in + let len1, len2 = N.size s1, N.size s2 in if len1 = len2 then compareAux (N.stackAllLeft s1 []) (N.stackAllLeft s2 []) else if len1 < len2 then -1 else 1 @@ -97,7 +97,7 @@ let rec getExn (n :t) (x : elt) = (****************************************************************************) let rec addMutate t (x : elt)= match N.toOpt t with - | None -> N.singleton0 x + | None -> N.singleton x | Some nt -> let k = N.key nt in if x = k then t diff --git a/jscomp/others/set.cppo.ml b/jscomp/others/set.cppo.ml index 858fb011f87..40c63b51787 100644 --- a/jscomp/others/set.cppo.ml +++ b/jscomp/others/set.cppo.ml @@ -12,28 +12,27 @@ type elt = I.elt type t = I.t -let empty = N.empty0 -let isEmpty = N.isEmpty0 -let singleton = N.singleton0 -let minimum = N.minimum0 -let minUndefined = N.minUndefined0 -let maximum = N.maximum0 -let maxUndefined = N.maxUndefined0 -let forEach = N.iter0 -let reduce = N.fold0 -let every = N.every0 -let some = N.some0 -let keepBy = N.filterShared0 -let partition = N.partitionShared0 -let size = N.length0 -let toList = N.toList0 -let toArray = N.toArray0 -let ofSortedArrayUnsafe = N.ofSortedArrayUnsafe0 +let empty = N.empty +let isEmpty = N.isEmpty +let minimum = N.minimum +let minUndefined = N.minUndefined +let maximum = N.maximum +let maxUndefined = N.maxUndefined +let forEach = N.forEach +let reduce = N.reduce +let every = N.every +let some = N.some +let keepBy = N.filterShared +let partition = N.partitionShared +let size = N.size +let toList = N.toList +let toArray = N.toArray +let ofSortedArrayUnsafe = N.ofSortedArrayUnsafe let checkInvariantInternal = N.checkInvariantInternal let rec add (t : t) (x : elt) : t = match N.toOpt t with - None -> N.singleton0 x + None -> N.singleton x | Some nt -> let v = N.key nt in if x = v then t else @@ -96,7 +95,7 @@ let get = I.get let getUndefined = I.getUndefined let getExn = I.getExn let subset = I.subset -let has = I.mem +let has = I.has let rec splitAuxNoPivot (n : _ N.node) (x : elt) : t * t = let l,v,r = N.(left n , key n, right n) in diff --git a/jscomp/others/setm.cppo.ml b/jscomp/others/setm.cppo.ml index 15a5926ad06..704fd08532e 100644 --- a/jscomp/others/setm.cppo.ml +++ b/jscomp/others/setm.cppo.ml @@ -60,35 +60,35 @@ let removeMutate nt x = | Some nt -> removeMutateAux nt x -let empty () = t ~data:N.empty0 +let empty () = t ~data:N.empty let isEmpty d = - N.isEmpty0 (data d) + N.isEmpty (data d) let singleton x = - t ~data:(N.singleton0 x) + t ~data:(N.singleton x) let minimum d = - N.minimum0 (data d) + N.minimum (data d) let minUndefined d = - N.minUndefined0 (data d) + N.minUndefined (data d) let maximum d = - N.maximum0 (data d) + N.maximum (data d) let maxUndefined d = - N.maxUndefined0 (data d) + N.maxUndefined (data d) let forEach d f = - N.iter0 (data d) f + N.forEach (data d) f let reduce d acc cb = - N.fold0 (data d) acc cb + N.reduce (data d) acc cb let every d p = - N.every0 (data d) p + N.every (data d) p let some d p = - N.some0 (data d) p + N.some (data d) p let keepBy d p = t ~data:(N.filterCopy (data d) p ) @@ -96,13 +96,13 @@ let partition d p = let a , b = N.partitionCopy (data d) p in t ~data:a, t ~data:b let size d = - N.length0 (data d) + N.size (data d) let toList d = - N.toList0 (data d) + N.toList (data d) let toArray d = - N.toArray0 (data d) + N.toArray (data d) let ofSortedArrayUnsafe xs = - t ~data:(N.ofSortedArrayUnsafe0 xs) + t ~data:(N.ofSortedArrayUnsafe xs) let checkInvariantInternal d = N.checkInvariantInternal (data d) @@ -133,7 +133,7 @@ let rec removeArrayMutateAux t xs i len = let ele = A.getUnsafe xs i in let u = removeMutateAux t ele in match N.toOpt u with - | None -> N.empty0 + | None -> N.empty | Some t -> removeArrayMutateAux t xs (i+1) len else N.return t @@ -196,7 +196,7 @@ let rec addMutateCheckAux t (x : elt) added = match N.toOpt t with | None -> added := true; - N.singleton0 x + N.singleton x | Some nt -> let k = N.key nt in (* let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in *) @@ -234,7 +234,7 @@ let getExn d x = I.getExn (data d) x let split d key = let s = data d in - let arr = N.toArray0 s in + let arr = N.toArray s in let i = S.binarySearch arr key in let len = A.length arr in if i < 0 then @@ -325,6 +325,6 @@ let union (dataa : t) (datab : t) : t = let k = S.union tmp 0 sizea tmp sizea sizeb tmp2 0 in t ~data:(N.ofSortedArrayAux tmp2 0 k) -let has d x = I.mem (data d) x +let has d x = I.has (data d) x let copy d = t ~data:(N.copy (data d)) diff --git a/jscomp/test/bs_list_test.js b/jscomp/test/bs_list_test.js index d87a68ecb58..4c57cc9e680 100644 --- a/jscomp/test/bs_list_test.js +++ b/jscomp/test/bs_list_test.js @@ -563,21 +563,21 @@ var d = Bs_List.makeBy(10, (function (x) { return (x << 1); })); -eq("MAP2", Bs_List.map2(length_10_id, length_10_id, add), d); +eq("MAP2", Bs_List.zipBy(length_10_id, length_10_id, add), d); -eq("MAP2", Bs_List.map2(/* [] */0, /* :: */[ +eq("MAP2", Bs_List.zipBy(/* [] */0, /* :: */[ 1, /* [] */0 ], add), /* [] */0); -eq("MAP2", Bs_List.map2(/* :: */[ +eq("MAP2", Bs_List.zipBy(/* :: */[ 1, /* [] */0 ], /* [] */0, add), /* [] */0); -eq("MAP2", Bs_List.map2(/* [] */0, /* [] */0, add), /* [] */0); +eq("MAP2", Bs_List.zipBy(/* [] */0, /* [] */0, add), /* [] */0); -eq("MAP2", Bs_List.map2(length_10_id, length_10_id, add), Bs_List.concat(Bs_List.map(length_8_id, (function (x) { +eq("MAP2", Bs_List.zipBy(length_10_id, length_10_id, add), Bs_List.concat(Bs_List.map(length_8_id, (function (x) { return (x << 1); })), /* :: */[ 16, @@ -587,7 +587,7 @@ eq("MAP2", Bs_List.map2(length_10_id, length_10_id, add), Bs_List.concat(Bs_List ] ])); -eq("MAP2", Bs_List.map2(length_10_id, length_8_id, add), Bs_List.mapWithIndex(length_8_id, (function (i, x) { +eq("MAP2", Bs_List.zipBy(length_10_id, length_8_id, add), Bs_List.mapWithIndex(length_8_id, (function (i, x) { return i + x | 0; }))); @@ -599,7 +599,7 @@ var xs = Bs_List.reverse(Bs_List.mapReverse2(length_8_id, length_10_id, add)); eq("File \"bs_list_test.ml\", line 127, characters 5-12", Bs_List.length(xs), 8); -eq("MAP2", xs, Bs_List.map2(length_10_id, length_8_id, add)); +eq("MAP2", xs, Bs_List.zipBy(length_10_id, length_8_id, add)); eq("TAKE", Bs_List.take(/* :: */[ 1, diff --git a/jscomp/test/bs_list_test.ml b/jscomp/test/bs_list_test.ml index f16f3ae2c2e..b73c2ba1869 100644 --- a/jscomp/test/bs_list_test.ml +++ b/jscomp/test/bs_list_test.ml @@ -113,7 +113,7 @@ let () = let b = length_10_id in let c = length_8_id in let d = N.makeBy 10 (fun [@bs] x -> 2 * x ) in - let map2_add x y = N.map2 x y add in + let map2_add x y = N.zipBy x y add in map2_add length_10_id b =~ d ; map2_add [] [1] =~ []; map2_add [1] [] =~ []; @@ -125,7 +125,7 @@ let () = =~ N.map length_10_id (fun [@bs] x -> x * 2); let xs = (N.reverse (N.mapReverse2 length_8_id length_10_id add)) in eq __LOC__ (N.length xs) 8; - xs =~ (N.map2 length_10_id length_8_id add) + xs =~ (N.zipBy length_10_id length_8_id add) let () = let (=~) = eq "TAKE" in diff --git a/jscomp/test/ffi_test.js b/jscomp/test/ffi_test.js index 445c3e4cb5b..50b53d3b134 100644 --- a/jscomp/test/ffi_test.js +++ b/jscomp/test/ffi_test.js @@ -9,8 +9,6 @@ var a = true; var b = false; -var d = undefined; - var Textarea = /* module */[]; var Int32Array = /* module */[]; @@ -29,6 +27,8 @@ function f() { var c = null; +var d = undefined; + exports.u = u; exports.a = a; exports.b = b; diff --git a/lib/js/bs_Array.js b/lib/js/bs_Array.js index 0efe34dfeaa..a6f1fc413da 100644 --- a/lib/js/bs_Array.js +++ b/lib/js/bs_Array.js @@ -121,7 +121,7 @@ function zip(xs, ys) { return s; } -function map2(xs, ys, f) { +function zipBy(xs, ys, f) { var lenx = xs.length; var leny = ys.length; var len = lenx < leny ? lenx : leny; @@ -479,7 +479,7 @@ exports.toList = toList; exports.ofList = ofList; exports.forEach = forEach; exports.map = map; -exports.map2 = map2; +exports.zipBy = zipBy; exports.keepBy = keepBy; exports.keepMap = keepMap; exports.forEachWithIndex = forEachWithIndex; diff --git a/lib/js/bs_List.js b/lib/js/bs_List.js index 3b87b11b71f..507e28895cb 100644 --- a/lib/js/bs_List.js +++ b/lib/js/bs_List.js @@ -515,7 +515,7 @@ function map(xs, f) { } } -function map2(l1, l2, f) { +function zipBy(l1, l2, f) { if (l1) { if (l2) { var cell = /* :: */[ @@ -1273,7 +1273,7 @@ exports.take = take; exports.splitAt = splitAt; exports.concat = concat; exports.map = map; -exports.map2 = map2; +exports.zipBy = zipBy; exports.mapWithIndex = mapWithIndex; exports.length = length; exports.toArray = toArray; diff --git a/lib/js/bs_SetInt.js b/lib/js/bs_SetInt.js index 8ffeaa311f2..762c09a8a2d 100644 --- a/lib/js/bs_SetInt.js +++ b/lib/js/bs_SetInt.js @@ -28,7 +28,7 @@ function add(t, x) { } } } else { - return Bs_internalAVLset.singleton0(x); + return Bs_internalAVLset.singleton(x); } } @@ -107,7 +107,7 @@ function splitAuxNoPivot(n, x) { ]; } else { return /* tuple */[ - null, + Bs_internalAVLset.empty, n ]; } @@ -120,7 +120,7 @@ function splitAuxNoPivot(n, x) { } else { return /* tuple */[ n, - null + Bs_internalAVLset.empty ]; } } @@ -144,7 +144,7 @@ function splitAuxPivot(n, x, pres) { ]; } else { return /* tuple */[ - null, + Bs_internalAVLset.empty, n ]; } @@ -157,7 +157,7 @@ function splitAuxPivot(n, x, pres) { } else { return /* tuple */[ n, - null + Bs_internalAVLset.empty ]; } } @@ -173,8 +173,8 @@ function split(t, x) { } else { return /* tuple */[ /* tuple */[ - null, - null + Bs_internalAVLset.empty, + Bs_internalAVLset.empty ], /* false */0 ]; @@ -229,10 +229,10 @@ function intersect(s1, s2) { return Bs_internalAVLset.concatShared(ll, rr); } } else { - return null; + return Bs_internalAVLset.empty; } } else { - return null; + return Bs_internalAVLset.empty; } } @@ -259,15 +259,15 @@ function diff(s1, s2) { } } -var empty = Bs_internalAVLset.empty0; +var empty = Bs_internalAVLset.empty; var ofArray = Bs_internalSetInt.ofArray; -var ofSortedArrayUnsafe = Bs_internalAVLset.ofSortedArrayUnsafe0; +var ofSortedArrayUnsafe = Bs_internalAVLset.ofSortedArrayUnsafe; -var isEmpty = Bs_internalAVLset.isEmpty0; +var isEmpty = Bs_internalAVLset.isEmpty; -var has = Bs_internalSetInt.mem; +var has = Bs_internalSetInt.has; var subset = Bs_internalSetInt.subset; @@ -275,31 +275,31 @@ var cmp = Bs_internalSetInt.cmp; var eq = Bs_internalSetInt.eq; -var forEach = Bs_internalAVLset.iter0; +var forEach = Bs_internalAVLset.forEach; -var reduce = Bs_internalAVLset.fold0; +var reduce = Bs_internalAVLset.reduce; -var every = Bs_internalAVLset.every0; +var every = Bs_internalAVLset.every; -var some = Bs_internalAVLset.some0; +var some = Bs_internalAVLset.some; -var keepBy = Bs_internalAVLset.filterShared0; +var keepBy = Bs_internalAVLset.filterShared; -var partition = Bs_internalAVLset.partitionShared0; +var partition = Bs_internalAVLset.partitionShared; -var size = Bs_internalAVLset.length0; +var size = Bs_internalAVLset.size; -var toList = Bs_internalAVLset.toList0; +var toList = Bs_internalAVLset.toList; -var toArray = Bs_internalAVLset.toArray0; +var toArray = Bs_internalAVLset.toArray; -var minimum = Bs_internalAVLset.minimum0; +var minimum = Bs_internalAVLset.minimum; -var minUndefined = Bs_internalAVLset.minUndefined0; +var minUndefined = Bs_internalAVLset.minUndefined; -var maximum = Bs_internalAVLset.maximum0; +var maximum = Bs_internalAVLset.maximum; -var maxUndefined = Bs_internalAVLset.maxUndefined0; +var maxUndefined = Bs_internalAVLset.maxUndefined; var get = Bs_internalSetInt.get; diff --git a/lib/js/bs_SetIntM.js b/lib/js/bs_SetIntM.js index d8fb24f37f6..36b4ee5bdb3 100644 --- a/lib/js/bs_SetIntM.js +++ b/lib/js/bs_SetIntM.js @@ -58,44 +58,44 @@ function removeMutate(nt, x) { function empty() { return { - data: Bs_internalAVLset.empty0 + data: Bs_internalAVLset.empty }; } function isEmpty(d) { - return Bs_internalAVLset.isEmpty0(d.data); + return Bs_internalAVLset.isEmpty(d.data); } function minimum(d) { - return Bs_internalAVLset.minimum0(d.data); + return Bs_internalAVLset.minimum(d.data); } function minUndefined(d) { - return Bs_internalAVLset.minUndefined0(d.data); + return Bs_internalAVLset.minUndefined(d.data); } function maximum(d) { - return Bs_internalAVLset.maximum0(d.data); + return Bs_internalAVLset.maximum(d.data); } function maxUndefined(d) { - return Bs_internalAVLset.maxUndefined0(d.data); + return Bs_internalAVLset.maxUndefined(d.data); } function forEach(d, f) { - return Bs_internalAVLset.iter0(d.data, f); + return Bs_internalAVLset.forEach(d.data, f); } function reduce(d, acc, cb) { - return Bs_internalAVLset.fold0(d.data, acc, cb); + return Bs_internalAVLset.reduce(d.data, acc, cb); } function every(d, p) { - return Bs_internalAVLset.every0(d.data, p); + return Bs_internalAVLset.every(d.data, p); } function some(d, p) { - return Bs_internalAVLset.some0(d.data, p); + return Bs_internalAVLset.some(d.data, p); } function keepBy(d, p) { @@ -117,20 +117,20 @@ function partition(d, p) { } function size(d) { - return Bs_internalAVLset.length0(d.data); + return Bs_internalAVLset.size(d.data); } function toList(d) { - return Bs_internalAVLset.toList0(d.data); + return Bs_internalAVLset.toList(d.data); } function toArray(d) { - return Bs_internalAVLset.toArray0(d.data); + return Bs_internalAVLset.toArray(d.data); } function ofSortedArrayUnsafe(xs) { return { - data: Bs_internalAVLset.ofSortedArrayUnsafe0(xs) + data: Bs_internalAVLset.ofSortedArrayUnsafe(xs) }; } @@ -184,7 +184,7 @@ function removeArrayMutateAux(_t, xs, _i, len) { continue ; } else { - return Bs_internalAVLset.empty0; + return Bs_internalAVLset.empty; } } else { return t; @@ -277,7 +277,7 @@ function addMutateCheckAux(t, x, added) { } } else { added[0] = /* true */1; - return Bs_internalAVLset.singleton0(x); + return Bs_internalAVLset.singleton(x); } } @@ -319,7 +319,7 @@ function getExn(d, x) { function split(d, key) { var s = d.data; - var arr = Bs_internalAVLset.toArray0(s); + var arr = Bs_internalAVLset.toArray(s); var i = Bs_SortInt.binarySearch(arr, key); var len = arr.length; if (i < 0) { @@ -367,7 +367,7 @@ function intersect(dataa, datab) { Bs_internalAVLset.fillArray(datab$1, sizea, tmp); if (tmp[sizea - 1 | 0] < tmp[sizea] || tmp[totalSize - 1 | 0] < tmp[0]) { return { - data: Bs_internalAVLset.empty0 + data: Bs_internalAVLset.empty }; } else { var tmp2 = new Array(sizea < sizeb ? sizea : sizeb); @@ -378,12 +378,12 @@ function intersect(dataa, datab) { } } else { return { - data: Bs_internalAVLset.empty0 + data: Bs_internalAVLset.empty }; } } else { return { - data: Bs_internalAVLset.empty0 + data: Bs_internalAVLset.empty }; } } @@ -417,7 +417,7 @@ function diff(dataa, datab) { } } else { return { - data: Bs_internalAVLset.empty0 + data: Bs_internalAVLset.empty }; } } @@ -457,7 +457,7 @@ function union(dataa, datab) { } function has(d, x) { - return Bs_internalSetInt.mem(d.data, x); + return Bs_internalSetInt.has(d.data, x); } function copy(d) { diff --git a/lib/js/bs_SetM.js b/lib/js/bs_SetM.js index 30b787590ab..ff77eeaa431 100644 --- a/lib/js/bs_SetM.js +++ b/lib/js/bs_SetM.js @@ -71,7 +71,7 @@ function removeArrayMutateAux(_t, xs, _i, len, cmp) { continue ; } else { - return Bs_internalAVLset.empty0; + return Bs_internalAVLset.empty; } } else { return t; @@ -137,11 +137,11 @@ function removeMutateCheckAux(nt, x, removed, cmp) { } function removeCheck(d, v) { - var dict = d.dict; var oldRoot = d.data; if (oldRoot !== null) { + var M = d.dict; var removed = [/* false */0]; - var newRoot = removeMutateCheckAux(oldRoot, v, removed, dict[/* cmp */0]); + var newRoot = removeMutateCheckAux(oldRoot, v, removed, M[/* cmp */0]); if (newRoot !== oldRoot) { d.data = newRoot; } @@ -170,7 +170,7 @@ function addMutateCheckAux(t, x, added, cmp) { } } else { added[0] = /* true */1; - return Bs_internalAVLset.singleton0(x); + return Bs_internalAVLset.singleton(x); } } @@ -186,21 +186,20 @@ function addCheck(m, e) { } function split(d, key) { - var dict = d.dict; - var s = d.data; - var arr = Bs_internalAVLset.toArray0(s); - var i = Bs_Sort.binarySearchBy(arr, key, dict[/* cmp */0]); + var M = d.dict; + var arr = Bs_internalAVLset.toArray(d.data); + var i = Bs_Sort.binarySearchBy(arr, key, M[/* cmp */0]); var len = arr.length; if (i < 0) { var next = (-i | 0) - 1 | 0; return /* tuple */[ /* tuple */[ { - dict: dict, + dict: M, data: Bs_internalAVLset.ofSortedArrayAux(arr, 0, next) }, { - dict: dict, + dict: M, data: Bs_internalAVLset.ofSortedArrayAux(arr, next, len - next | 0) } ], @@ -210,11 +209,11 @@ function split(d, key) { return /* tuple */[ /* tuple */[ { - dict: dict, + dict: M, data: Bs_internalAVLset.ofSortedArrayAux(arr, 0, i) }, { - dict: dict, + dict: M, data: Bs_internalAVLset.ofSortedArrayAux(arr, i + 1 | 0, (len - i | 0) - 1 | 0) } ], @@ -224,18 +223,15 @@ function split(d, key) { } function keepBy(d, p) { - var data = d.data; - var dict = d.dict; return { - dict: dict, - data: Bs_internalAVLset.filterCopy(data, p) + dict: d.dict, + data: Bs_internalAVLset.filterCopy(d.data, p) }; } function partition(d, p) { - var data = d.data; var dict = d.dict; - var match = Bs_internalAVLset.partitionCopy(data, p); + var match = Bs_internalAVLset.partitionCopy(d.data, p); return /* tuple */[ { dict: dict, @@ -251,62 +247,62 @@ function partition(d, p) { function empty(dict) { return { dict: dict, - data: Bs_internalAVLset.empty0 + data: Bs_internalAVLset.empty }; } function isEmpty(d) { - return Bs_internalAVLset.isEmpty0(d.data); + return Bs_internalAVLset.isEmpty(d.data); } function minimum(d) { - return Bs_internalAVLset.minimum0(d.data); + return Bs_internalAVLset.minimum(d.data); } function minUndefined(d) { - return Bs_internalAVLset.minUndefined0(d.data); + return Bs_internalAVLset.minUndefined(d.data); } function maximum(d) { - return Bs_internalAVLset.maximum0(d.data); + return Bs_internalAVLset.maximum(d.data); } function maxUndefined(d) { - return Bs_internalAVLset.maxUndefined0(d.data); + return Bs_internalAVLset.maxUndefined(d.data); } function forEach(d, f) { - return Bs_internalAVLset.iter0(d.data, f); + return Bs_internalAVLset.forEach(d.data, f); } function reduce(d, acc, cb) { - return Bs_internalAVLset.fold0(d.data, acc, cb); + return Bs_internalAVLset.reduce(d.data, acc, cb); } function every(d, p) { - return Bs_internalAVLset.every0(d.data, p); + return Bs_internalAVLset.every(d.data, p); } function some(d, p) { - return Bs_internalAVLset.some0(d.data, p); + return Bs_internalAVLset.some(d.data, p); } function size(d) { - return Bs_internalAVLset.length0(d.data); + return Bs_internalAVLset.size(d.data); } function toList(d) { - return Bs_internalAVLset.toList0(d.data); + return Bs_internalAVLset.toList(d.data); } function toArray(d) { - return Bs_internalAVLset.toArray0(d.data); + return Bs_internalAVLset.toArray(d.data); } function ofSortedArrayUnsafe(xs, dict) { return { dict: dict, - data: Bs_internalAVLset.ofSortedArrayUnsafe0(xs) + data: Bs_internalAVLset.ofSortedArrayUnsafe(xs) }; } @@ -316,44 +312,44 @@ function checkInvariantInternal(d) { function cmp(d0, d1) { var M = d0.dict; - return Bs_internalAVLset.cmp0(d0.data, d1.data, M[/* cmp */0]); + return Bs_internalAVLset.cmp(d0.data, d1.data, M[/* cmp */0]); } function eq(d0, d1) { var M = d0.dict; - return Bs_internalAVLset.eq0(d0.data, d1.data, M[/* cmp */0]); + return Bs_internalAVLset.eq(d0.data, d1.data, M[/* cmp */0]); } function get(d, x) { var M = d.dict; - return Bs_internalAVLset.get0(d.data, x, M[/* cmp */0]); + return Bs_internalAVLset.get(d.data, x, M[/* cmp */0]); } function getUndefined(d, x) { var M = d.dict; - return Bs_internalAVLset.getUndefined0(d.data, x, M[/* cmp */0]); + return Bs_internalAVLset.getUndefined(d.data, x, M[/* cmp */0]); } function getExn(d, x) { - var dict = d.dict; - return Bs_internalAVLset.getExn0(d.data, x, dict[/* cmp */0]); + var M = d.dict; + return Bs_internalAVLset.getExn(d.data, x, M[/* cmp */0]); } function has(d, x) { - var dict = d.dict; - return Bs_internalAVLset.mem0(d.data, x, dict[/* cmp */0]); + var M = d.dict; + return Bs_internalAVLset.has(d.data, x, M[/* cmp */0]); } function ofArray(data, dict) { return { dict: dict, - data: Bs_internalAVLset.ofArray0(data, dict[/* cmp */0]) + data: Bs_internalAVLset.ofArray(data, dict[/* cmp */0]) }; } function add(m, e) { - var oldRoot = m.data; var M = m.dict; + var oldRoot = m.data; var newRoot = Bs_internalAVLset.addMutate(M[/* cmp */0], oldRoot, e); if (newRoot !== oldRoot) { m.data = newRoot; @@ -372,104 +368,98 @@ function addArrayMutate(t, xs, cmp) { } function mergeMany(d, xs) { - var oldRoot = d.data; var M = d.dict; - var newRoot = addArrayMutate(oldRoot, xs, M[/* cmp */0]); - if (newRoot !== oldRoot) { - d.data = newRoot; - return /* () */0; - } else { - return 0; - } + d.data = addArrayMutate(d.data, xs, M[/* cmp */0]); + return /* () */0; } function subset(a, b) { var M = a.dict; - return Bs_internalAVLset.subset0(a.data, b.data, M[/* cmp */0]); + return Bs_internalAVLset.subset(a.data, b.data, M[/* cmp */0]); } function intersect(a, b) { - var dict = a.dict; - var dataa = a.data; - var datab = b.data; - if (dataa !== null) { - if (datab !== null) { - var sizea = Bs_internalAVLset.lengthNode(dataa); - var sizeb = Bs_internalAVLset.lengthNode(datab); + var M = a.dict; + var match = a.data; + var match$1 = b.data; + if (match !== null) { + if (match$1 !== null) { + var sizea = Bs_internalAVLset.lengthNode(match); + var sizeb = Bs_internalAVLset.lengthNode(match$1); var totalSize = sizea + sizeb | 0; var tmp = new Array(totalSize); - Bs_internalAVLset.fillArray(dataa, 0, tmp); - Bs_internalAVLset.fillArray(datab, sizea, tmp); - var p = dict[/* cmp */0]; + Bs_internalAVLset.fillArray(match, 0, tmp); + Bs_internalAVLset.fillArray(match$1, sizea, tmp); + var p = M[/* cmp */0]; if (p(tmp[sizea - 1 | 0], tmp[sizea]) < 0 || p(tmp[totalSize - 1 | 0], tmp[0]) < 0) { return { - dict: dict, - data: Bs_internalAVLset.empty0 + dict: M, + data: Bs_internalAVLset.empty }; } else { var tmp2 = new Array(sizea < sizeb ? sizea : sizeb); var k = Bs_Sort.intersect(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0, p); return { - dict: dict, + dict: M, data: Bs_internalAVLset.ofSortedArrayAux(tmp2, 0, k) }; } } else { return { - dict: dict, - data: Bs_internalAVLset.empty0 + dict: M, + data: Bs_internalAVLset.empty }; } } else { return { - dict: dict, - data: Bs_internalAVLset.empty0 + dict: M, + data: Bs_internalAVLset.empty }; } } function diff(a, b) { - var dict = a.dict; + var M = a.dict; var dataa = a.data; - var datab = b.data; + var match = b.data; if (dataa !== null) { - if (datab !== null) { + if (match !== null) { var sizea = Bs_internalAVLset.lengthNode(dataa); - var sizeb = Bs_internalAVLset.lengthNode(datab); + var sizeb = Bs_internalAVLset.lengthNode(match); var totalSize = sizea + sizeb | 0; var tmp = new Array(totalSize); Bs_internalAVLset.fillArray(dataa, 0, tmp); - Bs_internalAVLset.fillArray(datab, sizea, tmp); - var p = dict[/* cmp */0]; + Bs_internalAVLset.fillArray(match, sizea, tmp); + var p = M[/* cmp */0]; if (p(tmp[sizea - 1 | 0], tmp[sizea]) < 0 || p(tmp[totalSize - 1 | 0], tmp[0]) < 0) { return { - dict: dict, + dict: M, data: Bs_internalAVLset.copy(dataa) }; } else { var tmp2 = new Array(sizea); var k = Bs_Sort.diff(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0, p); return { - dict: dict, + dict: M, data: Bs_internalAVLset.ofSortedArrayAux(tmp2, 0, k) }; } } else { return { - dict: dict, + dict: M, data: Bs_internalAVLset.copy(dataa) }; } } else { return { - dict: dict, - data: Bs_internalAVLset.empty0 + dict: M, + data: Bs_internalAVLset.empty }; } } function union(a, b) { - var dict = a.dict; + var M = a.dict; var dataa = a.data; var datab = b.data; if (dataa !== null) { @@ -480,29 +470,29 @@ function union(a, b) { var tmp = new Array(totalSize); Bs_internalAVLset.fillArray(dataa, 0, tmp); Bs_internalAVLset.fillArray(datab, sizea, tmp); - var p = dict[/* cmp */0]; + var p = M[/* cmp */0]; if (p(tmp[sizea - 1 | 0], tmp[sizea]) < 0) { return { - dict: dict, + dict: M, data: Bs_internalAVLset.ofSortedArrayAux(tmp, 0, totalSize) }; } else { var tmp2 = new Array(totalSize); var k = Bs_Sort.union(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0, p); return { - dict: dict, + dict: M, data: Bs_internalAVLset.ofSortedArrayAux(tmp2, 0, k) }; } } else { return { - dict: dict, + dict: M, data: Bs_internalAVLset.copy(dataa) }; } } else { return { - dict: dict, + dict: M, data: Bs_internalAVLset.copy(datab) }; } diff --git a/lib/js/bs_SetString.js b/lib/js/bs_SetString.js index 610ed566805..f87f6ca1919 100644 --- a/lib/js/bs_SetString.js +++ b/lib/js/bs_SetString.js @@ -28,7 +28,7 @@ function add(t, x) { } } } else { - return Bs_internalAVLset.singleton0(x); + return Bs_internalAVLset.singleton(x); } } @@ -107,7 +107,7 @@ function splitAuxNoPivot(n, x) { ]; } else { return /* tuple */[ - null, + Bs_internalAVLset.empty, n ]; } @@ -120,7 +120,7 @@ function splitAuxNoPivot(n, x) { } else { return /* tuple */[ n, - null + Bs_internalAVLset.empty ]; } } @@ -144,7 +144,7 @@ function splitAuxPivot(n, x, pres) { ]; } else { return /* tuple */[ - null, + Bs_internalAVLset.empty, n ]; } @@ -157,7 +157,7 @@ function splitAuxPivot(n, x, pres) { } else { return /* tuple */[ n, - null + Bs_internalAVLset.empty ]; } } @@ -173,8 +173,8 @@ function split(t, x) { } else { return /* tuple */[ /* tuple */[ - null, - null + Bs_internalAVLset.empty, + Bs_internalAVLset.empty ], /* false */0 ]; @@ -229,10 +229,10 @@ function intersect(s1, s2) { return Bs_internalAVLset.concatShared(ll, rr); } } else { - return null; + return Bs_internalAVLset.empty; } } else { - return null; + return Bs_internalAVLset.empty; } } @@ -259,15 +259,15 @@ function diff(s1, s2) { } } -var empty = Bs_internalAVLset.empty0; +var empty = Bs_internalAVLset.empty; var ofArray = Bs_internalSetString.ofArray; -var ofSortedArrayUnsafe = Bs_internalAVLset.ofSortedArrayUnsafe0; +var ofSortedArrayUnsafe = Bs_internalAVLset.ofSortedArrayUnsafe; -var isEmpty = Bs_internalAVLset.isEmpty0; +var isEmpty = Bs_internalAVLset.isEmpty; -var has = Bs_internalSetString.mem; +var has = Bs_internalSetString.has; var subset = Bs_internalSetString.subset; @@ -275,31 +275,31 @@ var cmp = Bs_internalSetString.cmp; var eq = Bs_internalSetString.eq; -var forEach = Bs_internalAVLset.iter0; +var forEach = Bs_internalAVLset.forEach; -var reduce = Bs_internalAVLset.fold0; +var reduce = Bs_internalAVLset.reduce; -var every = Bs_internalAVLset.every0; +var every = Bs_internalAVLset.every; -var some = Bs_internalAVLset.some0; +var some = Bs_internalAVLset.some; -var keepBy = Bs_internalAVLset.filterShared0; +var keepBy = Bs_internalAVLset.filterShared; -var partition = Bs_internalAVLset.partitionShared0; +var partition = Bs_internalAVLset.partitionShared; -var size = Bs_internalAVLset.length0; +var size = Bs_internalAVLset.size; -var toList = Bs_internalAVLset.toList0; +var toList = Bs_internalAVLset.toList; -var toArray = Bs_internalAVLset.toArray0; +var toArray = Bs_internalAVLset.toArray; -var minimum = Bs_internalAVLset.minimum0; +var minimum = Bs_internalAVLset.minimum; -var minUndefined = Bs_internalAVLset.minUndefined0; +var minUndefined = Bs_internalAVLset.minUndefined; -var maximum = Bs_internalAVLset.maximum0; +var maximum = Bs_internalAVLset.maximum; -var maxUndefined = Bs_internalAVLset.maxUndefined0; +var maxUndefined = Bs_internalAVLset.maxUndefined; var get = Bs_internalSetString.get; diff --git a/lib/js/bs_SetStringM.js b/lib/js/bs_SetStringM.js index c5d90f495b8..109d3935740 100644 --- a/lib/js/bs_SetStringM.js +++ b/lib/js/bs_SetStringM.js @@ -58,44 +58,44 @@ function removeMutate(nt, x) { function empty() { return { - data: Bs_internalAVLset.empty0 + data: Bs_internalAVLset.empty }; } function isEmpty(d) { - return Bs_internalAVLset.isEmpty0(d.data); + return Bs_internalAVLset.isEmpty(d.data); } function minimum(d) { - return Bs_internalAVLset.minimum0(d.data); + return Bs_internalAVLset.minimum(d.data); } function minUndefined(d) { - return Bs_internalAVLset.minUndefined0(d.data); + return Bs_internalAVLset.minUndefined(d.data); } function maximum(d) { - return Bs_internalAVLset.maximum0(d.data); + return Bs_internalAVLset.maximum(d.data); } function maxUndefined(d) { - return Bs_internalAVLset.maxUndefined0(d.data); + return Bs_internalAVLset.maxUndefined(d.data); } function forEach(d, f) { - return Bs_internalAVLset.iter0(d.data, f); + return Bs_internalAVLset.forEach(d.data, f); } function reduce(d, acc, cb) { - return Bs_internalAVLset.fold0(d.data, acc, cb); + return Bs_internalAVLset.reduce(d.data, acc, cb); } function every(d, p) { - return Bs_internalAVLset.every0(d.data, p); + return Bs_internalAVLset.every(d.data, p); } function some(d, p) { - return Bs_internalAVLset.some0(d.data, p); + return Bs_internalAVLset.some(d.data, p); } function keepBy(d, p) { @@ -117,20 +117,20 @@ function partition(d, p) { } function size(d) { - return Bs_internalAVLset.length0(d.data); + return Bs_internalAVLset.size(d.data); } function toList(d) { - return Bs_internalAVLset.toList0(d.data); + return Bs_internalAVLset.toList(d.data); } function toArray(d) { - return Bs_internalAVLset.toArray0(d.data); + return Bs_internalAVLset.toArray(d.data); } function ofSortedArrayUnsafe(xs) { return { - data: Bs_internalAVLset.ofSortedArrayUnsafe0(xs) + data: Bs_internalAVLset.ofSortedArrayUnsafe(xs) }; } @@ -184,7 +184,7 @@ function removeArrayMutateAux(_t, xs, _i, len) { continue ; } else { - return Bs_internalAVLset.empty0; + return Bs_internalAVLset.empty; } } else { return t; @@ -277,7 +277,7 @@ function addMutateCheckAux(t, x, added) { } } else { added[0] = /* true */1; - return Bs_internalAVLset.singleton0(x); + return Bs_internalAVLset.singleton(x); } } @@ -319,7 +319,7 @@ function getExn(d, x) { function split(d, key) { var s = d.data; - var arr = Bs_internalAVLset.toArray0(s); + var arr = Bs_internalAVLset.toArray(s); var i = Bs_SortString.binarySearch(arr, key); var len = arr.length; if (i < 0) { @@ -367,7 +367,7 @@ function intersect(dataa, datab) { Bs_internalAVLset.fillArray(datab$1, sizea, tmp); if (tmp[sizea - 1 | 0] < tmp[sizea] || tmp[totalSize - 1 | 0] < tmp[0]) { return { - data: Bs_internalAVLset.empty0 + data: Bs_internalAVLset.empty }; } else { var tmp2 = new Array(sizea < sizeb ? sizea : sizeb); @@ -378,12 +378,12 @@ function intersect(dataa, datab) { } } else { return { - data: Bs_internalAVLset.empty0 + data: Bs_internalAVLset.empty }; } } else { return { - data: Bs_internalAVLset.empty0 + data: Bs_internalAVLset.empty }; } } @@ -417,7 +417,7 @@ function diff(dataa, datab) { } } else { return { - data: Bs_internalAVLset.empty0 + data: Bs_internalAVLset.empty }; } } @@ -457,7 +457,7 @@ function union(dataa, datab) { } function has(d, x) { - return Bs_internalSetString.mem(d.data, x); + return Bs_internalSetString.has(d.data, x); } function copy(d) { diff --git a/lib/js/bs_SortedSetDict.js b/lib/js/bs_SortedSetDict.js index 833d8f2a5ee..7bd595e9169 100644 --- a/lib/js/bs_SortedSetDict.js +++ b/lib/js/bs_SortedSetDict.js @@ -28,7 +28,7 @@ function add(t, x, cmp) { return t; } } else { - return Bs_internalAVLset.singleton0(x); + return Bs_internalAVLset.singleton(x); } } @@ -105,7 +105,7 @@ function splitAuxNoPivot(cmp, n, x) { ]; } else { return /* tuple */[ - null, + Bs_internalAVLset.empty, n ]; } @@ -118,7 +118,7 @@ function splitAuxNoPivot(cmp, n, x) { } else { return /* tuple */[ n, - null + Bs_internalAVLset.empty ]; } } else { @@ -144,7 +144,7 @@ function splitAuxPivot(cmp, n, x, pres) { ]; } else { return /* tuple */[ - null, + Bs_internalAVLset.empty, n ]; } @@ -157,7 +157,7 @@ function splitAuxPivot(cmp, n, x, pres) { } else { return /* tuple */[ n, - null + Bs_internalAVLset.empty ]; } } else { @@ -180,8 +180,8 @@ function split(t, x, cmp) { } else { return /* tuple */[ /* tuple */[ - null, - null + Bs_internalAVLset.empty, + Bs_internalAVLset.empty ], /* false */0 ]; @@ -236,10 +236,10 @@ function intersect(s1, s2, cmp) { return Bs_internalAVLset.concatShared(ll, rr); } } else { - return null; + return Bs_internalAVLset.empty; } } else { - return null; + return Bs_internalAVLset.empty; } } @@ -266,53 +266,53 @@ function diff(s1, s2, cmp) { } } -var empty = Bs_internalAVLset.empty0; +var empty = Bs_internalAVLset.empty; -var ofArray = Bs_internalAVLset.ofArray0; +var ofArray = Bs_internalAVLset.ofArray; -var ofSortedArrayUnsafe = Bs_internalAVLset.ofSortedArrayUnsafe0; +var ofSortedArrayUnsafe = Bs_internalAVLset.ofSortedArrayUnsafe; -var isEmpty = Bs_internalAVLset.isEmpty0; +var isEmpty = Bs_internalAVLset.isEmpty; -var has = Bs_internalAVLset.mem0; +var has = Bs_internalAVLset.has; -var subset = Bs_internalAVLset.subset0; +var subset = Bs_internalAVLset.subset; -var cmp = Bs_internalAVLset.cmp0; +var cmp = Bs_internalAVLset.cmp; -var eq = Bs_internalAVLset.eq0; +var eq = Bs_internalAVLset.eq; -var forEach = Bs_internalAVLset.iter0; +var forEach = Bs_internalAVLset.forEach; -var reduce = Bs_internalAVLset.fold0; +var reduce = Bs_internalAVLset.reduce; -var every = Bs_internalAVLset.every0; +var every = Bs_internalAVLset.every; -var some = Bs_internalAVLset.some0; +var some = Bs_internalAVLset.some; -var keepBy = Bs_internalAVLset.filterShared0; +var keepBy = Bs_internalAVLset.filterShared; -var partition = Bs_internalAVLset.partitionShared0; +var partition = Bs_internalAVLset.partitionShared; -var size = Bs_internalAVLset.length0; +var size = Bs_internalAVLset.size; -var toList = Bs_internalAVLset.toList0; +var toList = Bs_internalAVLset.toList; -var toArray = Bs_internalAVLset.toArray0; +var toArray = Bs_internalAVLset.toArray; -var minimum = Bs_internalAVLset.minimum0; +var minimum = Bs_internalAVLset.minimum; -var minUndefined = Bs_internalAVLset.minUndefined0; +var minUndefined = Bs_internalAVLset.minUndefined; -var maximum = Bs_internalAVLset.maximum0; +var maximum = Bs_internalAVLset.maximum; -var maxUndefined = Bs_internalAVLset.maxUndefined0; +var maxUndefined = Bs_internalAVLset.maxUndefined; -var get = Bs_internalAVLset.get0; +var get = Bs_internalAVLset.get; -var getUndefined = Bs_internalAVLset.getUndefined0; +var getUndefined = Bs_internalAVLset.getUndefined; -var getExn = Bs_internalAVLset.getExn0; +var getExn = Bs_internalAVLset.getExn; var checkInvariantInternal = Bs_internalAVLset.checkInvariantInternal; diff --git a/lib/js/bs_internalAVLset.js b/lib/js/bs_internalAVLset.js index eb94a80fc1a..3d0102988e6 100644 --- a/lib/js/bs_internalAVLset.js +++ b/lib/js/bs_internalAVLset.js @@ -36,7 +36,7 @@ function create(l, v, r) { }; } -function singleton0(x) { +function singleton(x) { return { left: null, key: x, @@ -108,7 +108,7 @@ function min0Aux(_n) { }; } -function minimum0(n) { +function minimum(n) { if (n !== null) { return /* Some */[min0Aux(n)]; } else { @@ -116,7 +116,7 @@ function minimum0(n) { } } -function minUndefined0(n) { +function minUndefined(n) { if (n !== null) { return min0Aux(n); } else { @@ -138,7 +138,7 @@ function max0Aux(_n) { }; } -function maximum0(n) { +function maximum(n) { if (n !== null) { return /* Some */[max0Aux(n)]; } else { @@ -146,7 +146,7 @@ function maximum0(n) { } } -function maxUndefined0(n) { +function maxUndefined(n) { if (n !== null) { return max0Aux(n); } else { @@ -166,9 +166,7 @@ function removeMinAuxWithRef(n, v) { } } -var empty0 = null; - -function isEmpty0(n) { +function isEmpty(n) { if (n !== null) { return /* false */0; } else { @@ -194,11 +192,11 @@ function stackAllLeft(_v, _s) { }; } -function iter0(_n, f) { +function forEach(_n, f) { while(true) { var n = _n; if (n !== null) { - iter0(n.left, f); + forEach(n.left, f); f(n.key); _n = n.right; continue ; @@ -209,7 +207,7 @@ function iter0(_n, f) { }; } -function fold0(_s, _accu, f) { +function reduce(_s, _accu, f) { while(true) { var accu = _accu; var s = _s; @@ -217,7 +215,7 @@ function fold0(_s, _accu, f) { var l = s.left; var k = s.key; var r = s.right; - _accu = f(fold0(l, accu, f), k); + _accu = f(reduce(l, accu, f), k); _s = r; continue ; @@ -227,12 +225,12 @@ function fold0(_s, _accu, f) { }; } -function every0(_n, p) { +function every(_n, p) { while(true) { var n = _n; if (n !== null) { if (p(n.key)) { - if (every0(n.left, p)) { + if (every(n.left, p)) { _n = n.right; continue ; @@ -248,13 +246,13 @@ function every0(_n, p) { }; } -function some0(_n, p) { +function some(_n, p) { while(true) { var n = _n; if (n !== null) { if (p(n.key)) { return /* true */1; - } else if (some0(n.left, p)) { + } else if (some(n.left, p)) { return /* true */1; } else { _n = n.right; @@ -271,7 +269,7 @@ function addMinElement(n, v) { if (n !== null) { return bal(addMinElement(n.left, v), n.key, n.right); } else { - return singleton0(v); + return singleton(v); } } @@ -279,7 +277,7 @@ function addMaxElement(n, v) { if (n !== null) { return bal(n.left, n.key, addMaxElement(n.right, v)); } else { - return singleton0(v); + return singleton(v); } } @@ -317,14 +315,14 @@ function concatShared(t1, t2) { } } -function partitionShared0(n, p) { +function partitionShared(n, p) { if (n !== null) { var key = n.key; - var match = partitionShared0(n.left, p); + var match = partitionShared(n.left, p); var lf = match[1]; var lt = match[0]; var pv = p(key); - var match$1 = partitionShared0(n.right, p); + var match$1 = partitionShared(n.right, p); var rf = match$1[1]; var rt = match$1[0]; if (pv) { @@ -354,7 +352,7 @@ function lengthNode(n) { return (1 + sizeL | 0) + sizeR | 0; } -function length0(n) { +function size(n) { if (n !== null) { return lengthNode(n); } else { @@ -380,7 +378,7 @@ function toListAux(_accu, _n) { }; } -function toList0(s) { +function toList(s) { return toListAux(/* [] */0, s); } @@ -481,7 +479,7 @@ function fillArrayWithFilter(_n, _i, arr, p) { }; } -function toArray0(n) { +function toArray(n) { if (n !== null) { var size = lengthNode(n); var v = new Array(size); @@ -502,16 +500,16 @@ function ofSortedArrayRevAux(arr, off, len) { } else { switch (len) { case 0 : - return empty0; + return null; case 1 : - return singleton0(arr[off]); + return singleton(arr[off]); case 2 : var x0 = arr[off]; var x1 = arr[off - 1 | 0]; return { - left: singleton0(x0), + left: singleton(x0), key: x1, - right: empty0, + right: null, h: 2 }; case 3 : @@ -519,9 +517,9 @@ function ofSortedArrayRevAux(arr, off, len) { var x1$1 = arr[off - 1 | 0]; var x2 = arr[off - 2 | 0]; return { - left: singleton0(x0$1), + left: singleton(x0$1), key: x1$1, - right: singleton0(x2), + right: singleton(x2), h: 2 }; @@ -539,16 +537,16 @@ function ofSortedArrayAux(arr, off, len) { } else { switch (len) { case 0 : - return empty0; + return null; case 1 : - return singleton0(arr[off]); + return singleton(arr[off]); case 2 : var x0 = arr[off]; var x1 = arr[off + 1 | 0]; return { - left: singleton0(x0), + left: singleton(x0), key: x1, - right: empty0, + right: null, h: 2 }; case 3 : @@ -556,9 +554,9 @@ function ofSortedArrayAux(arr, off, len) { var x1$1 = arr[off + 1 | 0]; var x2 = arr[off + 2 | 0]; return { - left: singleton0(x0$1), + left: singleton(x0$1), key: x1$1, - right: singleton0(x2), + right: singleton(x2), h: 2 }; @@ -566,18 +564,18 @@ function ofSortedArrayAux(arr, off, len) { } } -function ofSortedArrayUnsafe0(arr) { +function ofSortedArrayUnsafe(arr) { return ofSortedArrayAux(arr, 0, arr.length); } -function filterShared0(n, p) { +function filterShared(n, p) { if (n !== null) { var l = n.left; var v = n.key; var r = n.right; - var newL = filterShared0(l, p); + var newL = filterShared(l, p); var pv = p(v); - var newR = filterShared0(r, p); + var newR = filterShared(r, p); if (pv) { if (l === newL && r === newR) { return n; @@ -626,7 +624,7 @@ function partitionCopy(n, p) { } } -function mem0(_t, x, cmp) { +function has(_t, x, cmp) { while(true) { var t = _t; if (t !== null) { @@ -645,13 +643,13 @@ function mem0(_t, x, cmp) { }; } -function cmp0(s1, s2, cmp) { - var len1 = length0(s1); - var len2 = length0(s2); +function cmp(s1, s2, cmp$1) { + var len1 = size(s1); + var len2 = size(s2); if (len1 === len2) { var _e1 = stackAllLeft(s1, /* [] */0); var _e2 = stackAllLeft(s2, /* [] */0); - var cmp$1 = cmp; + var cmp$2 = cmp$1; while(true) { var e2 = _e2; var e1 = _e1; @@ -659,7 +657,7 @@ function cmp0(s1, s2, cmp) { if (e2) { var h2 = e2[0]; var h1 = e1[0]; - var c = cmp$1(h1.key, h2.key); + var c = cmp$2(h1.key, h2.key); if (c) { return c; } else { @@ -682,11 +680,11 @@ function cmp0(s1, s2, cmp) { } } -function eq0(s1, s2, cmp) { - return +(cmp0(s1, s2, cmp) === 0); +function eq(s1, s2, c) { + return +(cmp(s1, s2, c) === 0); } -function subset0(_s1, _s2, cmp) { +function subset(_s1, _s2, cmp) { while(true) { var s2 = _s2; var s1 = _s1; @@ -701,21 +699,21 @@ function subset0(_s1, _s2, cmp) { var c = cmp(v1, v2); if (c) { if (c < 0) { - if (subset0(create(l1, v1, null), l2, cmp)) { + if (subset(create(l1, v1, null), l2, cmp)) { _s1 = r1; continue ; } else { return /* false */0; } - } else if (subset0(create(null, v1, r1), r2, cmp)) { + } else if (subset(create(null, v1, r1), r2, cmp)) { _s1 = l1; continue ; } else { return /* false */0; } - } else if (subset0(l1, l2, cmp)) { + } else if (subset(l1, l2, cmp)) { _s2 = r2; _s1 = r1; continue ; @@ -732,7 +730,7 @@ function subset0(_s1, _s2, cmp) { }; } -function get0(_n, x, cmp) { +function get(_n, x, cmp) { while(true) { var n = _n; if (n !== null) { @@ -751,7 +749,7 @@ function get0(_n, x, cmp) { }; } -function getUndefined0(_n, x, cmp) { +function getUndefined(_n, x, cmp) { while(true) { var n = _n; if (n !== null) { @@ -770,7 +768,7 @@ function getUndefined0(_n, x, cmp) { }; } -function getExn0(_n, x, cmp) { +function getExn(_n, x, cmp) { while(true) { var n = _n; if (n !== null) { @@ -891,11 +889,11 @@ function addMutate(cmp, t, x) { return t; } } else { - return singleton0(x); + return singleton(x); } } -function ofArray0(xs, cmp) { +function ofArray(xs, cmp) { var len = xs.length; if (len) { var next = Bs_Sort.strictlySortedLength(xs, (function (x, y) { @@ -913,7 +911,7 @@ function ofArray0(xs, cmp) { } return result; } else { - return empty0; + return null; } } @@ -929,45 +927,47 @@ function removeMinAuxWithRootMutate(nt, n) { } } +var empty = null; + exports.copy = copy; exports.create = create; exports.bal = bal; -exports.singleton0 = singleton0; -exports.minimum0 = minimum0; -exports.minUndefined0 = minUndefined0; -exports.maximum0 = maximum0; -exports.maxUndefined0 = maxUndefined0; +exports.singleton = singleton; +exports.minimum = minimum; +exports.minUndefined = minUndefined; +exports.maximum = maximum; +exports.maxUndefined = maxUndefined; exports.removeMinAuxWithRef = removeMinAuxWithRef; -exports.empty0 = empty0; -exports.isEmpty0 = isEmpty0; +exports.empty = empty; +exports.isEmpty = isEmpty; exports.stackAllLeft = stackAllLeft; -exports.iter0 = iter0; -exports.fold0 = fold0; -exports.every0 = every0; -exports.some0 = some0; +exports.forEach = forEach; +exports.reduce = reduce; +exports.every = every; +exports.some = some; exports.joinShared = joinShared; exports.concatShared = concatShared; -exports.filterShared0 = filterShared0; +exports.filterShared = filterShared; exports.filterCopy = filterCopy; -exports.partitionShared0 = partitionShared0; +exports.partitionShared = partitionShared; exports.partitionCopy = partitionCopy; exports.lengthNode = lengthNode; -exports.length0 = length0; -exports.toList0 = toList0; +exports.size = size; +exports.toList = toList; exports.checkInvariantInternal = checkInvariantInternal; exports.fillArray = fillArray; -exports.toArray0 = toArray0; +exports.toArray = toArray; exports.ofSortedArrayAux = ofSortedArrayAux; exports.ofSortedArrayRevAux = ofSortedArrayRevAux; -exports.ofSortedArrayUnsafe0 = ofSortedArrayUnsafe0; -exports.mem0 = mem0; -exports.cmp0 = cmp0; -exports.eq0 = eq0; -exports.subset0 = subset0; -exports.get0 = get0; -exports.getUndefined0 = getUndefined0; -exports.getExn0 = getExn0; -exports.ofArray0 = ofArray0; +exports.ofSortedArrayUnsafe = ofSortedArrayUnsafe; +exports.has = has; +exports.cmp = cmp; +exports.eq = eq; +exports.subset = subset; +exports.get = get; +exports.getUndefined = getUndefined; +exports.getExn = getExn; +exports.ofArray = ofArray; exports.addMutate = addMutate; exports.balMutate = balMutate; exports.removeMinAuxWithRootMutate = removeMinAuxWithRootMutate; diff --git a/lib/js/bs_internalSetInt.js b/lib/js/bs_internalSetInt.js index 868f0e352d6..345801afc5b 100644 --- a/lib/js/bs_internalSetInt.js +++ b/lib/js/bs_internalSetInt.js @@ -3,7 +3,7 @@ var Bs_SortInt = require("./bs_SortInt.js"); var Bs_internalAVLset = require("./bs_internalAVLset.js"); -function mem(_t, x) { +function has(_t, x) { while(true) { var t = _t; if (t !== null) { @@ -51,8 +51,8 @@ function compareAux(_e1, _e2) { } function cmp(s1, s2) { - var len1 = Bs_internalAVLset.length0(s1); - var len2 = Bs_internalAVLset.length0(s2); + var len1 = Bs_internalAVLset.size(s1); + var len2 = Bs_internalAVLset.size(s2); if (len1 === len2) { return compareAux(Bs_internalAVLset.stackAllLeft(s1, /* [] */0), Bs_internalAVLset.stackAllLeft(s2, /* [] */0)); } else if (len1 < len2) { @@ -88,14 +88,14 @@ function subset(_s1, _s2) { return /* false */0; } } else if (v1 < v2) { - if (subset(Bs_internalAVLset.create(l1, v1, null), l2)) { + if (subset(Bs_internalAVLset.create(l1, v1, Bs_internalAVLset.empty), l2)) { _s1 = r1; continue ; } else { return /* false */0; } - } else if (subset(Bs_internalAVLset.create(null, v1, r1), r2)) { + } else if (subset(Bs_internalAVLset.create(Bs_internalAVLset.empty, v1, r1), r2)) { _s1 = l1; continue ; @@ -181,7 +181,7 @@ function addMutate(t, x) { return Bs_internalAVLset.balMutate(t); } } else { - return Bs_internalAVLset.singleton0(x); + return Bs_internalAVLset.singleton(x); } } @@ -201,7 +201,7 @@ function ofArray(xs) { } return result; } else { - return null; + return Bs_internalAVLset.empty; } } @@ -214,7 +214,7 @@ var A = 0; exports.S = S; exports.N = N; exports.A = A; -exports.mem = mem; +exports.has = has; exports.compareAux = compareAux; exports.cmp = cmp; exports.eq = eq; diff --git a/lib/js/bs_internalSetString.js b/lib/js/bs_internalSetString.js index 2e53cd018b6..41cf34377f8 100644 --- a/lib/js/bs_internalSetString.js +++ b/lib/js/bs_internalSetString.js @@ -3,7 +3,7 @@ var Bs_SortString = require("./bs_SortString.js"); var Bs_internalAVLset = require("./bs_internalAVLset.js"); -function mem(_t, x) { +function has(_t, x) { while(true) { var t = _t; if (t !== null) { @@ -51,8 +51,8 @@ function compareAux(_e1, _e2) { } function cmp(s1, s2) { - var len1 = Bs_internalAVLset.length0(s1); - var len2 = Bs_internalAVLset.length0(s2); + var len1 = Bs_internalAVLset.size(s1); + var len2 = Bs_internalAVLset.size(s2); if (len1 === len2) { return compareAux(Bs_internalAVLset.stackAllLeft(s1, /* [] */0), Bs_internalAVLset.stackAllLeft(s2, /* [] */0)); } else if (len1 < len2) { @@ -88,14 +88,14 @@ function subset(_s1, _s2) { return /* false */0; } } else if (v1 < v2) { - if (subset(Bs_internalAVLset.create(l1, v1, null), l2)) { + if (subset(Bs_internalAVLset.create(l1, v1, Bs_internalAVLset.empty), l2)) { _s1 = r1; continue ; } else { return /* false */0; } - } else if (subset(Bs_internalAVLset.create(null, v1, r1), r2)) { + } else if (subset(Bs_internalAVLset.create(Bs_internalAVLset.empty, v1, r1), r2)) { _s1 = l1; continue ; @@ -181,7 +181,7 @@ function addMutate(t, x) { return Bs_internalAVLset.balMutate(t); } } else { - return Bs_internalAVLset.singleton0(x); + return Bs_internalAVLset.singleton(x); } } @@ -201,7 +201,7 @@ function ofArray(xs) { } return result; } else { - return null; + return Bs_internalAVLset.empty; } } @@ -214,7 +214,7 @@ var A = 0; exports.S = S; exports.N = N; exports.A = A; -exports.mem = mem; +exports.has = has; exports.compareAux = compareAux; exports.cmp = cmp; exports.eq = eq; From d7ab10c3806b7d301327a5e46ac0a1eb9cf9d682 Mon Sep 17 00:00:00 2001 From: Hongbo Zhang Date: Sun, 28 Jan 2018 13:51:40 +0800 Subject: [PATCH 10/17] clean up --- jscomp/others/.depend | 4 +- jscomp/others/bs_MapInt.ml | 60 +++---- jscomp/others/bs_MapIntM.ml | 62 +++---- jscomp/others/bs_MapM.ml | 150 +++++++++-------- jscomp/others/bs_MapM.mli | 7 +- jscomp/others/bs_MapString.ml | 60 +++---- jscomp/others/bs_MapStringM.ml | 62 +++---- jscomp/others/bs_SortedMapDict.ml | 76 ++++----- jscomp/others/bs_internalAVLtree.ml | 163 ++++++++++--------- jscomp/others/bs_internalAVLtree.mli | 151 ++++++++--------- jscomp/others/bs_internalMapInt.ml | 21 +-- jscomp/others/bs_internalMapString.ml | 21 +-- jscomp/others/internal_map.cppo.ml | 21 +-- jscomp/others/map.cppo.ml | 60 +++---- jscomp/others/mapm.cppo.ml | 62 +++---- jscomp/test/bs_mutable_set_test.js | 42 ++--- jscomp/test/bs_poly_mutable_map_test.js | 4 +- jscomp/test/bs_poly_mutable_set_test.js | 30 ++-- lib/js/bs_MapInt.js | 56 +++---- lib/js/bs_MapIntM.js | 56 +++---- lib/js/bs_MapM.js | 117 ++++++-------- lib/js/bs_MapString.js | 56 +++---- lib/js/bs_MapStringM.js | 56 +++---- lib/js/bs_SortedMapDict.js | 84 +++++----- lib/js/bs_internalAVLtree.js | 206 ++++++++++++------------ lib/js/bs_internalMapInt.js | 28 ++-- lib/js/bs_internalMapString.js | 28 ++-- 27 files changed, 869 insertions(+), 874 deletions(-) diff --git a/jscomp/others/.depend b/jscomp/others/.depend index b7949b12d77..a3c05e7d1c0 100644 --- a/jscomp/others/.depend +++ b/jscomp/others/.depend @@ -64,8 +64,8 @@ bs_MapIntM.cmj : bs_internalMapInt.cmj bs_internalAVLtree.cmj bs_SortInt.cmj \ bs_Set.cmj : bs_SortedSetDict.cmj bs_Cmp.cmj bs_Array.cmj bs_Set.cmi bs_SetM.cmj : bs_internalAVLset.cmj bs_Sort.cmj bs_Cmp.cmj bs_Array.cmj \ bs_SetM.cmi -bs_MapM.cmj : bs_internalAVLtree.cmj bs_Sort.cmj bs_Cmp.cmj bs_BagM.cmj \ - bs_Array.cmj bs_MapM.cmi +bs_MapM.cmj : bs_internalAVLtree.cmj bs_Sort.cmj bs_Cmp.cmj bs_Array.cmj \ + bs_MapM.cmi bs_internalSetInt.cmj : bs_internalAVLset.cmj bs_SortInt.cmj bs_Array.cmj bs_internalSetString.cmj : bs_internalAVLset.cmj bs_SortString.cmj \ bs_Array.cmj diff --git a/jscomp/others/bs_MapInt.ml b/jscomp/others/bs_MapInt.ml index b4ae043d970..b85fe7914c8 100644 --- a/jscomp/others/bs_MapInt.ml +++ b/jscomp/others/bs_MapInt.ml @@ -7,39 +7,39 @@ module N = Bs_internalAVLtree module A = Bs_Array module S = Bs_Sort -type 'a t = (key, 'a) N.t0 +type 'a t = (key, 'a) N.t -let empty = N.empty0 -let isEmpty = N.isEmpty0 -let singleton = N.singleton0 +let empty = N.empty +let isEmpty = N.isEmpty +let singleton = N.singleton -let minKey = N.minKey0 -let minKeyUndefined = N.minKeyUndefined0 -let maxKey = N.maxKey0 -let maxKeyUndefined = N.maxKeyUndefined0 -let minimum = N.minimum0 -let minUndefined = N.minUndefined0 -let maximum = N.maximum0 -let maxUndefined = N.maxUndefined0 -let forEach = N.iter0 -let map = N.map0 -let mapWithKey = N.mapi0 -let reduce = N.fold0 -let every = N.every0 -let some = N.some0 -let keepBy = N.filterShared0 -let partition = N.partitionShared0 -let size = N.length0 -let toList = N.toList0 -let toArray = N.toArray0 -let keysToArray = N.keysToArray0 -let valuesToArray = N.valuesToArray0 +let minKey = N.minKey +let minKeyUndefined = N.minKeyUndefined +let maxKey = N.maxKey +let maxKeyUndefined = N.maxKeyUndefined +let minimum = N.minimum +let minUndefined = N.minUndefined +let maximum = N.maximum +let maxUndefined = N.maxUndefined +let forEach = N.forEach +let map = N.map +let mapWithKey = N.mapWithKey +let reduce = N.reduce +let every = N.every +let some = N.some +let keepBy = N.filterShared +let partition = N.partitionShared +let size = N.size +let toList = N.toList +let toArray = N.toArray +let keysToArray = N.keysToArray +let valuesToArray = N.valuesToArray let checkInvariantInternal = N.checkInvariantInternal let rec set t (newK : key) (newD : _) = match N.toOpt t with | None -> - N.singleton0 newK newD + N.singleton newK newD | Some n -> let k = N.key n in if newK = k then @@ -57,7 +57,7 @@ let rec update t (x : key) f = begin match f None [@bs] with | None -> t | Some data -> - N.singleton0 x data + N.singleton x data end | Some n -> let k = N.key n in @@ -112,7 +112,7 @@ let rec removeAux n (x : key) = let remove n x = match N.toOpt n with - | None -> N.empty0 + | None -> N.empty | Some n -> removeAux n x let rec removeArrayAux t xs i len = @@ -128,7 +128,7 @@ let rec removeArrayAux t xs i len = let removeArray t keys = let len = A.length keys in match N.toOpt t with - | None -> N.empty0 + | None -> N.empty | Some t -> removeArrayAux t keys 0 len let mergeArray h arr = @@ -140,7 +140,7 @@ let mergeArray h arr = done ; !v -let has = I.mem +let has = I.has let cmp = I.cmp let eq = I.eq let get = I.get diff --git a/jscomp/others/bs_MapIntM.ml b/jscomp/others/bs_MapIntM.ml index 5b8600540d8..e6e91bd979b 100644 --- a/jscomp/others/bs_MapIntM.ml +++ b/jscomp/others/bs_MapIntM.ml @@ -14,18 +14,18 @@ type 'a t = { } [@@bs.deriving abstract] -let empty () = t ~data:N.empty0 -let isEmpty m = N.isEmpty0 (data m) -let singleton k v = t ~data:(N.singleton0 k v) - -let minKeyUndefined m = N.minKeyUndefined0 (data m) -let minKey m = N.minKey0 (data m) -let maxKeyUndefined m = N.maxKeyUndefined0 (data m) -let maxKey m = N.maxKey0 (data m) -let minimum m = N.minimum0 (data m) -let minUndefined m = N.minUndefined0 (data m) -let maximum m = N.maximum0 (data m) -let maxUndefined m = N.maxUndefined0 (data m) +let empty () = t ~data:N.empty +let isEmpty m = N.isEmpty (data m) +let singleton k v = t ~data:(N.singleton k v) + +let minKeyUndefined m = N.minKeyUndefined (data m) +let minKey m = N.minKey (data m) +let maxKeyUndefined m = N.maxKeyUndefined (data m) +let maxKey m = N.maxKey (data m) +let minimum m = N.minimum (data m) +let minUndefined m = N.minUndefined (data m) +let maximum m = N.maximum (data m) +let maxUndefined m = N.maxUndefined (data m) let set (m : _ t) k v = let old_data = data m in @@ -33,20 +33,20 @@ let set (m : _ t) k v = if v != old_data then dataSet m v -let forEach d f = N.iter0 (data d) f -let map d f = t ~data:(N.map0 (data d) f) -let mapWithKey d f = t ~data:(N.mapi0 (data d) f) -let reduce d acc f = N.fold0 (data d) acc f -let every d f = N.every0 (data d) f -let some d f = N.some0 (data d) f - -let size d = N.length0 (data d) -let toList d = N.toList0 (data d) -let toArray d = N.toArray0 (data d) -let keysToArray d = N.keysToArray0 (data d) -let valuesToArray d = N.valuesToArray0 (data d) +let forEach d f = N.forEach (data d) f +let map d f = t ~data:(N.map (data d) f) +let mapWithKey d f = t ~data:(N.mapWithKey (data d) f) +let reduce d acc f = N.reduce (data d) acc f +let every d f = N.every (data d) f +let some d f = N.some (data d) f + +let size d = N.size (data d) +let toList d = N.toList (data d) +let toArray d = N.toArray (data d) +let keysToArray d = N.keysToArray (data d) +let valuesToArray d = N.valuesToArray (data d) let checkInvariantInternal d = N.checkInvariantInternal (data d) -let has d v = I.mem (data d) v +let has d v = I.has (data d) v let rec removeMutateAux nt (x : key)= @@ -85,11 +85,11 @@ let remove d v = dataSet d newRoot -let rec updateDone0 t (x : key) f = +let rec updateDone t (x : key) f = match N.toOpt t with | None -> (match f None [@bs] with - | Some data -> N.singleton0 x data + | Some data -> N.singleton x data | None -> t) | Some nt -> let k = N.key nt in @@ -112,16 +112,16 @@ let rec updateDone0 t (x : key) f = else let l, r = N.(left nt, right nt) in (if x < k then - let ll = updateDone0 l x f in + let ll = updateDone l x f in N.leftSet nt ll else - N.rightSet nt (updateDone0 r x f); + N.rightSet nt (updateDone r x f); ); N.return (N.balMutate nt) let update t x f = let oldRoot = data t in - let newRoot = updateDone0 oldRoot x f in + let newRoot = updateDone oldRoot x f in if newRoot != oldRoot then dataSet t newRoot @@ -130,7 +130,7 @@ let rec removeArrayMutateAux t xs i len = let ele = A.getUnsafe xs i in let u = removeMutateAux t ele in match N.toOpt u with - | None -> N.empty0 + | None -> N.empty | Some t -> removeArrayMutateAux t xs (i+1) len else N.return t diff --git a/jscomp/others/bs_MapM.ml b/jscomp/others/bs_MapM.ml index 88744d14b76..5f383829f4d 100644 --- a/jscomp/others/bs_MapM.ml +++ b/jscomp/others/bs_MapM.ml @@ -25,12 +25,15 @@ module N = Bs_internalAVLtree -module B = Bs_BagM module A = Bs_Array module S = Bs_Sort -type ('k, 'v, 'id) t = - (('k,'id) Bs_Cmp.t, ('k,'v) N.t0 ) B.bag +type ('key, 'id) dict = ('key, 'id) Bs_Cmp.t + +type ('k, 'v, 'id) t = { + dict: ('k, 'id) dict; + mutable data: ('k, 'v) N.t +} [@@bs.deriving abstract] let rec removeMutateAux nt x ~cmp = let k = N.key nt in @@ -61,14 +64,14 @@ let rec removeMutateAux nt x ~cmp = end let remove (type elt) (type id) (d : (elt,_,id) t) k = - let oldRoot = B.data d in + let oldRoot = data d in match N.toOpt oldRoot with | None -> () | Some oldRoot2 -> - let module M = (val B.dict d) in + let module M = (val dict d) in let newRoot = removeMutateAux ~cmp:M.cmp oldRoot2 k in if newRoot != oldRoot then - B.dataSet d newRoot + dataSet d newRoot let rec removeArrayMutateAux t xs i len ~cmp = @@ -76,27 +79,27 @@ let rec removeArrayMutateAux t xs i len ~cmp = let ele = A.getUnsafe xs i in let u = removeMutateAux t ele ~cmp in match N.toOpt u with - | None -> N.empty0 + | None -> N.empty | Some t -> removeArrayMutateAux t xs (i+1) len ~cmp else N.return t let removeMany (type elt) (type id) (d : (elt,_,id) t) xs = - let oldRoot = B.data d in + let oldRoot = data d in match N.toOpt oldRoot with | None -> () | Some nt -> let len = A.length xs in - let module M = (val B.dict d) in + let module M = (val dict d) in let newRoot = removeArrayMutateAux nt xs 0 len ~cmp:M.cmp in if newRoot != oldRoot then - B.dataSet d newRoot + dataSet d newRoot -let rec updateDone0 t x f ~cmp = +let rec updateDone t x f ~cmp = match N.toOpt t with | None -> (match f None [@bs] with - | Some data -> N.singleton0 x data + | Some data -> N.singleton x data | None -> t) | Some nt -> let k = N.key nt in @@ -120,101 +123,92 @@ let rec updateDone0 t x f ~cmp = else let l, r = N.(left nt, right nt) in (if c < 0 then - let ll = updateDone0 l x f ~cmp in + let ll = updateDone l x f ~cmp in N.leftSet nt ll else - N.rightSet nt (updateDone0 r x f ~cmp); + N.rightSet nt (updateDone r x f ~cmp); ); N.return (N.balMutate nt) let update (type k) (type id) (t : (k,_,id) t) x f = - let oldRoot = B.data t in - let module M = (val B.dict t) in - let newRoot = updateDone0 oldRoot x f ~cmp:M.cmp in + let oldRoot = data t in + let module M = (val dict t) in + let newRoot = updateDone oldRoot x f ~cmp:M.cmp in if newRoot != oldRoot then - B.dataSet t newRoot + dataSet t newRoot let empty ~dict = - B.bag ~dict ~data:N.empty0 + t ~dict ~data:N.empty let isEmpty d = - N.isEmpty0 (B.data d) + N.isEmpty (data d) let singleton dict x v= - B.bag ~data:(N.singleton0 x v) ~dict + t ~data:(N.singleton x v) ~dict -let minKey m = N.minKey0 (B.data m) -let minKeyUndefined m = N.minKeyUndefined0 (B.data m) -let maxKey m = N.maxKey0 (B.data m) -let maxKeyUndefined m = N.maxKeyUndefined0 (B.data m) -let minimum m = N.minimum0 (B.data m) -let minUndefined m = N.minUndefined0 (B.data m) -let maximum m = N.maximum0 (B.data m) -let maxUndefined m = N.maxUndefined0 (B.data m) +let minKey m = N.minKey (data m) +let minKeyUndefined m = N.minKeyUndefined (data m) +let maxKey m = N.maxKey (data m) +let maxKeyUndefined m = N.maxKeyUndefined (data m) +let minimum m = N.minimum (data m) +let minUndefined m = N.minUndefined (data m) +let maximum m = N.maximum (data m) +let maxUndefined m = N.maxUndefined (data m) let forEach d f = - N.iter0 (B.data d) f + N.forEach (data d) f let reduce d acc cb = - N.fold0 (B.data d) acc cb + N.reduce (data d) acc cb let every d p = - N.every0 (B.data d) p + N.every (data d) p let some d p = - N.some0 (B.data d) p + N.some (data d) p let size d = - N.length0 (B.data d) + N.size (data d) let toList d = - N.toList0 (B.data d) + N.toList (data d) let toArray d = - N.toArray0 (B.data d) + N.toArray (data d) let keysToArray d = - N.keysToArray0 (B.data d) + N.keysToArray (data d) let valuesToArray d = - N.valuesToArray0 (B.data d) + N.valuesToArray (data d) let ofSortedArrayUnsafe ~dict xs : _ t = - B.bag ~data:(N.ofSortedArrayUnsafe0 xs) ~dict + t ~data:(N.ofSortedArrayUnsafe xs) ~dict let checkInvariantInternal d = - N.checkInvariantInternal (B.data d) + N.checkInvariantInternal (data d) let cmp (type k) (type id) (m1 : (k,'v,id) t) (m2 : (k,'v,id) t) cmp = - let dict, m1_data, m2_data = B.(dict m1, data m1, data m2) in - let module X = (val dict) in - N.cmp0 ~kcmp:X.cmp ~vcmp:cmp m1_data m2_data + let module X = (val dict m1) in + N.cmp ~kcmp:X.cmp ~vcmp:cmp (data m1) (data m2) let eq (type k) (type id) (m1 : (k,'v,id) t) (m2 : (k,'v,id) t) cmp = - let dict, m1_data, m2_data = B.(dict m1, data m1, data m2) in - let module M = (val dict) in - N.eq0 ~kcmp:M.cmp ~veq:cmp m1_data m2_data + let module M = (val dict m1) in + N.eq ~kcmp:M.cmp ~veq:cmp (data m1) (data m2) let map m f = - let dict, map = B.(dict m, data m) in - B.bag ~dict ~data:(N.map0 map f) -let mapWithKey map f = - let dict,map = B.(dict map, data map) in - B.bag ~dict ~data:(N.mapi0 map f) -let get (type k) (type id) (map : (k,_,id) t) x = - let dict,map = B.(dict map, data map) in - let module X = (val dict) in - N.get0 ~cmp:X.cmp map x -let getUndefined (type k) (type id) (map : (k,_,id) t) x = - let dict,map = B.(dict map, data map) in - let module X = (val dict) in - N.getUndefined0 ~cmp:X.cmp map x -let getWithDefault (type k) (type id) (map : (k,_,id) t) x def = - let dict,map = B.(dict map, data map) in - let module X = (val dict) in - N.getWithDefault0 ~cmp:X.cmp map x def -let getExn (type k) (type id) (map : (k,_,id) t) x = - let dict,map = B.(dict map, data map) in - let module X = (val dict) in - N.getExn0 ~cmp:X.cmp map x -let has (type k) (type id) (map : (k,_,id) t) x = - let dict,map = B.(dict map, data map) in - let module X = (val dict) in - N.mem0 ~cmp:X.cmp map x + t ~dict:(dict m) ~data:(N.map (data m) f) +let mapWithKey m f = + t ~dict:(dict m) ~data:(N.mapWithKey (data m) f) +let get (type k) (type id) (m : (k,_,id) t) x = + let module X = (val dict m) in + N.get ~cmp:X.cmp (data m) x +let getUndefined (type k) (type id) (m : (k,_,id) t) x = + let module X = (val dict m) in + N.getUndefined ~cmp:X.cmp (data m) x +let getWithDefault (type k) (type id) (m : (k,_,id) t) x def = + let module X = (val dict m) in + N.getWithDefault ~cmp:X.cmp (data m) x def +let getExn (type k) (type id) (m : (k,_,id) t) x = + let module X = (val dict m) in + N.getExn ~cmp:X.cmp (data m) x +let has (type k) (type id) (m : (k,_,id) t) x = + let module X = (val dict m) in + N.has ~cmp:X.cmp (data m) x let ofArray (type k) (type id) data ~(dict : (k,id) Bs_Cmp.t)= let module M = (val dict ) in - B.bag ~dict ~data:(N.ofArray0 ~cmp:M.cmp data) + t ~dict ~data:(N.ofArray ~cmp:M.cmp data) let set (type elt) (type id) (m : (elt,_,id) t) e v = - let oldRoot = B.data m in - let module M = (val B.dict m) in + let module M = (val dict m) in + let oldRoot = data m in let newRoot = N.updateMutate ~cmp:M.cmp oldRoot e v in if newRoot != oldRoot then - B.dataSet m newRoot + dataSet m newRoot let mergeArrayAux t xs ~cmp = let v = ref t in @@ -224,9 +218,9 @@ let mergeArrayAux t xs ~cmp = done; !v let mergeMany (type elt) (type id) (d : (elt,_,id) t ) xs = - let oldRoot = B.data d in - let module M = (val B.dict d) in + let module M = (val dict d) in + let oldRoot = data d in let newRoot = mergeArrayAux oldRoot xs ~cmp:M.cmp in if newRoot != oldRoot then - B.dataSet d newRoot + dataSet d newRoot diff --git a/jscomp/others/bs_MapM.mli b/jscomp/others/bs_MapM.mli index dbacee0a587..e15c031d99a 100644 --- a/jscomp/others/bs_MapM.mli +++ b/jscomp/others/bs_MapM.mli @@ -24,8 +24,9 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) type ('k,'v,'id) t - -val empty: dict:('k, 'id) Bs_Cmp.t -> ('k, 'a, 'id) t +type ('key, 'id) dict = ('key, 'id) Bs_Cmp.t + +val empty: dict:('k, 'id) dict -> ('k, 'a, 'id) t val isEmpty: _ t -> bool val has: ('k, _, _) t -> 'k -> bool val cmp: @@ -70,7 +71,7 @@ val size: ('k, 'a, 'id) t -> int val toList: ('k, 'a, 'id) t -> ('k * 'a) list (** In increasing order*) val toArray: ('k, 'a, 'id) t -> ('k * 'a) array -val ofArray: ('k * 'a) array -> dict:('k,'id) Bs_Cmp.t -> ('k,'a,'id) t +val ofArray: ('k * 'a) array -> dict:('k,'id) dict -> ('k,'a,'id) t val keysToArray: ('k, _, _) t -> 'k array val valuesToArray: (_, 'a, _) t -> 'a array val minKey: ('k, _, _) t -> 'k option diff --git a/jscomp/others/bs_MapString.ml b/jscomp/others/bs_MapString.ml index ad6fea28f38..ba607618477 100644 --- a/jscomp/others/bs_MapString.ml +++ b/jscomp/others/bs_MapString.ml @@ -7,39 +7,39 @@ module N = Bs_internalAVLtree module A = Bs_Array module S = Bs_Sort -type 'a t = (key, 'a) N.t0 +type 'a t = (key, 'a) N.t -let empty = N.empty0 -let isEmpty = N.isEmpty0 -let singleton = N.singleton0 +let empty = N.empty +let isEmpty = N.isEmpty +let singleton = N.singleton -let minKey = N.minKey0 -let minKeyUndefined = N.minKeyUndefined0 -let maxKey = N.maxKey0 -let maxKeyUndefined = N.maxKeyUndefined0 -let minimum = N.minimum0 -let minUndefined = N.minUndefined0 -let maximum = N.maximum0 -let maxUndefined = N.maxUndefined0 -let forEach = N.iter0 -let map = N.map0 -let mapWithKey = N.mapi0 -let reduce = N.fold0 -let every = N.every0 -let some = N.some0 -let keepBy = N.filterShared0 -let partition = N.partitionShared0 -let size = N.length0 -let toList = N.toList0 -let toArray = N.toArray0 -let keysToArray = N.keysToArray0 -let valuesToArray = N.valuesToArray0 +let minKey = N.minKey +let minKeyUndefined = N.minKeyUndefined +let maxKey = N.maxKey +let maxKeyUndefined = N.maxKeyUndefined +let minimum = N.minimum +let minUndefined = N.minUndefined +let maximum = N.maximum +let maxUndefined = N.maxUndefined +let forEach = N.forEach +let map = N.map +let mapWithKey = N.mapWithKey +let reduce = N.reduce +let every = N.every +let some = N.some +let keepBy = N.filterShared +let partition = N.partitionShared +let size = N.size +let toList = N.toList +let toArray = N.toArray +let keysToArray = N.keysToArray +let valuesToArray = N.valuesToArray let checkInvariantInternal = N.checkInvariantInternal let rec set t (newK : key) (newD : _) = match N.toOpt t with | None -> - N.singleton0 newK newD + N.singleton newK newD | Some n -> let k = N.key n in if newK = k then @@ -57,7 +57,7 @@ let rec update t (x : key) f = begin match f None [@bs] with | None -> t | Some data -> - N.singleton0 x data + N.singleton x data end | Some n -> let k = N.key n in @@ -112,7 +112,7 @@ let rec removeAux n (x : key) = let remove n x = match N.toOpt n with - | None -> N.empty0 + | None -> N.empty | Some n -> removeAux n x let rec removeArrayAux t xs i len = @@ -128,7 +128,7 @@ let rec removeArrayAux t xs i len = let removeArray t keys = let len = A.length keys in match N.toOpt t with - | None -> N.empty0 + | None -> N.empty | Some t -> removeArrayAux t keys 0 len let mergeArray h arr = @@ -140,7 +140,7 @@ let mergeArray h arr = done ; !v -let has = I.mem +let has = I.has let cmp = I.cmp let eq = I.eq let get = I.get diff --git a/jscomp/others/bs_MapStringM.ml b/jscomp/others/bs_MapStringM.ml index fd6d9335ec6..a848b2488ae 100644 --- a/jscomp/others/bs_MapStringM.ml +++ b/jscomp/others/bs_MapStringM.ml @@ -14,18 +14,18 @@ type 'a t = { } [@@bs.deriving abstract] -let empty () = t ~data:N.empty0 -let isEmpty m = N.isEmpty0 (data m) -let singleton k v = t ~data:(N.singleton0 k v) - -let minKeyUndefined m = N.minKeyUndefined0 (data m) -let minKey m = N.minKey0 (data m) -let maxKeyUndefined m = N.maxKeyUndefined0 (data m) -let maxKey m = N.maxKey0 (data m) -let minimum m = N.minimum0 (data m) -let minUndefined m = N.minUndefined0 (data m) -let maximum m = N.maximum0 (data m) -let maxUndefined m = N.maxUndefined0 (data m) +let empty () = t ~data:N.empty +let isEmpty m = N.isEmpty (data m) +let singleton k v = t ~data:(N.singleton k v) + +let minKeyUndefined m = N.minKeyUndefined (data m) +let minKey m = N.minKey (data m) +let maxKeyUndefined m = N.maxKeyUndefined (data m) +let maxKey m = N.maxKey (data m) +let minimum m = N.minimum (data m) +let minUndefined m = N.minUndefined (data m) +let maximum m = N.maximum (data m) +let maxUndefined m = N.maxUndefined (data m) let set (m : _ t) k v = let old_data = data m in @@ -33,20 +33,20 @@ let set (m : _ t) k v = if v != old_data then dataSet m v -let forEach d f = N.iter0 (data d) f -let map d f = t ~data:(N.map0 (data d) f) -let mapWithKey d f = t ~data:(N.mapi0 (data d) f) -let reduce d acc f = N.fold0 (data d) acc f -let every d f = N.every0 (data d) f -let some d f = N.some0 (data d) f - -let size d = N.length0 (data d) -let toList d = N.toList0 (data d) -let toArray d = N.toArray0 (data d) -let keysToArray d = N.keysToArray0 (data d) -let valuesToArray d = N.valuesToArray0 (data d) +let forEach d f = N.forEach (data d) f +let map d f = t ~data:(N.map (data d) f) +let mapWithKey d f = t ~data:(N.mapWithKey (data d) f) +let reduce d acc f = N.reduce (data d) acc f +let every d f = N.every (data d) f +let some d f = N.some (data d) f + +let size d = N.size (data d) +let toList d = N.toList (data d) +let toArray d = N.toArray (data d) +let keysToArray d = N.keysToArray (data d) +let valuesToArray d = N.valuesToArray (data d) let checkInvariantInternal d = N.checkInvariantInternal (data d) -let has d v = I.mem (data d) v +let has d v = I.has (data d) v let rec removeMutateAux nt (x : key)= @@ -85,11 +85,11 @@ let remove d v = dataSet d newRoot -let rec updateDone0 t (x : key) f = +let rec updateDone t (x : key) f = match N.toOpt t with | None -> (match f None [@bs] with - | Some data -> N.singleton0 x data + | Some data -> N.singleton x data | None -> t) | Some nt -> let k = N.key nt in @@ -112,16 +112,16 @@ let rec updateDone0 t (x : key) f = else let l, r = N.(left nt, right nt) in (if x < k then - let ll = updateDone0 l x f in + let ll = updateDone l x f in N.leftSet nt ll else - N.rightSet nt (updateDone0 r x f); + N.rightSet nt (updateDone r x f); ); N.return (N.balMutate nt) let update t x f = let oldRoot = data t in - let newRoot = updateDone0 oldRoot x f in + let newRoot = updateDone oldRoot x f in if newRoot != oldRoot then dataSet t newRoot @@ -130,7 +130,7 @@ let rec removeArrayMutateAux t xs i len = let ele = A.getUnsafe xs i in let u = removeMutateAux t ele in match N.toOpt u with - | None -> N.empty0 + | None -> N.empty | Some t -> removeArrayMutateAux t xs (i+1) len else N.return t diff --git a/jscomp/others/bs_SortedMapDict.ml b/jscomp/others/bs_SortedMapDict.ml index 5f8f81aa334..f37e7f07567 100644 --- a/jscomp/others/bs_SortedMapDict.ml +++ b/jscomp/others/bs_SortedMapDict.ml @@ -25,48 +25,48 @@ module N = Bs_internalAVLtree module A = Bs_Array -type ('key, 'a, 'id) t = ('key, 'a) N.t0 +type ('key, 'a, 'id) t = ('key, 'a) N.t type ('key, 'id) cmp = ('key, 'id) Bs_Cmp.cmp -let empty = N.empty0 -let ofArray = N.ofArray0 -let isEmpty = N.isEmpty0 -let cmp = N.cmp0 -let eq = N.eq0 -let has = N.mem0 -let forEach = N.iter0 -let reduce = N.fold0 -let every = N.every0 -let some = N.some0 -let size = N.length0 -let toList = N.toList0 -let toArray = N.toArray0 -let keysToArray = N.keysToArray0 -let valuesToArray = N.valuesToArray0 +let empty = N.empty +let ofArray = N.ofArray +let isEmpty = N.isEmpty +let cmp = N.cmp +let eq = N.eq +let has = N.has +let forEach = N.forEach +let reduce = N.reduce +let every = N.every +let some = N.some +let size = N.size +let toList = N.toList +let toArray = N.toArray +let keysToArray = N.keysToArray +let valuesToArray = N.valuesToArray -let minimum = N.minimum0 -let maximum = N.maximum0 -let minKey = N.minKey0 -let maxKey = N.maxKey0 -let minKeyUndefined = N.minKeyUndefined0 -let maxKeyUndefined = N.maxKeyUndefined0 -let minUndefined = N.minUndefined0 -let maxUndefined = N.maxUndefined0 -let get = N.get0 -let getUndefined = N.getUndefined0 -let getWithDefault = N.getWithDefault0 -let getExn = N.getExn0 +let minimum = N.minimum +let maximum = N.maximum +let minKey = N.minKey +let maxKey = N.maxKey +let minKeyUndefined = N.minKeyUndefined +let maxKeyUndefined = N.maxKeyUndefined +let minUndefined = N.minUndefined +let maxUndefined = N.maxUndefined +let get = N.get +let getUndefined = N.getUndefined +let getWithDefault = N.getWithDefault +let getExn = N.getExn -let mapWithKey = N.mapi0 -let map = N.map0 +let mapWithKey = N.mapWithKey +let map = N.map -let keepBy = N.filterShared0 -let partition = N.partitionShared0 +let keepBy = N.filterShared +let partition = N.partitionShared let checkInvariantInternal = N.checkInvariantInternal let rec set (t : _ t) newK newD ~cmp = match N.toOpt t with - | None -> N.singleton0 newK newD + | None -> N.singleton newK newD | Some n -> let k= N.key n in let c = (Bs_Cmp.getCmpIntenral cmp) newK k [@bs] in @@ -84,7 +84,7 @@ let rec update (t : _ t) newK f ~cmp : _ t = | None -> begin match f None [@bs] with | None -> t - | Some newD -> N.singleton0 newK newD + | Some newD -> N.singleton newK newD end | Some n -> let k= N.key n in @@ -160,7 +160,7 @@ let rec removeAux0 n x ~cmp = let remove n x ~cmp = match N.toOpt n with - | None -> N.empty0 + | None -> N.empty | Some n -> removeAux0 n x ~cmp let mergeMany h arr ~cmp = @@ -209,11 +209,11 @@ let rec merge s1 s2 f ~cmp = match N.(toOpt s1, toOpt s2) with (None, None) -> N.empty | Some _, None -> - N.filterMap0 s1 (fun[@bs] k v -> + N.filterMap s1 (fun[@bs] k v -> f k (Some v) None [@bs] ) | None, Some _ -> - N.filterMap0 s2 (fun[@bs] k v -> + N.filterMap s2 (fun[@bs] k v -> f k None (Some v) [@bs] ) | Some s1n , Some s2n -> @@ -249,7 +249,7 @@ let rec removeArrayAux t xs i len ~cmp = let removeMany t keys ~cmp = let len = A.length keys in match N.toOpt t with - | None -> N.empty0 + | None -> N.empty | Some t -> removeArrayAux t keys 0 len ~cmp diff --git a/jscomp/others/bs_internalAVLtree.ml b/jscomp/others/bs_internalAVLtree.ml index 285b6f3a2ad..d0c8a131a25 100644 --- a/jscomp/others/bs_internalAVLtree.ml +++ b/jscomp/others/bs_internalAVLtree.ml @@ -14,22 +14,27 @@ type ('k, 'v) node = { - mutable left : ('k,'v) node Js.null; + mutable left : ('k,'v) t; mutable key : 'k; mutable value : 'v; - mutable right : ('k,'v) node Js.null; + mutable right : ('k,'v) t; mutable h : int -} [@@bs.deriving abstract] +} +and ('key, 'a) t = ('key, 'a) node Js.null +[@@bs.deriving abstract] + +type ('k, 'id) cmp = ('k, 'id) Bs_Cmp.cmp + module A = Bs_Array module S = Bs_Sort external toOpt : 'a Js.null -> 'a option = "#null_to_opt" external return : 'a -> 'a Js.null = "%identity" external empty : 'a Js.null = "#null" external unsafeCoerce : 'a Js.null -> 'a = "%identity" -type ('key, 'a) t0 = ('key, 'a) node Js.null -let height (n : _ t0) = + +let height (n : _ t) = match toOpt n with None -> 0 | Some n -> h n @@ -45,7 +50,7 @@ let create l x d r = let hl, hr = height l, height r in return @@ node ~left:l ~key:x ~value:d ~right:r ~h:(if hl >= hr then hl + 1 else hr + 1) -let singleton0 x d = +let singleton x d = return @@ node ~left:empty ~key:x ~value:d ~right:empty ~h:1 let heightGe l r = @@ -96,12 +101,12 @@ let rec minKey0Aux n = | None -> key n | Some n -> minKey0Aux n -let minKey0 n = +let minKey n = match toOpt n with | None -> None | Some n -> Some (minKey0Aux n) -let minKeyUndefined0 n = +let minKeyUndefined n = match toOpt n with | None -> Js.undefined | Some n -> Js.Undefined.return (minKey0Aux n) @@ -111,12 +116,12 @@ let rec maxKey0Aux n = | None -> key n | Some n -> maxKey0Aux n -let maxKey0 n = +let maxKey n = match toOpt n with | None -> None | Some n -> Some (maxKey0Aux n) -let maxKeyUndefined0 n = +let maxKeyUndefined n = match toOpt n with | None -> Js.undefined | Some n -> Js.Undefined.return (maxKey0Aux n) @@ -126,12 +131,12 @@ let rec minKV0Aux n = | None -> key n , value n | Some n -> minKV0Aux n -let minimum0 n = +let minimum n = match toOpt n with None -> None | Some n -> Some (minKV0Aux n) -let minUndefined0 n = +let minUndefined n = match toOpt n with | None -> Js.undefined | Some n -> Js.Undefined.return (minKV0Aux n) @@ -141,12 +146,12 @@ let rec maxKV0Aux n = | None -> key n, value n | Some n -> maxKV0Aux n -let maximum0 n = +let maximum n = match toOpt n with | None -> None | Some n -> Some (maxKV0Aux n) -let maxUndefined0 n = +let maxUndefined n = match toOpt n with | None -> Js.undefined | Some n -> Js.Undefined.return (maxKV0Aux n) @@ -158,66 +163,66 @@ let rec removeMinAuxWithRef n kr vr = | None -> kr := kn; vr := vn; rn | Some ln -> bal (removeMinAuxWithRef ln kr vr) kn vn rn -let empty0 = empty -let isEmpty0 x = match toOpt x with None -> true | Some _ -> false + +let isEmpty x = match toOpt x with None -> true | Some _ -> false let rec stackAllLeft v s = match toOpt v with | None -> s | Some x -> stackAllLeft (left x) (x::s) -let rec iter0 n f = +let rec forEach n f = match toOpt n with | None -> () | Some n -> - iter0 (left n) f ; f (key n) (value n) [@bs]; iter0 (right n) f + forEach (left n) f ; f (key n) (value n) [@bs]; forEach (right n) f -let rec map0 n f = +let rec map n f = match toOpt n with None -> empty | Some n -> - let newLeft = map0 (left n) f in + let newLeft = map (left n) f in let newD = f (value n) [@bs] in - let newRight = map0 (right n) f in + let newRight = map (right n) f in return @@ node ~left:newLeft ~key:(key n) ~value:newD ~right:newRight ~h:(h n) -let rec mapi0 n f = +let rec mapWithKey n f = match toOpt n with None -> empty | Some n -> let key = key n in - let newLeft = mapi0 (left n) f in + let newLeft = mapWithKey (left n) f in let newD = f key (value n) [@bs] in - let newRight = mapi0 (right n) f in + let newRight = mapWithKey (right n) f in return @@ node ~left:newLeft ~key ~value:newD ~right:newRight ~h:(h n) -let rec fold0 m accu f = +let rec reduce m accu f = match toOpt m with None -> accu | Some n -> let l, v, d, r = left n, key n, value n, right n in - fold0 + reduce r - (f (fold0 l accu f) v d [@bs]) f + (f (reduce l accu f) v d [@bs]) f -let rec every0 n p = +let rec every n p = match toOpt n with None -> true | Some n -> p (key n) (value n) [@bs] && - every0 (left n) p && - every0 (right n) p + every (left n) p && + every (right n) p -let rec some0 n p = +let rec some n p = match toOpt n with None -> false | Some n -> p (key n) (value n) [@bs] || - some0 (left n) p || - some0 (right n) p + some (left n) p || + some (right n) p (* Beware: those two functions assume that the added k is *strictly* smaller (or bigger) than all the present keys in the tree; it @@ -229,14 +234,14 @@ let rec some0 n p = let rec addMinElement n k v = match toOpt n with - | None -> singleton0 k v + | None -> singleton k v | Some n -> bal (addMinElement (left n) k v ) (key n) (value n) (right n) let rec addMaxElement n k v = match toOpt n with - | None -> singleton0 k v + | None -> singleton k v | Some n -> bal (left n) (key n) (value n) (addMaxElement (right n) k v ) @@ -273,40 +278,40 @@ let concatOrJoin t1 v d t2 = | Some d -> join t1 v d t2 | None -> concat t1 t2 -let rec filterShared0 n p = +let rec filterShared n p = match toOpt n with None -> empty | Some n -> (* call [p] in the expected left-to-right order *) let v, d = key n, value n in - let newLeft = filterShared0 (left n) p in + let newLeft = filterShared (left n) p in let pvd = p v d [@bs] in - let newRight = filterShared0 (right n) p in + let newRight = filterShared (right n) p in if pvd then join newLeft v d newRight else concat newLeft newRight -let rec filterMap0 n p = +let rec filterMap n p = match toOpt n with None -> empty | Some n -> (* call [p] in the expected left-to-right order *) let v, d = key n, value n in - let newLeft = filterMap0 (left n) p in + let newLeft = filterMap (left n) p in let pvd = p v d [@bs] in - let newRight = filterMap0 (right n) p in + let newRight = filterMap (right n) p in match pvd with | None -> concat newLeft newRight | Some d -> join newLeft v d newRight -let rec partitionShared0 n p = +let rec partitionShared n p = match toOpt n with None -> (empty, empty) | Some n -> let key, value = key n, value n in (* call [p] in the expected left-to-right order *) - let (lt, lf) = partitionShared0 (left n) p in + let (lt, lf) = partitionShared (left n) p in let pvd = p key value [@bs] in - let (rt, rf) = partitionShared0 (right n) p in + let (rt, rf) = partitionShared (right n) p in if pvd then (join lt key value rt, concat lf rf) else (concat lt rt, join lf key value rf) @@ -325,7 +330,7 @@ let rec lengthNode n = | Some r -> lengthNode r in 1 + sizeL + sizeR -let rec length0 n = +let size n = match toOpt n with | None -> 0 | Some n -> @@ -337,11 +342,11 @@ let rec toListAux accu n = | Some n -> toListAux ((key n, value n) :: toListAux accu (right n)) (left n) -let toList0 s = +let toList s = toListAux [] s -let rec checkInvariantInternal (v : _ t0) = +let rec checkInvariantInternal (v : _ t) = match toOpt v with | None -> true | Some n -> @@ -435,7 +440,7 @@ let rec fillArrayWithFilter n i arr p = fillArrayWithFilter r rnext arr p -let toArray0 n = +let toArray n = match toOpt n with | None -> [||] | Some n -> @@ -444,7 +449,7 @@ let toArray0 n = ignore (fillArray n 0 v : int); (* may add assertion *) v -let keysToArray0 n = +let keysToArray n = match toOpt n with | None -> [||] | Some n -> @@ -453,7 +458,7 @@ let keysToArray0 n = ignore (fillArrayKey n 0 v : int); (* may add assertion *) v -let valuesToArray0 n = +let valuesToArray n = match toOpt n with | None -> [||] | Some n -> @@ -464,19 +469,19 @@ let valuesToArray0 n = let rec ofSortedArrayRevAux arr off len = match len with - | 0 -> empty0 - | 1 -> let k, v = (A.getUnsafe arr off) in singleton0 k v + | 0 -> empty + | 1 -> let k, v = (A.getUnsafe arr off) in singleton k v | 2 -> let (x0,y0),(x1,y1) = A.(getUnsafe arr off, getUnsafe arr (off - 1) ) in - return @@ node ~left:(singleton0 x0 y0) ~key:x1 ~value:y1 ~h:2 ~right:empty0 + return @@ node ~left:(singleton x0 y0) ~key:x1 ~value:y1 ~h:2 ~right:empty | 3 -> let (x0,y0),(x1,y1),(x2,y2) = A.(getUnsafe arr off, getUnsafe arr (off - 1), getUnsafe arr (off - 2)) in - return @@ node ~left:(singleton0 x0 y0) - ~right:(singleton0 x2 y2) + return @@ node ~left:(singleton x0 y0) + ~right:(singleton x2 y2) ~key:x1 ~value:y1 ~h:2 @@ -491,19 +496,19 @@ let rec ofSortedArrayRevAux arr off len = let rec ofSortedArrayAux arr off len = match len with - | 0 -> empty0 - | 1 -> let k, v = (A.getUnsafe arr off) in singleton0 k v + | 0 -> empty + | 1 -> let k, v = (A.getUnsafe arr off) in singleton k v | 2 -> let (x0,y0),(x1,y1) = A.(getUnsafe arr off, getUnsafe arr (off + 1) ) in - return @@ node ~left:(singleton0 x0 y0) ~key:x1 ~value:y1 ~h:2 ~right:empty0 + return @@ node ~left:(singleton x0 y0) ~key:x1 ~value:y1 ~h:2 ~right:empty | 3 -> let (x0,y0),(x1,y1),(x2,y2) = A.(getUnsafe arr off, getUnsafe arr (off + 1), getUnsafe arr (off + 2)) in - return @@ node ~left:(singleton0 x0 y0) - ~right:(singleton0 x2 y2) + return @@ node ~left:(singleton x0 y0) + ~right:(singleton x2 y2) ~key:x1 ~value:y1 ~h:2 | _ -> @@ -514,7 +519,7 @@ let rec ofSortedArrayAux arr off len = ofSortedArrayAux arr (off + nl + 1) (len - nl - 1) in create left midK midV right -let ofSortedArrayUnsafe0 arr = +let ofSortedArrayUnsafe arr = ofSortedArrayAux arr 0 (A.length arr) let rec compareAux e1 e2 ~kcmp ~vcmp = @@ -541,37 +546,37 @@ let rec eqAux e1 e2 ~kcmp ~veq = else false | _, _ -> true -let cmp0 s1 s2 ~kcmp ~vcmp = - let len1,len2 = length0 s1, length0 s2 in +let cmp s1 s2 ~kcmp ~vcmp = + let len1,len2 = size s1, size s2 in if len1 = len2 then compareAux (stackAllLeft s1 []) (stackAllLeft s2 []) ~kcmp ~vcmp else if len1 < len2 then -1 else 1 -let eq0 s1 s2 ~kcmp ~veq = - let len1, len2 = length0 s1, length0 s2 in +let eq s1 s2 ~kcmp ~veq = + let len1, len2 = size s1, size s2 in if len1 = len2 then eqAux (stackAllLeft s1 []) (stackAllLeft s2 []) ~kcmp ~veq else false -let rec get0 n x ~cmp = +let rec get n x ~cmp = match toOpt n with None -> None | Some n (* Node(l, v, d, r, _) *) -> let v = key n in let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in if c = 0 then Some (value n) - else get0 ~cmp (if c < 0 then left n else right n) x + else get ~cmp (if c < 0 then left n else right n) x -let rec getUndefined0 n x ~cmp = +let rec getUndefined n x ~cmp = match toOpt n with | None -> Js.undefined | Some n -> let v = key n in let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in if c = 0 then Js.Undefined.return (value n ) - else getUndefined0 ~cmp (if c < 0 then left n else right n) x + else getUndefined ~cmp (if c < 0 then left n else right n) x -let rec getExn0 n x ~cmp = +let rec getExn n x ~cmp = match toOpt n with None -> [%assert "getExn0"] @@ -579,9 +584,9 @@ let rec getExn0 n x ~cmp = let v = key n in let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in if c = 0 then value n - else getExn0 ~cmp (if c < 0 then left n else right n) x + else getExn ~cmp (if c < 0 then left n else right n) x -let rec getWithDefault0 n x def ~cmp = +let rec getWithDefault n x def ~cmp = match toOpt n with None -> def @@ -589,16 +594,16 @@ let rec getWithDefault0 n x def ~cmp = let v = key n in let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in if c = 0 then value n - else getWithDefault0 ~cmp (if c < 0 then left n else right n) x def + else getWithDefault ~cmp (if c < 0 then left n else right n) x def -let rec mem0 n x ~cmp = +let rec has n x ~cmp = match toOpt n with None -> false | Some n (* Node(l, v, d, r, _) *) -> let v = key n in let c = (Bs_Cmp.getCmpIntenral cmp) x v [@bs] in - c = 0 || mem0 ~cmp (if c < 0 then left n else right n) x + c = 0 || has ~cmp (if c < 0 then left n else right n) x (******************************************************************) @@ -671,9 +676,9 @@ let balMutate nt = nt end -let rec updateMutate (t : _ t0) x data ~cmp = +let rec updateMutate (t : _ t) x data ~cmp = match toOpt t with - | None -> singleton0 x data + | None -> singleton x data | Some nt -> let k = key nt in let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in @@ -691,9 +696,9 @@ let rec updateMutate (t : _ t0) x data ~cmp = ); return (balMutate nt) -let ofArray0 (xs : _ array) ~cmp = +let ofArray (xs : _ array) ~cmp = let len = A.length xs in - if len = 0 then empty0 + if len = 0 then empty else let next = ref (S.strictlySortedLength xs diff --git a/jscomp/others/bs_internalAVLtree.mli b/jscomp/others/bs_internalAVLtree.mli index a765c666e75..fd0d4a9c277 100644 --- a/jscomp/others/bs_internalAVLtree.mli +++ b/jscomp/others/bs_internalAVLtree.mli @@ -24,144 +24,149 @@ -type ('key, 'a) t0 = ('key, 'a) node Js.null +type ('key, 'a) t = ('key, 'a) node Js.null and ('k, 'v) node = private { - mutable left : ('k,'v) t0; + mutable left : ('k,'v) t; mutable key : 'k; mutable value : 'v; - mutable right : ('k,'v) t0; + mutable right : ('k,'v) t; h : int } [@@bs.deriving abstract] + external toOpt : 'a Js.null -> 'a option = "#null_to_opt" external return : 'a -> 'a Js.null = "%identity" external empty : 'a Js.null = "#null" -val copy : ('k, 'v) t0 -> ('k, 'v) t0 +type ('k, 'id) cmp = ('k, 'id) Bs_Cmp.cmp + +val copy : ('k, 'v) t -> ('k, 'v) t val create : - ('a,'b) t0 -> 'a -> 'b -> ('a,'b) t0 -> ('a,'b) t0 + ('a,'b) t -> 'a -> 'b -> ('a,'b) t -> ('a,'b) t val bal : - ('a,'b) t0 -> 'a -> 'b -> ('a,'b) t0 -> ('a,'b) t0 -val singleton0 : 'a -> 'b -> ('a,'b) t0 + ('a,'b) t -> 'a -> 'b -> ('a,'b) t -> ('a,'b) t + +val singleton : 'a -> 'b -> ('a,'b) t val updateValue : ('k, 'v) node -> 'v -> ('k,'v) node -val minKey0: ('a, 'b) t0 -> 'a option -val minKeyUndefined0: ('a, 'b) t0 -> 'a Js.undefined +val minKey: ('a, 'b) t -> 'a option +val minKeyUndefined: ('a, 'b) t -> 'a Js.undefined -val maxKey0 : ('a, 'b) t0 -> 'a option -val maxKeyUndefined0 : ('a, 'b) t0 -> 'a Js.undefined +val maxKey : ('a, 'b) t -> 'a option +val maxKeyUndefined : ('a, 'b) t -> 'a Js.undefined -val minimum0 : ('a, 'b) t0 -> ('a * 'b) option -val minUndefined0 : ('a,'b) t0 -> ('a * 'b) Js.undefined +val minimum : ('a, 'b) t -> ('a * 'b) option +val minUndefined : ('a,'b) t -> ('a * 'b) Js.undefined -val maximum0 : ('a,'b) t0 -> ('a * 'b) option -val maxUndefined0 : ('a,'b) t0 -> ('a * 'b) Js.undefined +val maximum : ('a,'b) t -> ('a * 'b) option +val maxUndefined : ('a,'b) t -> ('a * 'b) Js.undefined -val removeMinAuxWithRef : ('a, 'b) node -> 'a ref -> 'b ref -> ('a,'b) t0 +val removeMinAuxWithRef : ('a, 'b) node -> 'a ref -> 'b ref -> ('a,'b) t -val empty0 : _ t0 -val isEmpty0 : _ t0 -> bool +val empty : _ t +val isEmpty : _ t -> bool val stackAllLeft : - ('a,'b) t0 -> ('a, 'b) node list -> ('a, 'b) node list + ('a,'b) t -> ('a, 'b) node list -> ('a, 'b) node list -val iter0 : ('a,'b) t0 -> ('a -> 'b -> unit [@bs]) -> unit -val map0 : ('c, 'a) t0 -> ('a -> 'b [@bs]) -> ('c, 'b) t0 -val mapi0 : - ('a,'b) t0 -> ('a -> 'b -> 'c [@bs]) -> ('a, 'c) t0 -val fold0 : ('a,'b) t0 -> 'c -> ( 'c -> 'a -> 'b -> 'c [@bs]) -> 'c -val every0 : ('a,'b) t0 -> ('a -> 'b -> bool [@bs]) -> bool -val some0 : ('a,'b) t0 -> ('a -> 'b -> bool [@bs]) -> bool +val forEach : ('a,'b) t -> ('a -> 'b -> unit [@bs]) -> unit +val map : ('c, 'a) t -> ('a -> 'b [@bs]) -> ('c, 'b) t +val mapWithKey : + ('a,'b) t -> ('a -> 'b -> 'c [@bs]) -> ('a, 'c) t +val reduce : ('a,'b) t -> 'c -> ( 'c -> 'a -> 'b -> 'c [@bs]) -> 'c +val every : ('a,'b) t -> ('a -> 'b -> bool [@bs]) -> bool +val some : ('a,'b) t -> ('a -> 'b -> bool [@bs]) -> bool -val join : ('a,'b) t0 -> 'a -> 'b -> ('a,'b) t0 -> ('a, 'b) t0 +val join : ('a,'b) t -> 'a -> 'b -> ('a,'b) t -> ('a, 'b) t -val concat : ('a,'b) t0 -> ('a,'b) t0 -> ('a,'b) t0 +val concat : ('a,'b) t -> ('a,'b) t -> ('a,'b) t val concatOrJoin : - ('a,'b) t0 -> 'a -> 'b option -> ('a,'b) t0 -> ('a, 'b) t0 -val filterShared0 : - ('a,'b) t0 -> + ('a,'b) t -> 'a -> 'b option -> ('a,'b) t -> ('a, 'b) t + +val filterShared : + ('a,'b) t -> ('a -> 'b -> bool [@bs]) -> - ('a,'b) t0 + ('a,'b) t -val filterMap0 : - ('a, 'b) t0 -> +val filterMap : + ('a, 'b) t -> ('a -> 'b -> 'c option [@bs]) -> - ('a, 'c) t0 + ('a, 'c) t (* seems no sharing, could be shared with mutation *) -val partitionShared0 : - ('a,'b) t0 -> +val partitionShared : + ('a,'b) t -> ('a -> 'b -> bool [@bs]) -> - ('a,'b) t0 * ('a,'b) t0 + ('a,'b) t * ('a,'b) t val lengthNode : ('a, 'b) node -> int -val length0 : ('a,'b) t0 -> int +val size : ('a,'b) t -> int -val toList0 : ('a,'b) t0 -> ('a * 'b) list -val checkInvariantInternal : ('a,'b) t0 -> bool +val toList : ('a,'b) t -> ('a * 'b) list +val checkInvariantInternal : ('a,'b) t -> bool val fillArray : ('a,'b) node -> int -> ('a * 'b) array -> int -val toArray0 : ('a, 'b) t0 -> ('a * 'b) array -val keysToArray0 : ('a, 'b) t0 -> 'a array -val valuesToArray0 : ('a, 'b) t0 -> 'b array -val ofSortedArrayAux : ('a * 'b) array -> int -> int -> ('a, 'b) t0 -val ofSortedArrayRevAux : ('a * 'b) array -> int -> int -> ('a, 'b) t0 -val ofSortedArrayUnsafe0 : ('a * 'b) array -> ('a, 'b) t0 +val toArray : ('a, 'b) t -> ('a * 'b) array +val keysToArray : ('a, 'b) t -> 'a array +val valuesToArray : ('a, 'b) t -> 'b array +val ofSortedArrayAux : ('a * 'b) array -> int -> int -> ('a, 'b) t +val ofSortedArrayRevAux : ('a * 'b) array -> int -> int -> ('a, 'b) t +val ofSortedArrayUnsafe : ('a * 'b) array -> ('a, 'b) t -val cmp0 : - ('a, 'b) t0 -> ('a, 'c) t0 -> - kcmp:('a,_) Bs_Cmp.cmp -> +val cmp : + ('a, 'b) t -> ('a, 'c) t -> + kcmp:('a,_) cmp -> vcmp :('b -> 'c -> int [@bs]) -> int -val eq0: - ('a, 'b) t0 -> ('a, 'c) t0 -> - kcmp:('a,_) Bs_Cmp.cmp -> +val eq : + ('a, 'b) t -> ('a, 'c) t -> + kcmp:('a,_) cmp -> veq:('b -> 'c -> bool [@bs]) -> bool -val get0: - ('a, 'b) t0 -> +val get: + ('a, 'b) t -> 'a -> - cmp:('a,_) Bs_Cmp.cmp -> + cmp:('a,_) cmp -> 'b option -val getUndefined0: - ('a, 'b) t0 -> +val getUndefined: + ('a, 'b) t -> 'a -> - cmp:('a,_) Bs_Cmp.cmp -> + cmp:('a,_) cmp -> 'b Js.undefined -val getWithDefault0: - ('a, 'b) t0 -> +val getWithDefault: + ('a, 'b) t -> 'a -> 'b -> - cmp:('a,_) Bs_Cmp.cmp -> + cmp:('a,_) cmp -> 'b -val getExn0: - ('a, 'b) t0 -> +val getExn: + ('a, 'b) t -> 'a -> - cmp:('a,_) Bs_Cmp.cmp -> + cmp:('a,_) cmp -> 'b -val mem0: - ('a, 'b) t0 -> +val has: + ('a, 'b) t -> 'a -> - cmp:('a,_) Bs_Cmp.cmp -> + cmp:('a,_) cmp -> bool -val ofArray0 : ('a * 'b) array -> cmp:('a,'id) Bs_Cmp.cmp -> ('a, 'b) t0 +val ofArray : ('a * 'b) array -> cmp:('a,'id) cmp -> ('a, 'b) t val updateMutate : - ('a, 'b) t0 -> 'a -> 'b -> - cmp:('a,'id) Bs_Cmp.cmp -> - ('a, 'b) t0 + ('a, 'b) t -> 'a -> 'b -> + cmp:('a,'id) cmp -> + ('a, 'b) t val balMutate : ('a, 'b) node -> ('a, 'b) node @@ -169,4 +174,4 @@ val balMutate : val removeMinAuxWithRootMutate : ('a, 'b) node -> ('a, 'b) node -> - ('a, 'b) t0 + ('a, 'b) t diff --git a/jscomp/others/bs_internalMapInt.ml b/jscomp/others/bs_internalMapInt.ml index 95eaa373eed..51acd84ef0a 100644 --- a/jscomp/others/bs_internalMapInt.ml +++ b/jscomp/others/bs_internalMapInt.ml @@ -5,14 +5,15 @@ type key = int module N = Bs_internalAVLtree module A = Bs_Array module S = Bs_Sort -type ('key, 'a, 'id) t0 = ('key,'a) N.t0 -type 'a t = (key,'a) N.t0 + + +type 'a t = (key,'a) N.t let rec add t (x : key) (data : _) = match N.toOpt t with | None -> - N.singleton0 x data + N.singleton x data | Some n -> let k = N.key n in if x = k then @@ -57,12 +58,12 @@ let rec getWithDefault n (x : key) def = if x = v then (N.value n) else getWithDefault (if x < v then (N.left n) else (N.right n)) x def -let rec mem n (x : key)= +let rec has n (x : key)= match N.toOpt n with None -> false | Some n (* Node(l, v, d, r, _) *) -> let v = N.key n in - x = v || mem (if x < v then N.left n else N.right n) x + x = v || has (if x < v then N.left n else N.right n) x let rec remove n (x : key) = match N.toOpt n with @@ -82,7 +83,7 @@ let rec remove n (x : key) = else N.(bal l v (value n) (remove r x )) -let rec splitAux (x : key) (n : _ N.node) : _ t0 * _ option * _ t0 = +let rec splitAux (x : key) (n : _ N.node) : _ t * _ option * _ t = let l,v,d,r = N.(left n , key n, value n, right n) in if x = v then (l, Some d, r) else @@ -138,7 +139,7 @@ let rec compareAux e1 e2 vcmp = | _, _ -> 0 let cmp s1 s2 cmp = - let len1, len2 = N.length0 s1, N.length0 s2 in + let len1, len2 = N.size s1, N.size s2 in if len1 = len2 then compareAux (N.stackAllLeft s1 []) @@ -161,7 +162,7 @@ let rec eqAux e1 e2 eq = | _, _ -> true (*end *) let eq s1 s2 eq = - let len1,len2 = N.length0 s1, N.length0 s2 in + let len1,len2 = N.size s1, N.size s2 in if len1 = len2 then eqAux (N.stackAllLeft s1 []) @@ -170,7 +171,7 @@ let eq s1 s2 eq = let rec addMutate (t : _ t) x data : _ t = match N.toOpt t with - | None -> N.singleton0 x data + | None -> N.singleton x data | Some nt -> let k = N.key nt in (* let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in *) @@ -191,7 +192,7 @@ let rec addMutate (t : _ t) x data : _ t = let ofArray (xs : (key * _) array) = let len = A.length xs in - if len = 0 then N.empty0 + if len = 0 then N.empty else let next = ref (S.strictlySortedLength xs diff --git a/jscomp/others/bs_internalMapString.ml b/jscomp/others/bs_internalMapString.ml index 4b7f55818ae..bfea467a42d 100644 --- a/jscomp/others/bs_internalMapString.ml +++ b/jscomp/others/bs_internalMapString.ml @@ -5,14 +5,15 @@ type key = string module N = Bs_internalAVLtree module A = Bs_Array module S = Bs_Sort -type ('key, 'a, 'id) t0 = ('key,'a) N.t0 -type 'a t = (key,'a) N.t0 + + +type 'a t = (key,'a) N.t let rec add t (x : key) (data : _) = match N.toOpt t with | None -> - N.singleton0 x data + N.singleton x data | Some n -> let k = N.key n in if x = k then @@ -57,12 +58,12 @@ let rec getWithDefault n (x : key) def = if x = v then (N.value n) else getWithDefault (if x < v then (N.left n) else (N.right n)) x def -let rec mem n (x : key)= +let rec has n (x : key)= match N.toOpt n with None -> false | Some n (* Node(l, v, d, r, _) *) -> let v = N.key n in - x = v || mem (if x < v then N.left n else N.right n) x + x = v || has (if x < v then N.left n else N.right n) x let rec remove n (x : key) = match N.toOpt n with @@ -82,7 +83,7 @@ let rec remove n (x : key) = else N.(bal l v (value n) (remove r x )) -let rec splitAux (x : key) (n : _ N.node) : _ t0 * _ option * _ t0 = +let rec splitAux (x : key) (n : _ N.node) : _ t * _ option * _ t = let l,v,d,r = N.(left n , key n, value n, right n) in if x = v then (l, Some d, r) else @@ -138,7 +139,7 @@ let rec compareAux e1 e2 vcmp = | _, _ -> 0 let cmp s1 s2 cmp = - let len1, len2 = N.length0 s1, N.length0 s2 in + let len1, len2 = N.size s1, N.size s2 in if len1 = len2 then compareAux (N.stackAllLeft s1 []) @@ -161,7 +162,7 @@ let rec eqAux e1 e2 eq = | _, _ -> true (*end *) let eq s1 s2 eq = - let len1,len2 = N.length0 s1, N.length0 s2 in + let len1,len2 = N.size s1, N.size s2 in if len1 = len2 then eqAux (N.stackAllLeft s1 []) @@ -170,7 +171,7 @@ let eq s1 s2 eq = let rec addMutate (t : _ t) x data : _ t = match N.toOpt t with - | None -> N.singleton0 x data + | None -> N.singleton x data | Some nt -> let k = N.key nt in (* let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in *) @@ -191,7 +192,7 @@ let rec addMutate (t : _ t) x data : _ t = let ofArray (xs : (key * _) array) = let len = A.length xs in - if len = 0 then N.empty0 + if len = 0 then N.empty else let next = ref (S.strictlySortedLength xs diff --git a/jscomp/others/internal_map.cppo.ml b/jscomp/others/internal_map.cppo.ml index 48da29a6a02..50292395870 100644 --- a/jscomp/others/internal_map.cppo.ml +++ b/jscomp/others/internal_map.cppo.ml @@ -9,14 +9,15 @@ type key = int module N = Bs_internalAVLtree module A = Bs_Array module S = Bs_Sort -type ('key, 'a, 'id) t0 = ('key,'a) N.t0 -type 'a t = (key,'a) N.t0 + + +type 'a t = (key,'a) N.t let rec add t (x : key) (data : _) = match N.toOpt t with | None -> - N.singleton0 x data + N.singleton x data | Some n -> let k = N.key n in if x = k then @@ -61,12 +62,12 @@ let rec getWithDefault n (x : key) def = if x = v then (N.value n) else getWithDefault (if x < v then (N.left n) else (N.right n)) x def -let rec mem n (x : key)= +let rec has n (x : key)= match N.toOpt n with None -> false | Some n (* Node(l, v, d, r, _) *) -> let v = N.key n in - x = v || mem (if x < v then N.left n else N.right n) x + x = v || has (if x < v then N.left n else N.right n) x let rec remove n (x : key) = match N.toOpt n with @@ -86,7 +87,7 @@ let rec remove n (x : key) = else N.(bal l v (value n) (remove r x )) -let rec splitAux (x : key) (n : _ N.node) : _ t0 * _ option * _ t0 = +let rec splitAux (x : key) (n : _ N.node) : _ t * _ option * _ t = let l,v,d,r = N.(left n , key n, value n, right n) in if x = v then (l, Some d, r) else @@ -142,7 +143,7 @@ let rec compareAux e1 e2 vcmp = | _, _ -> 0 let cmp s1 s2 cmp = - let len1, len2 = N.length0 s1, N.length0 s2 in + let len1, len2 = N.size s1, N.size s2 in if len1 = len2 then compareAux (N.stackAllLeft s1 []) @@ -165,7 +166,7 @@ let rec eqAux e1 e2 eq = | _, _ -> true (*end *) let eq s1 s2 eq = - let len1,len2 = N.length0 s1, N.length0 s2 in + let len1,len2 = N.size s1, N.size s2 in if len1 = len2 then eqAux (N.stackAllLeft s1 []) @@ -174,7 +175,7 @@ let eq s1 s2 eq = let rec addMutate (t : _ t) x data : _ t = match N.toOpt t with - | None -> N.singleton0 x data + | None -> N.singleton x data | Some nt -> let k = N.key nt in (* let c = (Bs_Cmp.getCmpIntenral cmp) x k [@bs] in *) @@ -195,7 +196,7 @@ let rec addMutate (t : _ t) x data : _ t = let ofArray (xs : (key * _) array) = let len = A.length xs in - if len = 0 then N.empty0 + if len = 0 then N.empty else let next = ref (S.strictlySortedLength xs diff --git a/jscomp/others/map.cppo.ml b/jscomp/others/map.cppo.ml index bfed673daf3..40a9408e4d6 100644 --- a/jscomp/others/map.cppo.ml +++ b/jscomp/others/map.cppo.ml @@ -12,39 +12,39 @@ module N = Bs_internalAVLtree module A = Bs_Array module S = Bs_Sort -type 'a t = (key, 'a) N.t0 +type 'a t = (key, 'a) N.t -let empty = N.empty0 -let isEmpty = N.isEmpty0 -let singleton = N.singleton0 +let empty = N.empty +let isEmpty = N.isEmpty +let singleton = N.singleton -let minKey = N.minKey0 -let minKeyUndefined = N.minKeyUndefined0 -let maxKey = N.maxKey0 -let maxKeyUndefined = N.maxKeyUndefined0 -let minimum = N.minimum0 -let minUndefined = N.minUndefined0 -let maximum = N.maximum0 -let maxUndefined = N.maxUndefined0 -let forEach = N.iter0 -let map = N.map0 -let mapWithKey = N.mapi0 -let reduce = N.fold0 -let every = N.every0 -let some = N.some0 -let keepBy = N.filterShared0 -let partition = N.partitionShared0 -let size = N.length0 -let toList = N.toList0 -let toArray = N.toArray0 -let keysToArray = N.keysToArray0 -let valuesToArray = N.valuesToArray0 +let minKey = N.minKey +let minKeyUndefined = N.minKeyUndefined +let maxKey = N.maxKey +let maxKeyUndefined = N.maxKeyUndefined +let minimum = N.minimum +let minUndefined = N.minUndefined +let maximum = N.maximum +let maxUndefined = N.maxUndefined +let forEach = N.forEach +let map = N.map +let mapWithKey = N.mapWithKey +let reduce = N.reduce +let every = N.every +let some = N.some +let keepBy = N.filterShared +let partition = N.partitionShared +let size = N.size +let toList = N.toList +let toArray = N.toArray +let keysToArray = N.keysToArray +let valuesToArray = N.valuesToArray let checkInvariantInternal = N.checkInvariantInternal let rec set t (newK : key) (newD : _) = match N.toOpt t with | None -> - N.singleton0 newK newD + N.singleton newK newD | Some n -> let k = N.key n in if newK = k then @@ -62,7 +62,7 @@ let rec update t (x : key) f = begin match f None [@bs] with | None -> t | Some data -> - N.singleton0 x data + N.singleton x data end | Some n -> let k = N.key n in @@ -117,7 +117,7 @@ let rec removeAux n (x : key) = let remove n x = match N.toOpt n with - | None -> N.empty0 + | None -> N.empty | Some n -> removeAux n x let rec removeArrayAux t xs i len = @@ -133,7 +133,7 @@ let rec removeArrayAux t xs i len = let removeArray t keys = let len = A.length keys in match N.toOpt t with - | None -> N.empty0 + | None -> N.empty | Some t -> removeArrayAux t keys 0 len let mergeArray h arr = @@ -145,7 +145,7 @@ let mergeArray h arr = done ; !v -let has = I.mem +let has = I.has let cmp = I.cmp let eq = I.eq let get = I.get diff --git a/jscomp/others/mapm.cppo.ml b/jscomp/others/mapm.cppo.ml index 18f2b9f255a..c1169ca505c 100644 --- a/jscomp/others/mapm.cppo.ml +++ b/jscomp/others/mapm.cppo.ml @@ -20,18 +20,18 @@ type 'a t = { } [@@bs.deriving abstract] -let empty () = t ~data:N.empty0 -let isEmpty m = N.isEmpty0 (data m) -let singleton k v = t ~data:(N.singleton0 k v) - -let minKeyUndefined m = N.minKeyUndefined0 (data m) -let minKey m = N.minKey0 (data m) -let maxKeyUndefined m = N.maxKeyUndefined0 (data m) -let maxKey m = N.maxKey0 (data m) -let minimum m = N.minimum0 (data m) -let minUndefined m = N.minUndefined0 (data m) -let maximum m = N.maximum0 (data m) -let maxUndefined m = N.maxUndefined0 (data m) +let empty () = t ~data:N.empty +let isEmpty m = N.isEmpty (data m) +let singleton k v = t ~data:(N.singleton k v) + +let minKeyUndefined m = N.minKeyUndefined (data m) +let minKey m = N.minKey (data m) +let maxKeyUndefined m = N.maxKeyUndefined (data m) +let maxKey m = N.maxKey (data m) +let minimum m = N.minimum (data m) +let minUndefined m = N.minUndefined (data m) +let maximum m = N.maximum (data m) +let maxUndefined m = N.maxUndefined (data m) let set (m : _ t) k v = let old_data = data m in @@ -39,20 +39,20 @@ let set (m : _ t) k v = if v != old_data then dataSet m v -let forEach d f = N.iter0 (data d) f -let map d f = t ~data:(N.map0 (data d) f) -let mapWithKey d f = t ~data:(N.mapi0 (data d) f) -let reduce d acc f = N.fold0 (data d) acc f -let every d f = N.every0 (data d) f -let some d f = N.some0 (data d) f - -let size d = N.length0 (data d) -let toList d = N.toList0 (data d) -let toArray d = N.toArray0 (data d) -let keysToArray d = N.keysToArray0 (data d) -let valuesToArray d = N.valuesToArray0 (data d) +let forEach d f = N.forEach (data d) f +let map d f = t ~data:(N.map (data d) f) +let mapWithKey d f = t ~data:(N.mapWithKey (data d) f) +let reduce d acc f = N.reduce (data d) acc f +let every d f = N.every (data d) f +let some d f = N.some (data d) f + +let size d = N.size (data d) +let toList d = N.toList (data d) +let toArray d = N.toArray (data d) +let keysToArray d = N.keysToArray (data d) +let valuesToArray d = N.valuesToArray (data d) let checkInvariantInternal d = N.checkInvariantInternal (data d) -let has d v = I.mem (data d) v +let has d v = I.has (data d) v let rec removeMutateAux nt (x : key)= @@ -91,11 +91,11 @@ let remove d v = dataSet d newRoot -let rec updateDone0 t (x : key) f = +let rec updateDone t (x : key) f = match N.toOpt t with | None -> (match f None [@bs] with - | Some data -> N.singleton0 x data + | Some data -> N.singleton x data | None -> t) | Some nt -> let k = N.key nt in @@ -118,16 +118,16 @@ let rec updateDone0 t (x : key) f = else let l, r = N.(left nt, right nt) in (if x < k then - let ll = updateDone0 l x f in + let ll = updateDone l x f in N.leftSet nt ll else - N.rightSet nt (updateDone0 r x f); + N.rightSet nt (updateDone r x f); ); N.return (N.balMutate nt) let update t x f = let oldRoot = data t in - let newRoot = updateDone0 oldRoot x f in + let newRoot = updateDone oldRoot x f in if newRoot != oldRoot then dataSet t newRoot @@ -136,7 +136,7 @@ let rec removeArrayMutateAux t xs i len = let ele = A.getUnsafe xs i in let u = removeMutateAux t ele in match N.toOpt u with - | None -> N.empty0 + | None -> N.empty | Some t -> removeArrayMutateAux t xs (i+1) len else N.return t diff --git a/jscomp/test/bs_mutable_set_test.js b/jscomp/test/bs_mutable_set_test.js index 876eb54e6cc..ccf7d8e2a9f 100644 --- a/jscomp/test/bs_mutable_set_test.js +++ b/jscomp/test/bs_mutable_set_test.js @@ -22,7 +22,7 @@ function b(loc, x) { } var v = { - data: Bs_internalAVLset.empty0 + data: Bs_internalAVLset.empty }; for(var i = 0; i <= 100000; ++i){ @@ -32,22 +32,22 @@ for(var i = 0; i <= 100000; ++i){ b("File \"bs_mutable_set_test.ml\", line 19, characters 4-11", Bs_internalAVLset.checkInvariantInternal(v.data)); b("File \"bs_mutable_set_test.ml\", line 20, characters 4-11", Bs_Range.every(0, 100000, (function (i) { - return Bs_internalSetInt.mem(v.data, i); + return Bs_internalSetInt.has(v.data, i); }))); -eq("File \"bs_mutable_set_test.ml\", line 23, characters 5-12", Bs_internalAVLset.length0(v.data), 100001); +eq("File \"bs_mutable_set_test.ml\", line 23, characters 5-12", Bs_internalAVLset.size(v.data), 100001); var u = Bs_Array.concat(Array_data_util.randomRange(30, 100), Array_data_util.randomRange(40, 120)); var v$1 = { - data: Bs_internalAVLset.empty0 + data: Bs_internalAVLset.empty }; Bs_SetIntM.mergeMany(v$1, u); -eq("File \"bs_mutable_set_test.ml\", line 29, characters 5-12", Bs_internalAVLset.length0(v$1.data), 91); +eq("File \"bs_mutable_set_test.ml\", line 29, characters 5-12", Bs_internalAVLset.size(v$1.data), 91); -eq("File \"bs_mutable_set_test.ml\", line 30, characters 5-12", Bs_internalAVLset.toArray0(v$1.data), Array_data_util.range(30, 120)); +eq("File \"bs_mutable_set_test.ml\", line 30, characters 5-12", Bs_internalAVLset.toArray(v$1.data), Array_data_util.range(30, 120)); var u$1 = Bs_Array.concat(Array_data_util.randomRange(0, 100000), Array_data_util.randomRange(0, 100)); @@ -55,7 +55,7 @@ var v$2 = { data: Bs_internalSetInt.ofArray(u$1) }; -eq("File \"bs_mutable_set_test.ml\", line 35, characters 5-12", Bs_internalAVLset.length0(v$2.data), 100001); +eq("File \"bs_mutable_set_test.ml\", line 35, characters 5-12", Bs_internalAVLset.size(v$2.data), 100001); var u$2 = Array_data_util.randomRange(50000, 80000); @@ -63,7 +63,7 @@ for(var i$1 = 0 ,i_finish = u$2.length - 1 | 0; i$1 <= i_finish; ++i$1){ Bs_SetIntM.remove(v$2, i$1); } -eq("File \"bs_mutable_set_test.ml\", line 42, characters 5-12", Bs_internalAVLset.length0(v$2.data), 70000); +eq("File \"bs_mutable_set_test.ml\", line 42, characters 5-12", Bs_internalAVLset.size(v$2.data), 70000); var vv = Array_data_util.randomRange(0, 100000); @@ -71,9 +71,9 @@ for(var i$2 = 0 ,i_finish$1 = vv.length - 1 | 0; i$2 <= i_finish$1; ++i$2){ Bs_SetIntM.remove(v$2, Caml_array.caml_array_get(vv, i$2)); } -eq("File \"bs_mutable_set_test.ml\", line 48, characters 5-12", Bs_internalAVLset.length0(v$2.data), 0); +eq("File \"bs_mutable_set_test.ml\", line 48, characters 5-12", Bs_internalAVLset.size(v$2.data), 0); -b("File \"bs_mutable_set_test.ml\", line 49, characters 4-11", Bs_internalAVLset.isEmpty0(v$2.data)); +b("File \"bs_mutable_set_test.ml\", line 49, characters 4-11", Bs_internalAVLset.isEmpty(v$2.data)); var xs = Bs_Array.makeBy(30, (function (i) { return i; @@ -87,13 +87,13 @@ Bs_SetIntM.remove(v$3, 30); Bs_SetIntM.remove(v$3, 29); -b("File \"bs_mutable_set_test.ml\", line 55, characters 4-11", +(28 === Bs_internalAVLset.maxUndefined0(v$3.data))); +b("File \"bs_mutable_set_test.ml\", line 55, characters 4-11", +(28 === Bs_internalAVLset.maxUndefined(v$3.data))); Bs_SetIntM.remove(v$3, 0); -b("File \"bs_mutable_set_test.ml\", line 57, characters 4-11", +(1 === Bs_internalAVLset.minUndefined0(v$3.data))); +b("File \"bs_mutable_set_test.ml\", line 57, characters 4-11", +(1 === Bs_internalAVLset.minUndefined(v$3.data))); -eq("File \"bs_mutable_set_test.ml\", line 58, characters 5-12", Bs_internalAVLset.length0(v$3.data), 28); +eq("File \"bs_mutable_set_test.ml\", line 58, characters 5-12", Bs_internalAVLset.size(v$3.data), 28); var vv$1 = Array_data_util.randomRange(1, 28); @@ -101,14 +101,14 @@ for(var i$3 = 0 ,i_finish$2 = vv$1.length - 1 | 0; i$3 <= i_finish$2; ++i$3){ Bs_SetIntM.remove(v$3, Caml_array.caml_array_get(vv$1, i$3)); } -eq("File \"bs_mutable_set_test.ml\", line 63, characters 5-12", Bs_internalAVLset.length0(v$3.data), 0); +eq("File \"bs_mutable_set_test.ml\", line 63, characters 5-12", Bs_internalAVLset.size(v$3.data), 0); function id(loc, x) { var u = { - data: Bs_internalAVLset.ofSortedArrayUnsafe0(x) + data: Bs_internalAVLset.ofSortedArrayUnsafe(x) }; b(loc, Bs_internalAVLset.checkInvariantInternal(u.data)); - return b(loc, Bs_Array.every2(Bs_internalAVLset.toArray0(u.data), x, (function (x, y) { + return b(loc, Bs_Array.every2(Bs_internalAVLset.toArray(u.data), x, (function (x, y) { return +(x === y); }))); } @@ -218,13 +218,13 @@ for(var i$4 = 0; i$4 <= 200; ++i$4){ Bs_SetIntM.remove(v$4, i$4); } -eq("File \"bs_mutable_set_test.ml\", line 92, characters 5-12", Bs_internalAVLset.length0(copyV.data), 126); +eq("File \"bs_mutable_set_test.ml\", line 92, characters 5-12", Bs_internalAVLset.size(copyV.data), 126); -eq("File \"bs_mutable_set_test.ml\", line 93, characters 5-12", Bs_internalAVLset.toArray0(copyV.data), Bs_Array.makeBy(126, (function (i) { +eq("File \"bs_mutable_set_test.ml\", line 93, characters 5-12", Bs_internalAVLset.toArray(copyV.data), Bs_Array.makeBy(126, (function (i) { return (i << 3); }))); -eq("File \"bs_mutable_set_test.ml\", line 94, characters 5-12", Bs_internalAVLset.length0(v$4.data), 800); +eq("File \"bs_mutable_set_test.ml\", line 94, characters 5-12", Bs_internalAVLset.size(v$4.data), 800); b("File \"bs_mutable_set_test.ml\", line 95, characters 4-11", Bs_SetIntM.eq(copyV, match[0])); @@ -331,7 +331,7 @@ b("File \"bs_mutable_set_test.ml\", line 124, characters 4-11", Bs_SetIntM.eq(Bs }, { data: Bs_internalSetInt.ofArray(xs$16) }), { - data: Bs_internalAVLset.empty0 + data: Bs_internalAVLset.empty })); var xs$17 = Array_data_util.randomRange(21, 40); @@ -343,7 +343,7 @@ b("File \"bs_mutable_set_test.ml\", line 130, characters 4-11", Bs_SetIntM.eq(Bs }, { data: Bs_internalSetInt.ofArray(xs$18) }), { - data: Bs_internalAVLset.empty0 + data: Bs_internalAVLset.empty })); b("File \"bs_mutable_set_test.ml\", line 136, characters 4-11", Bs_SetIntM.eq(Bs_SetIntM.intersect({ diff --git a/jscomp/test/bs_poly_mutable_map_test.js b/jscomp/test/bs_poly_mutable_map_test.js index 82955b87005..0b4a6f50780 100644 --- a/jscomp/test/bs_poly_mutable_map_test.js +++ b/jscomp/test/bs_poly_mutable_map_test.js @@ -61,14 +61,14 @@ Bs_MapM.removeMany(a0, /* array */[ 6 ]); -eq("File \"bs_poly_mutable_map_test.ml\", line 30, characters 7-14", Bs_internalAVLtree.keysToArray0(a0.data), /* int array */[ +eq("File \"bs_poly_mutable_map_test.ml\", line 30, characters 7-14", Bs_internalAVLtree.keysToArray(a0.data), /* int array */[ 9, 10 ]); Bs_MapM.removeMany(a0, Array_data_util.randomRange(0, 100)); -b("File \"bs_poly_mutable_map_test.ml\", line 32, characters 6-13", Bs_internalAVLtree.isEmpty0(a0.data)); +b("File \"bs_poly_mutable_map_test.ml\", line 32, characters 6-13", Bs_internalAVLtree.isEmpty(a0.data)); Mt.from_pair_suites("bs_poly_mutable_map_test.ml", suites[0]); diff --git a/jscomp/test/bs_poly_mutable_set_test.js b/jscomp/test/bs_poly_mutable_set_test.js index c210538aef8..f554449e49b 100644 --- a/jscomp/test/bs_poly_mutable_set_test.js +++ b/jscomp/test/bs_poly_mutable_set_test.js @@ -31,13 +31,13 @@ b("File \"bs_poly_mutable_set_test.ml\", line 17, characters 4-11", Bs_SetM.remo b("File \"bs_poly_mutable_set_test.ml\", line 18, characters 4-11", Bs_SetM.removeCheck(u, 20)); -eq("File \"bs_poly_mutable_set_test.ml\", line 19, characters 5-12", Bs_internalAVLset.length0(u.data), 28); +eq("File \"bs_poly_mutable_set_test.ml\", line 19, characters 5-12", Bs_internalAVLset.size(u.data), 28); var r = Array_data_util.randomRange(0, 30); -b("File \"bs_poly_mutable_set_test.ml\", line 21, characters 4-11", +(29 === Bs_internalAVLset.maxUndefined0(u.data))); +b("File \"bs_poly_mutable_set_test.ml\", line 21, characters 4-11", +(29 === Bs_internalAVLset.maxUndefined(u.data))); -b("File \"bs_poly_mutable_set_test.ml\", line 22, characters 4-11", +(1 === Bs_internalAVLset.minUndefined0(u.data))); +b("File \"bs_poly_mutable_set_test.ml\", line 22, characters 4-11", +(1 === Bs_internalAVLset.minUndefined(u.data))); Bs_SetM.add(u, 3); @@ -45,7 +45,7 @@ for(var i = 0 ,i_finish = r.length - 1 | 0; i <= i_finish; ++i){ Bs_SetM.remove(u, r[i]); } -b("File \"bs_poly_mutable_set_test.ml\", line 27, characters 4-11", Bs_internalAVLset.isEmpty0(u.data)); +b("File \"bs_poly_mutable_set_test.ml\", line 27, characters 4-11", Bs_internalAVLset.isEmpty(u.data)); Bs_SetM.add(u, 0); @@ -55,41 +55,41 @@ Bs_SetM.add(u, 2); Bs_SetM.add(u, 0); -eq("File \"bs_poly_mutable_set_test.ml\", line 32, characters 5-12", Bs_internalAVLset.length0(u.data), 3); +eq("File \"bs_poly_mutable_set_test.ml\", line 32, characters 5-12", Bs_internalAVLset.size(u.data), 3); -b("File \"bs_poly_mutable_set_test.ml\", line 33, characters 4-11", 1 - Bs_internalAVLset.isEmpty0(u.data)); +b("File \"bs_poly_mutable_set_test.ml\", line 33, characters 4-11", 1 - Bs_internalAVLset.isEmpty(u.data)); for(var i$1 = 0; i$1 <= 3; ++i$1){ Bs_SetM.remove(u, i$1); } -b("File \"bs_poly_mutable_set_test.ml\", line 37, characters 4-11", Bs_internalAVLset.isEmpty0(u.data)); +b("File \"bs_poly_mutable_set_test.ml\", line 37, characters 4-11", Bs_internalAVLset.isEmpty(u.data)); Bs_SetM.mergeMany(u, Array_data_util.randomRange(0, 20000)); Bs_SetM.mergeMany(u, Array_data_util.randomRange(0, 200)); -eq("File \"bs_poly_mutable_set_test.ml\", line 40, characters 5-12", Bs_internalAVLset.length0(u.data), 20001); +eq("File \"bs_poly_mutable_set_test.ml\", line 40, characters 5-12", Bs_internalAVLset.size(u.data), 20001); Bs_SetM.removeMany(u, Array_data_util.randomRange(0, 200)); -eq("File \"bs_poly_mutable_set_test.ml\", line 42, characters 5-12", Bs_internalAVLset.length0(u.data), 19800); +eq("File \"bs_poly_mutable_set_test.ml\", line 42, characters 5-12", Bs_internalAVLset.size(u.data), 19800); Bs_SetM.removeMany(u, Array_data_util.randomRange(0, 1000)); -eq("File \"bs_poly_mutable_set_test.ml\", line 44, characters 5-12", Bs_internalAVLset.length0(u.data), 19000); +eq("File \"bs_poly_mutable_set_test.ml\", line 44, characters 5-12", Bs_internalAVLset.size(u.data), 19000); Bs_SetM.removeMany(u, Array_data_util.randomRange(0, 1000)); -eq("File \"bs_poly_mutable_set_test.ml\", line 46, characters 5-12", Bs_internalAVLset.length0(u.data), 19000); +eq("File \"bs_poly_mutable_set_test.ml\", line 46, characters 5-12", Bs_internalAVLset.size(u.data), 19000); Bs_SetM.removeMany(u, Array_data_util.randomRange(1000, 10000)); -eq("File \"bs_poly_mutable_set_test.ml\", line 48, characters 5-12", Bs_internalAVLset.length0(u.data), 10000); +eq("File \"bs_poly_mutable_set_test.ml\", line 48, characters 5-12", Bs_internalAVLset.size(u.data), 10000); Bs_SetM.removeMany(u, Array_data_util.randomRange(10000, 19999)); -eq("File \"bs_poly_mutable_set_test.ml\", line 50, characters 5-12", Bs_internalAVLset.length0(u.data), 1); +eq("File \"bs_poly_mutable_set_test.ml\", line 50, characters 5-12", Bs_internalAVLset.size(u.data), 1); b("File \"bs_poly_mutable_set_test.ml\", line 51, characters 4-11", Bs_SetM.has(u, 20000)); @@ -113,12 +113,12 @@ b("File \"bs_poly_mutable_set_test.ml\", line 67, characters 4-11", Bs_SetM.eq(d b("File \"bs_poly_mutable_set_test.ml\", line 68, characters 4-11", Bs_SetM.eq(Bs_SetM.intersect(f(Array_data_util.randomRange(0, 20)), f(Array_data_util.randomRange(21, 40))), { dict: IntCmp, - data: Bs_internalAVLset.empty0 + data: Bs_internalAVLset.empty })); b("File \"bs_poly_mutable_set_test.ml\", line 74, characters 4-11", Bs_SetM.eq(Bs_SetM.intersect(f(Array_data_util.randomRange(21, 40)), f(Array_data_util.randomRange(0, 20))), { dict: IntCmp, - data: Bs_internalAVLset.empty0 + data: Bs_internalAVLset.empty })); b("File \"bs_poly_mutable_set_test.ml\", line 80, characters 4-11", Bs_SetM.eq(Bs_SetM.intersect(f(/* array */[ diff --git a/lib/js/bs_MapInt.js b/lib/js/bs_MapInt.js index 0721d88c9b8..769ba936029 100644 --- a/lib/js/bs_MapInt.js +++ b/lib/js/bs_MapInt.js @@ -17,7 +17,7 @@ function set(t, newK, newD) { } } } else { - return Bs_internalAVLtree.singleton0(newK, newD); + return Bs_internalAVLtree.singleton(newK, newD); } } @@ -67,7 +67,7 @@ function update(t, x, f) { } else { var match$1 = f(/* None */0); if (match$1) { - return Bs_internalAVLtree.singleton0(x, match$1[0]); + return Bs_internalAVLtree.singleton(x, match$1[0]); } else { return t; } @@ -114,7 +114,7 @@ function remove(n, x) { if (n !== null) { return removeAux(n, x); } else { - return Bs_internalAVLtree.empty0; + return Bs_internalAVLtree.empty; } } @@ -144,7 +144,7 @@ function removeArray(t, keys) { } }; } else { - return Bs_internalAVLtree.empty0; + return Bs_internalAVLtree.empty; } } @@ -158,51 +158,51 @@ function mergeArray(h, arr) { return v; } -var empty = Bs_internalAVLtree.empty0; +var empty = Bs_internalAVLtree.empty; -var isEmpty = Bs_internalAVLtree.isEmpty0; +var isEmpty = Bs_internalAVLtree.isEmpty; -var has = Bs_internalMapInt.mem; +var has = Bs_internalMapInt.has; var cmp = Bs_internalMapInt.cmp; var eq = Bs_internalMapInt.eq; -var forEach = Bs_internalAVLtree.iter0; +var forEach = Bs_internalAVLtree.forEach; -var reduce = Bs_internalAVLtree.fold0; +var reduce = Bs_internalAVLtree.reduce; -var every = Bs_internalAVLtree.every0; +var every = Bs_internalAVLtree.every; -var some = Bs_internalAVLtree.some0; +var some = Bs_internalAVLtree.some; -var size = Bs_internalAVLtree.length0; +var size = Bs_internalAVLtree.size; -var toList = Bs_internalAVLtree.toList0; +var toList = Bs_internalAVLtree.toList; -var toArray = Bs_internalAVLtree.toArray0; +var toArray = Bs_internalAVLtree.toArray; var ofArray = Bs_internalMapInt.ofArray; -var keysToArray = Bs_internalAVLtree.keysToArray0; +var keysToArray = Bs_internalAVLtree.keysToArray; -var valuesToArray = Bs_internalAVLtree.valuesToArray0; +var valuesToArray = Bs_internalAVLtree.valuesToArray; -var minKey = Bs_internalAVLtree.minKey0; +var minKey = Bs_internalAVLtree.minKey; -var minKeyUndefined = Bs_internalAVLtree.minKeyUndefined0; +var minKeyUndefined = Bs_internalAVLtree.minKeyUndefined; -var maxKey = Bs_internalAVLtree.maxKey0; +var maxKey = Bs_internalAVLtree.maxKey; -var maxKeyUndefined = Bs_internalAVLtree.maxKeyUndefined0; +var maxKeyUndefined = Bs_internalAVLtree.maxKeyUndefined; -var minimum = Bs_internalAVLtree.minimum0; +var minimum = Bs_internalAVLtree.minimum; -var minUndefined = Bs_internalAVLtree.minUndefined0; +var minUndefined = Bs_internalAVLtree.minUndefined; -var maximum = Bs_internalAVLtree.maximum0; +var maximum = Bs_internalAVLtree.maximum; -var maxUndefined = Bs_internalAVLtree.maxUndefined0; +var maxUndefined = Bs_internalAVLtree.maxUndefined; var get = Bs_internalMapInt.get; @@ -214,15 +214,15 @@ var getExn = Bs_internalMapInt.getExn; var merge = Bs_internalMapInt.merge; -var keepBy = Bs_internalAVLtree.filterShared0; +var keepBy = Bs_internalAVLtree.filterShared; -var partition = Bs_internalAVLtree.partitionShared0; +var partition = Bs_internalAVLtree.partitionShared; var split = Bs_internalMapInt.split; -var map = Bs_internalAVLtree.map0; +var map = Bs_internalAVLtree.map; -var mapWithKey = Bs_internalAVLtree.mapi0; +var mapWithKey = Bs_internalAVLtree.mapWithKey; var checkInvariantInternal = Bs_internalAVLtree.checkInvariantInternal; diff --git a/lib/js/bs_MapIntM.js b/lib/js/bs_MapIntM.js index d55fa746935..ea806da2d40 100644 --- a/lib/js/bs_MapIntM.js +++ b/lib/js/bs_MapIntM.js @@ -5,44 +5,44 @@ var Bs_internalAVLtree = require("./bs_internalAVLtree.js"); function empty() { return { - data: Bs_internalAVLtree.empty0 + data: Bs_internalAVLtree.empty }; } function isEmpty(m) { - return Bs_internalAVLtree.isEmpty0(m.data); + return Bs_internalAVLtree.isEmpty(m.data); } function minKeyUndefined(m) { - return Bs_internalAVLtree.minKeyUndefined0(m.data); + return Bs_internalAVLtree.minKeyUndefined(m.data); } function minKey(m) { - return Bs_internalAVLtree.minKey0(m.data); + return Bs_internalAVLtree.minKey(m.data); } function maxKeyUndefined(m) { - return Bs_internalAVLtree.maxKeyUndefined0(m.data); + return Bs_internalAVLtree.maxKeyUndefined(m.data); } function maxKey(m) { - return Bs_internalAVLtree.maxKey0(m.data); + return Bs_internalAVLtree.maxKey(m.data); } function minimum(m) { - return Bs_internalAVLtree.minimum0(m.data); + return Bs_internalAVLtree.minimum(m.data); } function minUndefined(m) { - return Bs_internalAVLtree.minUndefined0(m.data); + return Bs_internalAVLtree.minUndefined(m.data); } function maximum(m) { - return Bs_internalAVLtree.maximum0(m.data); + return Bs_internalAVLtree.maximum(m.data); } function maxUndefined(m) { - return Bs_internalAVLtree.maxUndefined0(m.data); + return Bs_internalAVLtree.maxUndefined(m.data); } function set(m, k, v) { @@ -57,51 +57,51 @@ function set(m, k, v) { } function forEach(d, f) { - return Bs_internalAVLtree.iter0(d.data, f); + return Bs_internalAVLtree.forEach(d.data, f); } function map(d, f) { return { - data: Bs_internalAVLtree.map0(d.data, f) + data: Bs_internalAVLtree.map(d.data, f) }; } function mapWithKey(d, f) { return { - data: Bs_internalAVLtree.mapi0(d.data, f) + data: Bs_internalAVLtree.mapWithKey(d.data, f) }; } function reduce(d, acc, f) { - return Bs_internalAVLtree.fold0(d.data, acc, f); + return Bs_internalAVLtree.reduce(d.data, acc, f); } function every(d, f) { - return Bs_internalAVLtree.every0(d.data, f); + return Bs_internalAVLtree.every(d.data, f); } function some(d, f) { - return Bs_internalAVLtree.some0(d.data, f); + return Bs_internalAVLtree.some(d.data, f); } function size(d) { - return Bs_internalAVLtree.length0(d.data); + return Bs_internalAVLtree.size(d.data); } function toList(d) { - return Bs_internalAVLtree.toList0(d.data); + return Bs_internalAVLtree.toList(d.data); } function toArray(d) { - return Bs_internalAVLtree.toArray0(d.data); + return Bs_internalAVLtree.toArray(d.data); } function keysToArray(d) { - return Bs_internalAVLtree.keysToArray0(d.data); + return Bs_internalAVLtree.keysToArray(d.data); } function valuesToArray(d) { - return Bs_internalAVLtree.valuesToArray0(d.data); + return Bs_internalAVLtree.valuesToArray(d.data); } function checkInvariantInternal(d) { @@ -109,7 +109,7 @@ function checkInvariantInternal(d) { } function has(d, v) { - return Bs_internalMapInt.mem(d.data, v); + return Bs_internalMapInt.has(d.data, v); } function removeMutateAux(nt, x) { @@ -161,7 +161,7 @@ function remove(d, v) { } } -function updateDone0(t, x, f) { +function updateDone(t, x, f) { if (t !== null) { var k = t.key; if (k === x) { @@ -187,17 +187,17 @@ function updateDone0(t, x, f) { var l$1 = t.left; var r$1 = t.right; if (x < k) { - var ll = updateDone0(l$1, x, f); + var ll = updateDone(l$1, x, f); t.left = ll; } else { - t.right = updateDone0(r$1, x, f); + t.right = updateDone(r$1, x, f); } return Bs_internalAVLtree.balMutate(t); } } else { var match$1 = f(/* None */0); if (match$1) { - return Bs_internalAVLtree.singleton0(x, match$1[0]); + return Bs_internalAVLtree.singleton(x, match$1[0]); } else { return t; } @@ -206,7 +206,7 @@ function updateDone0(t, x, f) { function update(t, x, f) { var oldRoot = t.data; - var newRoot = updateDone0(oldRoot, x, f); + var newRoot = updateDone(oldRoot, x, f); if (newRoot !== oldRoot) { t.data = newRoot; return /* () */0; @@ -228,7 +228,7 @@ function removeArrayMutateAux(_t, xs, _i, len) { continue ; } else { - return Bs_internalAVLtree.empty0; + return Bs_internalAVLtree.empty; } } else { return t; diff --git a/lib/js/bs_MapM.js b/lib/js/bs_MapM.js index b0dae138436..b868d2fb72c 100644 --- a/lib/js/bs_MapM.js +++ b/lib/js/bs_MapM.js @@ -70,7 +70,7 @@ function removeArrayMutateAux(_t, xs, _i, len, cmp) { continue ; } else { - return Bs_internalAVLtree.empty0; + return Bs_internalAVLtree.empty; } } else { return t; @@ -95,7 +95,7 @@ function removeMany(d, xs) { } } -function updateDone0(t, x, f, cmp) { +function updateDone(t, x, f, cmp) { if (t !== null) { var k = t.key; var c = cmp(x, k); @@ -103,10 +103,10 @@ function updateDone0(t, x, f, cmp) { var l = t.left; var r = t.right; if (c < 0) { - var ll = updateDone0(l, x, f, cmp); + var ll = updateDone(l, x, f, cmp); t.left = ll; } else { - t.right = updateDone0(r, x, f, cmp); + t.right = updateDone(r, x, f, cmp); } return Bs_internalAVLtree.balMutate(t); } else { @@ -134,7 +134,7 @@ function updateDone0(t, x, f, cmp) { } else { var match$1 = f(/* None */0); if (match$1) { - return Bs_internalAVLtree.singleton0(x, match$1[0]); + return Bs_internalAVLtree.singleton(x, match$1[0]); } else { return t; } @@ -144,7 +144,7 @@ function updateDone0(t, x, f, cmp) { function update(t, x, f) { var oldRoot = t.data; var M = t.dict; - var newRoot = updateDone0(oldRoot, x, f, M[/* cmp */0]); + var newRoot = updateDone(oldRoot, x, f, M[/* cmp */0]); if (newRoot !== oldRoot) { t.data = newRoot; return /* () */0; @@ -156,80 +156,80 @@ function update(t, x, f) { function empty(dict) { return { dict: dict, - data: Bs_internalAVLtree.empty0 + data: Bs_internalAVLtree.empty }; } function isEmpty(d) { - return Bs_internalAVLtree.isEmpty0(d.data); + return Bs_internalAVLtree.isEmpty(d.data); } function minKey(m) { - return Bs_internalAVLtree.minKey0(m.data); + return Bs_internalAVLtree.minKey(m.data); } function minKeyUndefined(m) { - return Bs_internalAVLtree.minKeyUndefined0(m.data); + return Bs_internalAVLtree.minKeyUndefined(m.data); } function maxKey(m) { - return Bs_internalAVLtree.maxKey0(m.data); + return Bs_internalAVLtree.maxKey(m.data); } function maxKeyUndefined(m) { - return Bs_internalAVLtree.maxKeyUndefined0(m.data); + return Bs_internalAVLtree.maxKeyUndefined(m.data); } function minimum(m) { - return Bs_internalAVLtree.minimum0(m.data); + return Bs_internalAVLtree.minimum(m.data); } function minUndefined(m) { - return Bs_internalAVLtree.minUndefined0(m.data); + return Bs_internalAVLtree.minUndefined(m.data); } function maximum(m) { - return Bs_internalAVLtree.maximum0(m.data); + return Bs_internalAVLtree.maximum(m.data); } function maxUndefined(m) { - return Bs_internalAVLtree.maxUndefined0(m.data); + return Bs_internalAVLtree.maxUndefined(m.data); } function forEach(d, f) { - return Bs_internalAVLtree.iter0(d.data, f); + return Bs_internalAVLtree.forEach(d.data, f); } function reduce(d, acc, cb) { - return Bs_internalAVLtree.fold0(d.data, acc, cb); + return Bs_internalAVLtree.reduce(d.data, acc, cb); } function every(d, p) { - return Bs_internalAVLtree.every0(d.data, p); + return Bs_internalAVLtree.every(d.data, p); } function some(d, p) { - return Bs_internalAVLtree.some0(d.data, p); + return Bs_internalAVLtree.some(d.data, p); } function size(d) { - return Bs_internalAVLtree.length0(d.data); + return Bs_internalAVLtree.size(d.data); } function toList(d) { - return Bs_internalAVLtree.toList0(d.data); + return Bs_internalAVLtree.toList(d.data); } function toArray(d) { - return Bs_internalAVLtree.toArray0(d.data); + return Bs_internalAVLtree.toArray(d.data); } function keysToArray(d) { - return Bs_internalAVLtree.keysToArray0(d.data); + return Bs_internalAVLtree.keysToArray(d.data); } function valuesToArray(d) { - return Bs_internalAVLtree.valuesToArray0(d.data); + return Bs_internalAVLtree.valuesToArray(d.data); } function checkInvariantInternal(d) { @@ -237,77 +237,64 @@ function checkInvariantInternal(d) { } function cmp(m1, m2, cmp$1) { - var dict = m1.dict; - var m1_data = m1.data; - var m2_data = m2.data; - return Bs_internalAVLtree.cmp0(m1_data, m2_data, dict[/* cmp */0], cmp$1); + var X = m1.dict; + return Bs_internalAVLtree.cmp(m1.data, m2.data, X[/* cmp */0], cmp$1); } function eq(m1, m2, cmp) { - var dict = m1.dict; - var m1_data = m1.data; - var m2_data = m2.data; - return Bs_internalAVLtree.eq0(m1_data, m2_data, dict[/* cmp */0], cmp); + var M = m1.dict; + return Bs_internalAVLtree.eq(m1.data, m2.data, M[/* cmp */0], cmp); } function map(m, f) { - var dict = m.dict; - var map$1 = m.data; return { - dict: dict, - data: Bs_internalAVLtree.map0(map$1, f) + dict: m.dict, + data: Bs_internalAVLtree.map(m.data, f) }; } -function mapWithKey(map, f) { - var dict = map.dict; - var map$1 = map.data; +function mapWithKey(m, f) { return { - dict: dict, - data: Bs_internalAVLtree.mapi0(map$1, f) + dict: m.dict, + data: Bs_internalAVLtree.mapWithKey(m.data, f) }; } -function get(map, x) { - var dict = map.dict; - var map$1 = map.data; - return Bs_internalAVLtree.get0(map$1, x, dict[/* cmp */0]); +function get(m, x) { + var X = m.dict; + return Bs_internalAVLtree.get(m.data, x, X[/* cmp */0]); } -function getUndefined(map, x) { - var dict = map.dict; - var map$1 = map.data; - return Bs_internalAVLtree.getUndefined0(map$1, x, dict[/* cmp */0]); +function getUndefined(m, x) { + var X = m.dict; + return Bs_internalAVLtree.getUndefined(m.data, x, X[/* cmp */0]); } -function getWithDefault(map, x, def) { - var dict = map.dict; - var map$1 = map.data; - return Bs_internalAVLtree.getWithDefault0(map$1, x, def, dict[/* cmp */0]); +function getWithDefault(m, x, def) { + var X = m.dict; + return Bs_internalAVLtree.getWithDefault(m.data, x, def, X[/* cmp */0]); } -function getExn(map, x) { - var dict = map.dict; - var map$1 = map.data; - return Bs_internalAVLtree.getExn0(map$1, x, dict[/* cmp */0]); +function getExn(m, x) { + var X = m.dict; + return Bs_internalAVLtree.getExn(m.data, x, X[/* cmp */0]); } -function has(map, x) { - var dict = map.dict; - var map$1 = map.data; - return Bs_internalAVLtree.mem0(map$1, x, dict[/* cmp */0]); +function has(m, x) { + var X = m.dict; + return Bs_internalAVLtree.has(m.data, x, X[/* cmp */0]); } function ofArray(data, dict) { return { dict: dict, - data: Bs_internalAVLtree.ofArray0(data, dict[/* cmp */0]) + data: Bs_internalAVLtree.ofArray(data, dict[/* cmp */0]) }; } function set(m, e, v) { - var oldRoot = m.data; var M = m.dict; + var oldRoot = m.data; var newRoot = Bs_internalAVLtree.updateMutate(oldRoot, e, v, M[/* cmp */0]); if (newRoot !== oldRoot) { m.data = newRoot; @@ -327,8 +314,8 @@ function mergeArrayAux(t, xs, cmp) { } function mergeMany(d, xs) { - var oldRoot = d.data; var M = d.dict; + var oldRoot = d.data; var newRoot = mergeArrayAux(oldRoot, xs, M[/* cmp */0]); if (newRoot !== oldRoot) { d.data = newRoot; diff --git a/lib/js/bs_MapString.js b/lib/js/bs_MapString.js index 4c2dddc8473..8f7595c1d26 100644 --- a/lib/js/bs_MapString.js +++ b/lib/js/bs_MapString.js @@ -17,7 +17,7 @@ function set(t, newK, newD) { } } } else { - return Bs_internalAVLtree.singleton0(newK, newD); + return Bs_internalAVLtree.singleton(newK, newD); } } @@ -67,7 +67,7 @@ function update(t, x, f) { } else { var match$1 = f(/* None */0); if (match$1) { - return Bs_internalAVLtree.singleton0(x, match$1[0]); + return Bs_internalAVLtree.singleton(x, match$1[0]); } else { return t; } @@ -114,7 +114,7 @@ function remove(n, x) { if (n !== null) { return removeAux(n, x); } else { - return Bs_internalAVLtree.empty0; + return Bs_internalAVLtree.empty; } } @@ -144,7 +144,7 @@ function removeArray(t, keys) { } }; } else { - return Bs_internalAVLtree.empty0; + return Bs_internalAVLtree.empty; } } @@ -158,51 +158,51 @@ function mergeArray(h, arr) { return v; } -var empty = Bs_internalAVLtree.empty0; +var empty = Bs_internalAVLtree.empty; -var isEmpty = Bs_internalAVLtree.isEmpty0; +var isEmpty = Bs_internalAVLtree.isEmpty; -var has = Bs_internalMapString.mem; +var has = Bs_internalMapString.has; var cmp = Bs_internalMapString.cmp; var eq = Bs_internalMapString.eq; -var forEach = Bs_internalAVLtree.iter0; +var forEach = Bs_internalAVLtree.forEach; -var reduce = Bs_internalAVLtree.fold0; +var reduce = Bs_internalAVLtree.reduce; -var every = Bs_internalAVLtree.every0; +var every = Bs_internalAVLtree.every; -var some = Bs_internalAVLtree.some0; +var some = Bs_internalAVLtree.some; -var size = Bs_internalAVLtree.length0; +var size = Bs_internalAVLtree.size; -var toList = Bs_internalAVLtree.toList0; +var toList = Bs_internalAVLtree.toList; -var toArray = Bs_internalAVLtree.toArray0; +var toArray = Bs_internalAVLtree.toArray; var ofArray = Bs_internalMapString.ofArray; -var keysToArray = Bs_internalAVLtree.keysToArray0; +var keysToArray = Bs_internalAVLtree.keysToArray; -var valuesToArray = Bs_internalAVLtree.valuesToArray0; +var valuesToArray = Bs_internalAVLtree.valuesToArray; -var minKey = Bs_internalAVLtree.minKey0; +var minKey = Bs_internalAVLtree.minKey; -var minKeyUndefined = Bs_internalAVLtree.minKeyUndefined0; +var minKeyUndefined = Bs_internalAVLtree.minKeyUndefined; -var maxKey = Bs_internalAVLtree.maxKey0; +var maxKey = Bs_internalAVLtree.maxKey; -var maxKeyUndefined = Bs_internalAVLtree.maxKeyUndefined0; +var maxKeyUndefined = Bs_internalAVLtree.maxKeyUndefined; -var minimum = Bs_internalAVLtree.minimum0; +var minimum = Bs_internalAVLtree.minimum; -var minUndefined = Bs_internalAVLtree.minUndefined0; +var minUndefined = Bs_internalAVLtree.minUndefined; -var maximum = Bs_internalAVLtree.maximum0; +var maximum = Bs_internalAVLtree.maximum; -var maxUndefined = Bs_internalAVLtree.maxUndefined0; +var maxUndefined = Bs_internalAVLtree.maxUndefined; var get = Bs_internalMapString.get; @@ -214,15 +214,15 @@ var getExn = Bs_internalMapString.getExn; var merge = Bs_internalMapString.merge; -var keepBy = Bs_internalAVLtree.filterShared0; +var keepBy = Bs_internalAVLtree.filterShared; -var partition = Bs_internalAVLtree.partitionShared0; +var partition = Bs_internalAVLtree.partitionShared; var split = Bs_internalMapString.split; -var map = Bs_internalAVLtree.map0; +var map = Bs_internalAVLtree.map; -var mapWithKey = Bs_internalAVLtree.mapi0; +var mapWithKey = Bs_internalAVLtree.mapWithKey; var checkInvariantInternal = Bs_internalAVLtree.checkInvariantInternal; diff --git a/lib/js/bs_MapStringM.js b/lib/js/bs_MapStringM.js index 341ab6692b5..b79f9ff628c 100644 --- a/lib/js/bs_MapStringM.js +++ b/lib/js/bs_MapStringM.js @@ -5,44 +5,44 @@ var Bs_internalMapString = require("./bs_internalMapString.js"); function empty() { return { - data: Bs_internalAVLtree.empty0 + data: Bs_internalAVLtree.empty }; } function isEmpty(m) { - return Bs_internalAVLtree.isEmpty0(m.data); + return Bs_internalAVLtree.isEmpty(m.data); } function minKeyUndefined(m) { - return Bs_internalAVLtree.minKeyUndefined0(m.data); + return Bs_internalAVLtree.minKeyUndefined(m.data); } function minKey(m) { - return Bs_internalAVLtree.minKey0(m.data); + return Bs_internalAVLtree.minKey(m.data); } function maxKeyUndefined(m) { - return Bs_internalAVLtree.maxKeyUndefined0(m.data); + return Bs_internalAVLtree.maxKeyUndefined(m.data); } function maxKey(m) { - return Bs_internalAVLtree.maxKey0(m.data); + return Bs_internalAVLtree.maxKey(m.data); } function minimum(m) { - return Bs_internalAVLtree.minimum0(m.data); + return Bs_internalAVLtree.minimum(m.data); } function minUndefined(m) { - return Bs_internalAVLtree.minUndefined0(m.data); + return Bs_internalAVLtree.minUndefined(m.data); } function maximum(m) { - return Bs_internalAVLtree.maximum0(m.data); + return Bs_internalAVLtree.maximum(m.data); } function maxUndefined(m) { - return Bs_internalAVLtree.maxUndefined0(m.data); + return Bs_internalAVLtree.maxUndefined(m.data); } function set(m, k, v) { @@ -57,51 +57,51 @@ function set(m, k, v) { } function forEach(d, f) { - return Bs_internalAVLtree.iter0(d.data, f); + return Bs_internalAVLtree.forEach(d.data, f); } function map(d, f) { return { - data: Bs_internalAVLtree.map0(d.data, f) + data: Bs_internalAVLtree.map(d.data, f) }; } function mapWithKey(d, f) { return { - data: Bs_internalAVLtree.mapi0(d.data, f) + data: Bs_internalAVLtree.mapWithKey(d.data, f) }; } function reduce(d, acc, f) { - return Bs_internalAVLtree.fold0(d.data, acc, f); + return Bs_internalAVLtree.reduce(d.data, acc, f); } function every(d, f) { - return Bs_internalAVLtree.every0(d.data, f); + return Bs_internalAVLtree.every(d.data, f); } function some(d, f) { - return Bs_internalAVLtree.some0(d.data, f); + return Bs_internalAVLtree.some(d.data, f); } function size(d) { - return Bs_internalAVLtree.length0(d.data); + return Bs_internalAVLtree.size(d.data); } function toList(d) { - return Bs_internalAVLtree.toList0(d.data); + return Bs_internalAVLtree.toList(d.data); } function toArray(d) { - return Bs_internalAVLtree.toArray0(d.data); + return Bs_internalAVLtree.toArray(d.data); } function keysToArray(d) { - return Bs_internalAVLtree.keysToArray0(d.data); + return Bs_internalAVLtree.keysToArray(d.data); } function valuesToArray(d) { - return Bs_internalAVLtree.valuesToArray0(d.data); + return Bs_internalAVLtree.valuesToArray(d.data); } function checkInvariantInternal(d) { @@ -109,7 +109,7 @@ function checkInvariantInternal(d) { } function has(d, v) { - return Bs_internalMapString.mem(d.data, v); + return Bs_internalMapString.has(d.data, v); } function removeMutateAux(nt, x) { @@ -161,7 +161,7 @@ function remove(d, v) { } } -function updateDone0(t, x, f) { +function updateDone(t, x, f) { if (t !== null) { var k = t.key; if (k === x) { @@ -187,17 +187,17 @@ function updateDone0(t, x, f) { var l$1 = t.left; var r$1 = t.right; if (x < k) { - var ll = updateDone0(l$1, x, f); + var ll = updateDone(l$1, x, f); t.left = ll; } else { - t.right = updateDone0(r$1, x, f); + t.right = updateDone(r$1, x, f); } return Bs_internalAVLtree.balMutate(t); } } else { var match$1 = f(/* None */0); if (match$1) { - return Bs_internalAVLtree.singleton0(x, match$1[0]); + return Bs_internalAVLtree.singleton(x, match$1[0]); } else { return t; } @@ -206,7 +206,7 @@ function updateDone0(t, x, f) { function update(t, x, f) { var oldRoot = t.data; - var newRoot = updateDone0(oldRoot, x, f); + var newRoot = updateDone(oldRoot, x, f); if (newRoot !== oldRoot) { t.data = newRoot; return /* () */0; @@ -228,7 +228,7 @@ function removeArrayMutateAux(_t, xs, _i, len) { continue ; } else { - return Bs_internalAVLtree.empty0; + return Bs_internalAVLtree.empty; } } else { return t; diff --git a/lib/js/bs_SortedMapDict.js b/lib/js/bs_SortedMapDict.js index 8b1b1918083..c57a7c482cb 100644 --- a/lib/js/bs_SortedMapDict.js +++ b/lib/js/bs_SortedMapDict.js @@ -19,7 +19,7 @@ function set(t, newK, newD, cmp) { return Bs_internalAVLtree.updateValue(t, newD); } } else { - return Bs_internalAVLtree.singleton0(newK, newD); + return Bs_internalAVLtree.singleton(newK, newD); } } @@ -70,7 +70,7 @@ function update(t, newK, f, cmp) { } else { var match$1 = f(/* None */0); if (match$1) { - return Bs_internalAVLtree.singleton0(newK, match$1[0]); + return Bs_internalAVLtree.singleton(newK, match$1[0]); } else { return t; } @@ -122,7 +122,7 @@ function remove(n, x, cmp) { if (n !== null) { return removeAux0(n, x, cmp); } else { - return Bs_internalAVLtree.empty0; + return Bs_internalAVLtree.empty; } } @@ -152,7 +152,7 @@ function splitAuxPivot(n, x, pres, cmp) { ]; } else { return /* tuple */[ - null, + Bs_internalAVLtree.empty, n ]; } @@ -165,7 +165,7 @@ function splitAuxPivot(n, x, pres, cmp) { } else { return /* tuple */[ n, - null + Bs_internalAVLtree.empty ]; } } else { @@ -188,8 +188,8 @@ function split(n, x, cmp) { } else { return /* tuple */[ /* tuple */[ - null, - null + Bs_internalAVLtree.empty, + Bs_internalAVLtree.empty ], /* None */0 ]; @@ -225,16 +225,16 @@ function merge(s1, s2, f, cmp) { return Bs_internalAVLtree.concatOrJoin(newLeft$1, v2, newD$1, newRight$1); } } else { - return Bs_internalAVLtree.filterMap0(s1, (function (k, v) { + return Bs_internalAVLtree.filterMap(s1, (function (k, v) { return f(k, /* Some */[v], /* None */0); })); } } else if (s2 !== null) { - return Bs_internalAVLtree.filterMap0(s2, (function (k, v) { + return Bs_internalAVLtree.filterMap(s2, (function (k, v) { return f(k, /* None */0, /* Some */[v]); })); } else { - return null; + return Bs_internalAVLtree.empty; } } @@ -265,73 +265,73 @@ function removeMany(t, keys, cmp) { } }; } else { - return Bs_internalAVLtree.empty0; + return Bs_internalAVLtree.empty; } } -var empty = Bs_internalAVLtree.empty0; +var empty = Bs_internalAVLtree.empty; -var isEmpty = Bs_internalAVLtree.isEmpty0; +var isEmpty = Bs_internalAVLtree.isEmpty; -var has = Bs_internalAVLtree.mem0; +var has = Bs_internalAVLtree.has; -var cmp = Bs_internalAVLtree.cmp0; +var cmp = Bs_internalAVLtree.cmp; -var eq = Bs_internalAVLtree.eq0; +var eq = Bs_internalAVLtree.eq; -var forEach = Bs_internalAVLtree.iter0; +var forEach = Bs_internalAVLtree.forEach; -var reduce = Bs_internalAVLtree.fold0; +var reduce = Bs_internalAVLtree.reduce; -var every = Bs_internalAVLtree.every0; +var every = Bs_internalAVLtree.every; -var some = Bs_internalAVLtree.some0; +var some = Bs_internalAVLtree.some; -var size = Bs_internalAVLtree.length0; +var size = Bs_internalAVLtree.size; -var toList = Bs_internalAVLtree.toList0; +var toList = Bs_internalAVLtree.toList; -var toArray = Bs_internalAVLtree.toArray0; +var toArray = Bs_internalAVLtree.toArray; -var ofArray = Bs_internalAVLtree.ofArray0; +var ofArray = Bs_internalAVLtree.ofArray; -var keysToArray = Bs_internalAVLtree.keysToArray0; +var keysToArray = Bs_internalAVLtree.keysToArray; -var valuesToArray = Bs_internalAVLtree.valuesToArray0; +var valuesToArray = Bs_internalAVLtree.valuesToArray; -var minKey = Bs_internalAVLtree.minKey0; +var minKey = Bs_internalAVLtree.minKey; -var minKeyUndefined = Bs_internalAVLtree.minKeyUndefined0; +var minKeyUndefined = Bs_internalAVLtree.minKeyUndefined; -var maxKey = Bs_internalAVLtree.maxKey0; +var maxKey = Bs_internalAVLtree.maxKey; -var maxKeyUndefined = Bs_internalAVLtree.maxKeyUndefined0; +var maxKeyUndefined = Bs_internalAVLtree.maxKeyUndefined; -var minimum = Bs_internalAVLtree.minimum0; +var minimum = Bs_internalAVLtree.minimum; -var minUndefined = Bs_internalAVLtree.minUndefined0; +var minUndefined = Bs_internalAVLtree.minUndefined; -var maximum = Bs_internalAVLtree.maximum0; +var maximum = Bs_internalAVLtree.maximum; -var maxUndefined = Bs_internalAVLtree.maxUndefined0; +var maxUndefined = Bs_internalAVLtree.maxUndefined; -var get = Bs_internalAVLtree.get0; +var get = Bs_internalAVLtree.get; -var getUndefined = Bs_internalAVLtree.getUndefined0; +var getUndefined = Bs_internalAVLtree.getUndefined; -var getWithDefault = Bs_internalAVLtree.getWithDefault0; +var getWithDefault = Bs_internalAVLtree.getWithDefault; -var getExn = Bs_internalAVLtree.getExn0; +var getExn = Bs_internalAVLtree.getExn; var checkInvariantInternal = Bs_internalAVLtree.checkInvariantInternal; -var keepBy = Bs_internalAVLtree.filterShared0; +var keepBy = Bs_internalAVLtree.filterShared; -var partition = Bs_internalAVLtree.partitionShared0; +var partition = Bs_internalAVLtree.partitionShared; -var map = Bs_internalAVLtree.map0; +var map = Bs_internalAVLtree.map; -var mapWithKey = Bs_internalAVLtree.mapi0; +var mapWithKey = Bs_internalAVLtree.mapWithKey; exports.empty = empty; exports.isEmpty = isEmpty; diff --git a/lib/js/bs_internalAVLtree.js b/lib/js/bs_internalAVLtree.js index c6f37a1fb12..60bcb8d731c 100644 --- a/lib/js/bs_internalAVLtree.js +++ b/lib/js/bs_internalAVLtree.js @@ -38,7 +38,7 @@ function create(l, x, d, r) { }; } -function singleton0(x, d) { +function singleton(x, d) { return { left: null, key: x, @@ -130,7 +130,7 @@ function minKey0Aux(_n) { }; } -function minKey0(n) { +function minKey(n) { if (n !== null) { return /* Some */[minKey0Aux(n)]; } else { @@ -138,7 +138,7 @@ function minKey0(n) { } } -function minKeyUndefined0(n) { +function minKeyUndefined(n) { if (n !== null) { return minKey0Aux(n); } else { @@ -160,7 +160,7 @@ function maxKey0Aux(_n) { }; } -function maxKey0(n) { +function maxKey(n) { if (n !== null) { return /* Some */[maxKey0Aux(n)]; } else { @@ -168,7 +168,7 @@ function maxKey0(n) { } } -function maxKeyUndefined0(n) { +function maxKeyUndefined(n) { if (n !== null) { return maxKey0Aux(n); } else { @@ -193,7 +193,7 @@ function minKV0Aux(_n) { }; } -function minimum0(n) { +function minimum(n) { if (n !== null) { return /* Some */[minKV0Aux(n)]; } else { @@ -201,7 +201,7 @@ function minimum0(n) { } } -function minUndefined0(n) { +function minUndefined(n) { if (n !== null) { return minKV0Aux(n); } else { @@ -226,7 +226,7 @@ function maxKV0Aux(_n) { }; } -function maximum0(n) { +function maximum(n) { if (n !== null) { return /* Some */[maxKV0Aux(n)]; } else { @@ -234,7 +234,7 @@ function maximum0(n) { } } -function maxUndefined0(n) { +function maxUndefined(n) { if (n !== null) { return maxKV0Aux(n); } else { @@ -256,9 +256,7 @@ function removeMinAuxWithRef(n, kr, vr) { } } -var empty0 = null; - -function isEmpty0(x) { +function isEmpty(x) { if (x !== null) { return /* false */0; } else { @@ -284,11 +282,11 @@ function stackAllLeft(_v, _s) { }; } -function iter0(_n, f) { +function forEach(_n, f) { while(true) { var n = _n; if (n !== null) { - iter0(n.left, f); + forEach(n.left, f); f(n.key, n.value); _n = n.right; continue ; @@ -299,11 +297,11 @@ function iter0(_n, f) { }; } -function map0(n, f) { +function map(n, f) { if (n !== null) { - var newLeft = map0(n.left, f); + var newLeft = map(n.left, f); var newD = f(n.value); - var newRight = map0(n.right, f); + var newRight = map(n.right, f); return { left: newLeft, key: n.key, @@ -316,12 +314,12 @@ function map0(n, f) { } } -function mapi0(n, f) { +function mapWithKey(n, f) { if (n !== null) { var key = n.key; - var newLeft = mapi0(n.left, f); + var newLeft = mapWithKey(n.left, f); var newD = f(key, n.value); - var newRight = mapi0(n.right, f); + var newRight = mapWithKey(n.right, f); return { left: newLeft, key: key, @@ -334,7 +332,7 @@ function mapi0(n, f) { } } -function fold0(_m, _accu, f) { +function reduce(_m, _accu, f) { while(true) { var accu = _accu; var m = _m; @@ -343,7 +341,7 @@ function fold0(_m, _accu, f) { var v = m.key; var d = m.value; var r = m.right; - _accu = f(fold0(l, accu, f), v, d); + _accu = f(reduce(l, accu, f), v, d); _m = r; continue ; @@ -353,12 +351,12 @@ function fold0(_m, _accu, f) { }; } -function every0(_n, p) { +function every(_n, p) { while(true) { var n = _n; if (n !== null) { if (p(n.key, n.value)) { - if (every0(n.left, p)) { + if (every(n.left, p)) { _n = n.right; continue ; @@ -374,13 +372,13 @@ function every0(_n, p) { }; } -function some0(_n, p) { +function some(_n, p) { while(true) { var n = _n; if (n !== null) { if (p(n.key, n.value)) { return /* true */1; - } else if (some0(n.left, p)) { + } else if (some(n.left, p)) { return /* true */1; } else { _n = n.right; @@ -397,7 +395,7 @@ function addMinElement(n, k, v) { if (n !== null) { return bal(addMinElement(n.left, k, v), n.key, n.value, n.right); } else { - return singleton0(k, v); + return singleton(k, v); } } @@ -405,7 +403,7 @@ function addMaxElement(n, k, v) { if (n !== null) { return bal(n.left, n.key, n.value, addMaxElement(n.right, k, v)); } else { - return singleton0(k, v); + return singleton(k, v); } } @@ -460,13 +458,13 @@ function concatOrJoin(t1, v, d, t2) { } } -function filterShared0(n, p) { +function filterShared(n, p) { if (n !== null) { var v = n.key; var d = n.value; - var newLeft = filterShared0(n.left, p); + var newLeft = filterShared(n.left, p); var pvd = p(v, d); - var newRight = filterShared0(n.right, p); + var newRight = filterShared(n.right, p); if (pvd) { return join(newLeft, v, d, newRight); } else { @@ -477,13 +475,13 @@ function filterShared0(n, p) { } } -function filterMap0(n, p) { +function filterMap(n, p) { if (n !== null) { var v = n.key; var d = n.value; - var newLeft = filterMap0(n.left, p); + var newLeft = filterMap(n.left, p); var pvd = p(v, d); - var newRight = filterMap0(n.right, p); + var newRight = filterMap(n.right, p); if (pvd) { return join(newLeft, v, pvd[0], newRight); } else { @@ -494,15 +492,15 @@ function filterMap0(n, p) { } } -function partitionShared0(n, p) { +function partitionShared(n, p) { if (n !== null) { var key = n.key; var value = n.value; - var match = partitionShared0(n.left, p); + var match = partitionShared(n.left, p); var lf = match[1]; var lt = match[0]; var pvd = p(key, value); - var match$1 = partitionShared0(n.right, p); + var match$1 = partitionShared(n.right, p); var rf = match$1[1]; var rt = match$1[0]; if (pvd) { @@ -532,7 +530,7 @@ function lengthNode(n) { return (1 + sizeL | 0) + sizeR | 0; } -function length0(n) { +function size(n) { if (n !== null) { return lengthNode(n); } else { @@ -561,7 +559,7 @@ function toListAux(_accu, _n) { }; } -function toList0(s) { +function toList(s) { return toListAux(/* [] */0, s); } @@ -658,7 +656,7 @@ function fillArray(_n, _i, arr) { }; } -function toArray0(n) { +function toArray(n) { if (n !== null) { var size = lengthNode(n); var v = new Array(size); @@ -669,7 +667,7 @@ function toArray0(n) { } } -function keysToArray0(n) { +function keysToArray(n) { if (n !== null) { var size = lengthNode(n); var v = new Array(size); @@ -680,7 +678,7 @@ function keysToArray0(n) { } } -function valuesToArray0(n) { +function valuesToArray(n) { if (n !== null) { var size = lengthNode(n); var v = new Array(size); @@ -701,20 +699,20 @@ function ofSortedArrayRevAux(arr, off, len) { } else { switch (len) { case 0 : - return empty0; + return null; case 1 : var match$1 = arr[off]; - return singleton0(match$1[0], match$1[1]); + return singleton(match$1[0], match$1[1]); case 2 : var match_000 = arr[off]; var match_001 = arr[off - 1 | 0]; var match$2 = match_001; var match$3 = match_000; return { - left: singleton0(match$3[0], match$3[1]), + left: singleton(match$3[0], match$3[1]), key: match$2[0], value: match$2[1], - right: empty0, + right: null, h: 2 }; case 3 : @@ -725,10 +723,10 @@ function ofSortedArrayRevAux(arr, off, len) { var match$5 = match_001$1; var match$6 = match_000$1; return { - left: singleton0(match$6[0], match$6[1]), + left: singleton(match$6[0], match$6[1]), key: match$5[0], value: match$5[1], - right: singleton0(match$4[0], match$4[1]), + right: singleton(match$4[0], match$4[1]), h: 2 }; @@ -746,20 +744,20 @@ function ofSortedArrayAux(arr, off, len) { } else { switch (len) { case 0 : - return empty0; + return null; case 1 : var match$1 = arr[off]; - return singleton0(match$1[0], match$1[1]); + return singleton(match$1[0], match$1[1]); case 2 : var match_000 = arr[off]; var match_001 = arr[off + 1 | 0]; var match$2 = match_001; var match$3 = match_000; return { - left: singleton0(match$3[0], match$3[1]), + left: singleton(match$3[0], match$3[1]), key: match$2[0], value: match$2[1], - right: empty0, + right: null, h: 2 }; case 3 : @@ -770,10 +768,10 @@ function ofSortedArrayAux(arr, off, len) { var match$5 = match_001$1; var match$6 = match_000$1; return { - left: singleton0(match$6[0], match$6[1]), + left: singleton(match$6[0], match$6[1]), key: match$5[0], value: match$5[1], - right: singleton0(match$4[0], match$4[1]), + right: singleton(match$4[0], match$4[1]), h: 2 }; @@ -781,13 +779,13 @@ function ofSortedArrayAux(arr, off, len) { } } -function ofSortedArrayUnsafe0(arr) { +function ofSortedArrayUnsafe(arr) { return ofSortedArrayAux(arr, 0, arr.length); } -function cmp0(s1, s2, kcmp, vcmp) { - var len1 = length0(s1); - var len2 = length0(s2); +function cmp(s1, s2, kcmp, vcmp) { + var len1 = size(s1); + var len2 = size(s2); if (len1 === len2) { var _e1 = stackAllLeft(s1, /* [] */0); var _e2 = stackAllLeft(s2, /* [] */0); @@ -828,9 +826,9 @@ function cmp0(s1, s2, kcmp, vcmp) { } } -function eq0(s1, s2, kcmp, veq) { - var len1 = length0(s1); - var len2 = length0(s2); +function eq(s1, s2, kcmp, veq) { + var len1 = size(s1); + var len2 = size(s2); if (len1 === len2) { var _e1 = stackAllLeft(s1, /* [] */0); var _e2 = stackAllLeft(s2, /* [] */0); @@ -863,7 +861,7 @@ function eq0(s1, s2, kcmp, veq) { } } -function get0(_n, x, cmp) { +function get(_n, x, cmp) { while(true) { var n = _n; if (n !== null) { @@ -882,7 +880,7 @@ function get0(_n, x, cmp) { }; } -function getUndefined0(_n, x, cmp) { +function getUndefined(_n, x, cmp) { while(true) { var n = _n; if (n !== null) { @@ -901,7 +899,7 @@ function getUndefined0(_n, x, cmp) { }; } -function getExn0(_n, x, cmp) { +function getExn(_n, x, cmp) { while(true) { var n = _n; if (n !== null) { @@ -920,7 +918,7 @@ function getExn0(_n, x, cmp) { }; } -function getWithDefault0(_n, x, def, cmp) { +function getWithDefault(_n, x, def, cmp) { while(true) { var n = _n; if (n !== null) { @@ -939,7 +937,7 @@ function getWithDefault0(_n, x, def, cmp) { }; } -function mem0(_n, x, cmp) { +function has(_n, x, cmp) { while(true) { var n = _n; if (n !== null) { @@ -1061,11 +1059,11 @@ function updateMutate(t, x, data, cmp) { return t; } } else { - return singleton0(x, data); + return singleton(x, data); } } -function ofArray0(xs, cmp) { +function ofArray(xs, cmp) { var len = xs.length; if (len) { var next = Bs_Sort.strictlySortedLength(xs, (function (param, param$1) { @@ -1084,7 +1082,7 @@ function ofArray0(xs, cmp) { } return result; } else { - return empty0; + return null; } } @@ -1100,54 +1098,56 @@ function removeMinAuxWithRootMutate(nt, n) { } } +var empty = null; + exports.copy = copy; exports.create = create; exports.bal = bal; -exports.singleton0 = singleton0; +exports.singleton = singleton; exports.updateValue = updateValue; -exports.minKey0 = minKey0; -exports.minKeyUndefined0 = minKeyUndefined0; -exports.maxKey0 = maxKey0; -exports.maxKeyUndefined0 = maxKeyUndefined0; -exports.minimum0 = minimum0; -exports.minUndefined0 = minUndefined0; -exports.maximum0 = maximum0; -exports.maxUndefined0 = maxUndefined0; +exports.minKey = minKey; +exports.minKeyUndefined = minKeyUndefined; +exports.maxKey = maxKey; +exports.maxKeyUndefined = maxKeyUndefined; +exports.minimum = minimum; +exports.minUndefined = minUndefined; +exports.maximum = maximum; +exports.maxUndefined = maxUndefined; exports.removeMinAuxWithRef = removeMinAuxWithRef; -exports.empty0 = empty0; -exports.isEmpty0 = isEmpty0; +exports.empty = empty; +exports.isEmpty = isEmpty; exports.stackAllLeft = stackAllLeft; -exports.iter0 = iter0; -exports.map0 = map0; -exports.mapi0 = mapi0; -exports.fold0 = fold0; -exports.every0 = every0; -exports.some0 = some0; +exports.forEach = forEach; +exports.map = map; +exports.mapWithKey = mapWithKey; +exports.reduce = reduce; +exports.every = every; +exports.some = some; exports.join = join; exports.concat = concat; exports.concatOrJoin = concatOrJoin; -exports.filterShared0 = filterShared0; -exports.filterMap0 = filterMap0; -exports.partitionShared0 = partitionShared0; +exports.filterShared = filterShared; +exports.filterMap = filterMap; +exports.partitionShared = partitionShared; exports.lengthNode = lengthNode; -exports.length0 = length0; -exports.toList0 = toList0; +exports.size = size; +exports.toList = toList; exports.checkInvariantInternal = checkInvariantInternal; exports.fillArray = fillArray; -exports.toArray0 = toArray0; -exports.keysToArray0 = keysToArray0; -exports.valuesToArray0 = valuesToArray0; +exports.toArray = toArray; +exports.keysToArray = keysToArray; +exports.valuesToArray = valuesToArray; exports.ofSortedArrayAux = ofSortedArrayAux; exports.ofSortedArrayRevAux = ofSortedArrayRevAux; -exports.ofSortedArrayUnsafe0 = ofSortedArrayUnsafe0; -exports.cmp0 = cmp0; -exports.eq0 = eq0; -exports.get0 = get0; -exports.getUndefined0 = getUndefined0; -exports.getWithDefault0 = getWithDefault0; -exports.getExn0 = getExn0; -exports.mem0 = mem0; -exports.ofArray0 = ofArray0; +exports.ofSortedArrayUnsafe = ofSortedArrayUnsafe; +exports.cmp = cmp; +exports.eq = eq; +exports.get = get; +exports.getUndefined = getUndefined; +exports.getWithDefault = getWithDefault; +exports.getExn = getExn; +exports.has = has; +exports.ofArray = ofArray; exports.updateMutate = updateMutate; exports.balMutate = balMutate; exports.removeMinAuxWithRootMutate = removeMinAuxWithRootMutate; diff --git a/lib/js/bs_internalMapInt.js b/lib/js/bs_internalMapInt.js index 50d251f9068..29b6afad0a7 100644 --- a/lib/js/bs_internalMapInt.js +++ b/lib/js/bs_internalMapInt.js @@ -18,7 +18,7 @@ function add(t, x, data) { } } } else { - return Bs_internalAVLtree.singleton0(x, data); + return Bs_internalAVLtree.singleton(x, data); } } @@ -94,7 +94,7 @@ function getWithDefault(_n, x, def) { }; } -function mem(_n, x) { +function has(_n, x) { while(true) { var n = _n; if (n !== null) { @@ -161,7 +161,7 @@ function splitAux(x, n) { ]; } else { return /* tuple */[ - null, + Bs_internalAVLtree.empty, /* None */0, n ]; @@ -177,7 +177,7 @@ function splitAux(x, n) { return /* tuple */[ n, /* None */0, - null + Bs_internalAVLtree.empty ]; } } @@ -187,9 +187,9 @@ function split(x, n) { return splitAux(x, n); } else { return /* tuple */[ - null, + Bs_internalAVLtree.empty, /* None */0, - null + Bs_internalAVLtree.empty ]; } } @@ -212,7 +212,7 @@ function merge(s1, s2, f) { } else if (s2 !== null) { exit = 1; } else { - return null; + return Bs_internalAVLtree.empty; } if (exit === 1) { if (s2 !== null) { @@ -261,8 +261,8 @@ function compareAux(_e1, _e2, vcmp) { } function cmp(s1, s2, cmp$1) { - var len1 = Bs_internalAVLtree.length0(s1); - var len2 = Bs_internalAVLtree.length0(s2); + var len1 = Bs_internalAVLtree.size(s1); + var len2 = Bs_internalAVLtree.size(s2); if (len1 === len2) { return compareAux(Bs_internalAVLtree.stackAllLeft(s1, /* [] */0), Bs_internalAVLtree.stackAllLeft(s2, /* [] */0), cmp$1); } else if (len1 < len2) { @@ -298,8 +298,8 @@ function eqAux(_e1, _e2, eq) { } function eq(s1, s2, eq$1) { - var len1 = Bs_internalAVLtree.length0(s1); - var len2 = Bs_internalAVLtree.length0(s2); + var len1 = Bs_internalAVLtree.size(s1); + var len2 = Bs_internalAVLtree.size(s2); if (len1 === len2) { return eqAux(Bs_internalAVLtree.stackAllLeft(s1, /* [] */0), Bs_internalAVLtree.stackAllLeft(s2, /* [] */0), eq$1); } else { @@ -326,7 +326,7 @@ function addMutate(t, x, data) { return Bs_internalAVLtree.balMutate(t); } } else { - return Bs_internalAVLtree.singleton0(x, data); + return Bs_internalAVLtree.singleton(x, data); } } @@ -349,7 +349,7 @@ function ofArray(xs) { } return result; } else { - return Bs_internalAVLtree.empty0; + return Bs_internalAVLtree.empty; } } @@ -367,7 +367,7 @@ exports.get = get; exports.getUndefined = getUndefined; exports.getExn = getExn; exports.getWithDefault = getWithDefault; -exports.mem = mem; +exports.has = has; exports.remove = remove; exports.splitAux = splitAux; exports.split = split; diff --git a/lib/js/bs_internalMapString.js b/lib/js/bs_internalMapString.js index c8724945a86..c34a677e3d0 100644 --- a/lib/js/bs_internalMapString.js +++ b/lib/js/bs_internalMapString.js @@ -18,7 +18,7 @@ function add(t, x, data) { } } } else { - return Bs_internalAVLtree.singleton0(x, data); + return Bs_internalAVLtree.singleton(x, data); } } @@ -94,7 +94,7 @@ function getWithDefault(_n, x, def) { }; } -function mem(_n, x) { +function has(_n, x) { while(true) { var n = _n; if (n !== null) { @@ -161,7 +161,7 @@ function splitAux(x, n) { ]; } else { return /* tuple */[ - null, + Bs_internalAVLtree.empty, /* None */0, n ]; @@ -177,7 +177,7 @@ function splitAux(x, n) { return /* tuple */[ n, /* None */0, - null + Bs_internalAVLtree.empty ]; } } @@ -187,9 +187,9 @@ function split(x, n) { return splitAux(x, n); } else { return /* tuple */[ - null, + Bs_internalAVLtree.empty, /* None */0, - null + Bs_internalAVLtree.empty ]; } } @@ -212,7 +212,7 @@ function merge(s1, s2, f) { } else if (s2 !== null) { exit = 1; } else { - return null; + return Bs_internalAVLtree.empty; } if (exit === 1) { if (s2 !== null) { @@ -261,8 +261,8 @@ function compareAux(_e1, _e2, vcmp) { } function cmp(s1, s2, cmp$1) { - var len1 = Bs_internalAVLtree.length0(s1); - var len2 = Bs_internalAVLtree.length0(s2); + var len1 = Bs_internalAVLtree.size(s1); + var len2 = Bs_internalAVLtree.size(s2); if (len1 === len2) { return compareAux(Bs_internalAVLtree.stackAllLeft(s1, /* [] */0), Bs_internalAVLtree.stackAllLeft(s2, /* [] */0), cmp$1); } else if (len1 < len2) { @@ -298,8 +298,8 @@ function eqAux(_e1, _e2, eq) { } function eq(s1, s2, eq$1) { - var len1 = Bs_internalAVLtree.length0(s1); - var len2 = Bs_internalAVLtree.length0(s2); + var len1 = Bs_internalAVLtree.size(s1); + var len2 = Bs_internalAVLtree.size(s2); if (len1 === len2) { return eqAux(Bs_internalAVLtree.stackAllLeft(s1, /* [] */0), Bs_internalAVLtree.stackAllLeft(s2, /* [] */0), eq$1); } else { @@ -326,7 +326,7 @@ function addMutate(t, x, data) { return Bs_internalAVLtree.balMutate(t); } } else { - return Bs_internalAVLtree.singleton0(x, data); + return Bs_internalAVLtree.singleton(x, data); } } @@ -349,7 +349,7 @@ function ofArray(xs) { } return result; } else { - return Bs_internalAVLtree.empty0; + return Bs_internalAVLtree.empty; } } @@ -367,7 +367,7 @@ exports.get = get; exports.getUndefined = getUndefined; exports.getExn = getExn; exports.getWithDefault = getWithDefault; -exports.mem = mem; +exports.has = has; exports.remove = remove; exports.splitAux = splitAux; exports.split = split; From 5bdc276e1afaa5c257588aba36e50e685fd09b55 Mon Sep 17 00:00:00 2001 From: Hongbo Zhang Date: Sun, 28 Jan 2018 14:29:08 +0800 Subject: [PATCH 11/17] clean up --- jscomp/others/.depend | 2 +- jscomp/others/bs_HashMap.ml | 23 +- jscomp/others/bs_HashMapInt.ml | 20 +- jscomp/others/bs_HashMapString.ml | 20 +- jscomp/others/bs_HashMultiMap.ml | 24 +- jscomp/others/bs_HashMultiMap.mli | 59 +---- jscomp/others/bs_HashSet.ml | 6 +- jscomp/others/bs_HashSetInt.ml | 8 +- jscomp/others/bs_HashSetString.ml | 7 +- jscomp/others/bs_internalBuckets.ml | 20 +- jscomp/others/bs_internalBuckets.mli | 24 +- jscomp/others/bs_internalBucketsType.ml | 18 +- jscomp/others/bs_internalBucketsType.mli | 10 +- jscomp/others/hashmap.cppo.ml | 20 +- jscomp/others/hashset.cppo.ml | 11 +- jscomp/test/bs_hashmap_test.js | 6 +- jscomp/test/bs_hashtbl_string_test.js | 8 +- lib/js/bs_HashMap.js | 20 +- lib/js/bs_HashMapInt.js | 20 +- lib/js/bs_HashMapString.js | 20 +- lib/js/bs_HashMultiMap.js | 288 +++++++++++------------ lib/js/bs_HashSet.js | 6 +- lib/js/bs_HashSetInt.js | 6 +- lib/js/bs_HashSetString.js | 6 +- lib/js/bs_internalBuckets.js | 28 +-- lib/js/bs_internalBucketsType.js | 8 +- 26 files changed, 294 insertions(+), 394 deletions(-) diff --git a/jscomp/others/.depend b/jscomp/others/.depend index a3c05e7d1c0..8caf00986ce 100644 --- a/jscomp/others/.depend +++ b/jscomp/others/.depend @@ -115,7 +115,7 @@ bs_internalBucketsType.cmi : bs_internalSetBuckets.cmi : bs_internalBucketsType.cmi bs_internalBuckets.cmi : bs_internalBucketsType.cmi bs_HashMap.cmi : bs_Hash.cmi -bs_HashMultiMap.cmi : bs_Hash.cmi bs_Bag.cmj +bs_HashMultiMap.cmi : bs_Hash.cmi bs_HashSet.cmi : bs_Hash.cmi bs_HashSetString.cmi : bs_HashSetInt.cmi : diff --git a/jscomp/others/bs_HashMap.ml b/jscomp/others/bs_HashMap.ml index 88e6539d540..add30a34768 100644 --- a/jscomp/others/bs_HashMap.ml +++ b/jscomp/others/bs_HashMap.ml @@ -17,7 +17,7 @@ module C = Bs_internalBucketsType module B = Bs_Bag module A = Bs_Array -type ('a, 'b,'id) t0 = ('a,'b) N.t0 +type ('a, 'b,'id) t0 = ('a,'b) N.t type ('a,'b,'id) t = (('a, 'id) Bs_Hash.t, @@ -177,12 +177,12 @@ let has0 ~hash ~eq h key = let make initialize_size ~dict = - B.bag ~data:(C.create0 initialize_size) ~dict -let clear h = C.clear0 (B.data h) + B.bag ~data:(C.make initialize_size) ~dict +let clear h = C.clear (B.data h) let size h = C.size (B.data h) -let forEach h f = N.forEach0 (B.data h) f -let reduce h init f = N.reduce0 (B.data h) init f -let logStats h = N.logStats0 (B.data h) +let forEach h f = N.forEach (B.data h) f +let reduce h init f = N.reduce (B.data h) init f +let logStats h = N.logStats (B.data h) let set (type a) (type id) (h : (a,_,id) t) (key:a) info = let module M = (val B.dict h) in @@ -200,14 +200,14 @@ let has (type a) (type id) (h : (a,_,id) t) (key : a) = let module M = (val B.dict h) in has0 ~hash:M.hash ~eq:M.eq (B.data h) key -let keepMapInPlace h f = N.filterMapInplace0 (B.data h) f +let keepMapInPlace h f = N.keepMapInPlace (B.data h) f -let toArray h = N.toArray0 (B.data h) +let toArray h = N.toArray (B.data h) let ofArray0 arr ~hash ~eq = let len = A.length arr in - let v = C.create0 len in + let v = C.make len in for i = 0 to len - 1 do let key,value = (A.getUnsafe arr i) in setDone0 ~eq ~hash v key value @@ -233,9 +233,8 @@ let mergeMany (type a) (type id) (h : (a,_,id) t) arr = let copy h = B.bag ~dict:(B.dict h) ~data:(N.copy (B.data h)) -let keysToArray h = N.keys0 (B.data h) - -let valuesToArray h = N.values0 (B.data h) +let keysToArray h = N.keysToArray (B.data h) +let valuesToArray h = N.valuesToArray (B.data h) let getBucketHistogram h = N.getBucketHistogram (B.data h) let isEmpty h = C.size (B.data h) = 0 diff --git a/jscomp/others/bs_HashMapInt.ml b/jscomp/others/bs_HashMapInt.ml index 77541277a44..f01b61c7fc1 100644 --- a/jscomp/others/bs_HashMapInt.ml +++ b/jscomp/others/bs_HashMapInt.ml @@ -27,7 +27,7 @@ module C = Bs_internalBucketsType module A = Bs_Array -type 'b t = (key,'b) N.t0 +type 'b t = (key,'b) N.t let rec copyBucketReHash ~h_buckets ~ndata_tail h old_bucket = @@ -173,14 +173,14 @@ let has h key = memInBucket key bucket -let make = C.create0 -let clear = C.clear0 +let make = C.make +let clear = C.clear let size = C.size -let forEach = N.forEach0 -let reduce = N.reduce0 -let logStats = N.logStats0 -let keepMapInPlace = N.filterMapInplace0 -let toArray = N.toArray0 +let forEach = N.forEach +let reduce = N.reduce +let logStats = N.logStats +let keepMapInPlace = N.keepMapInPlace +let toArray = N.toArray let ofArray arr = let len = A.length arr in @@ -201,8 +201,8 @@ let mergeMany h arr = let copy = N.copy -let keysToArray = N.keys0 -let valuesToArray = N.values0 +let keysToArray = N.keysToArray +let valuesToArray = N.valuesToArray let getBucketHistogram = N.getBucketHistogram let isEmpty h = C.size h = 0 diff --git a/jscomp/others/bs_HashMapString.ml b/jscomp/others/bs_HashMapString.ml index 03142459768..edc25ab41a9 100644 --- a/jscomp/others/bs_HashMapString.ml +++ b/jscomp/others/bs_HashMapString.ml @@ -27,7 +27,7 @@ module C = Bs_internalBucketsType module A = Bs_Array -type 'b t = (key,'b) N.t0 +type 'b t = (key,'b) N.t let rec copyBucketReHash ~h_buckets ~ndata_tail h old_bucket = @@ -173,14 +173,14 @@ let has h key = memInBucket key bucket -let make = C.create0 -let clear = C.clear0 +let make = C.make +let clear = C.clear let size = C.size -let forEach = N.forEach0 -let reduce = N.reduce0 -let logStats = N.logStats0 -let keepMapInPlace = N.filterMapInplace0 -let toArray = N.toArray0 +let forEach = N.forEach +let reduce = N.reduce +let logStats = N.logStats +let keepMapInPlace = N.keepMapInPlace +let toArray = N.toArray let ofArray arr = let len = A.length arr in @@ -201,8 +201,8 @@ let mergeMany h arr = let copy = N.copy -let keysToArray = N.keys0 -let valuesToArray = N.values0 +let keysToArray = N.keysToArray +let valuesToArray = N.valuesToArray let getBucketHistogram = N.getBucketHistogram let isEmpty h = C.size h = 0 diff --git a/jscomp/others/bs_HashMultiMap.ml b/jscomp/others/bs_HashMultiMap.ml index 63c97edc07d..721410e477c 100644 --- a/jscomp/others/bs_HashMultiMap.ml +++ b/jscomp/others/bs_HashMultiMap.ml @@ -16,7 +16,7 @@ module N = Bs_internalBuckets module C = Bs_internalBucketsType module B = Bs_Bag module A = Bs_Array -type ('a, 'b,'id) t0 = ('a,'b) N.t0 +type ('a, 'b,'id) t0 = ('a,'b) N.t type ('a,'b) bucket = ('a,'b) N.bucket @@ -206,23 +206,17 @@ let has0 ~hash ~eq h key = mem_in_bucket ~eq key bucket -let create0 = C.create0 -let clear0 = C.clear0 -let size0 = C.size -let forEach0 = N.forEach0 -let reduce0 = N.reduce0 -let logStats0 = N.logStats0 -let filterMapInplace0 = N.filterMapInplace0 +let make = C.make (* Wrapper *) let create dict initialize_size = - B.bag ~data:(create0 initialize_size) ~dict -let clear h = clear0 (B.data h) + B.bag ~data:(C.make initialize_size) ~dict +let clear h = C.clear (B.data h) let size h = C.size (B.data h) -let forEach h f = N.forEach0 (B.data h) f -let reduce h init f = N.reduce0 (B.data h) init f -let logStats h = logStats0 (B.data h) +let forEach h f = N.forEach (B.data h) f +let reduce h init f = N.reduce (B.data h) init f +let logStats h = N.logStats (B.data h) let add (type a) (type id) (h : (a,_,id) t) key info = let module M = (val B.dict h) in @@ -252,5 +246,5 @@ let has (type a) (type id) (h : (a,_,id) t) key = let module M = (val B.dict h) in has0 ~hash:M.hash ~eq:M.eq (B.data h) key -let filterMapDone h f = - filterMapInplace0 (B.data h) f +let keepMapInPlace h f = + N.keepMapInPlace (B.data h) f diff --git a/jscomp/others/bs_HashMultiMap.mli b/jscomp/others/bs_HashMultiMap.mli index a98872f4e2b..9bc9c484924 100644 --- a/jscomp/others/bs_HashMultiMap.mli +++ b/jscomp/others/bs_HashMultiMap.mli @@ -1,10 +1,8 @@ -type ('a, 'b, 'id) t0 -type ('a,'b,'id) t = - (('a, 'id) Bs_Hash.t, - ('a,'b,'id) t0) Bs_Bag.bag + +type ('a,'b,'id) t (** The type of hash tables from type ['a] to type ['b]. *) @@ -108,12 +106,7 @@ val forEach : ('a, 'b, 'id) t -> ('a -> 'b -> unit [@bs]) -> unit However, if the table contains several bindings for the same key, they are passed to [f] in reverse order of introduction, that is, the most recent binding is passed first. - - If the hash table was created in non-randomized mode, the order - in which the bindings are enumerated is reproducible between - successive runs of the program, and even between minor versions - of OCaml. For randomized hash tables, the order of enumeration - is entirely random. *) +*) val reduce : ('a, 'b, 'id) t -> 'c -> ('c -> 'a -> 'b -> 'c [@bs]) -> 'c @@ -135,7 +128,7 @@ val reduce : ('a, 'b, 'id) t -> 'c -> ('c -> 'a -> 'b -> 'c [@bs]) -> 'c is entirely random. *) -val filterMapDone : ('a, 'b, 'id) t -> ('a -> 'b -> 'b option [@bs]) -> unit +val keepMapInPlace : ('a, 'b, 'id) t -> ('a -> 'b -> 'b option [@bs]) -> unit val size : ('a, 'b, 'id) t -> int (** [size tbl] returns the number of bindings in [tbl]. @@ -148,47 +141,3 @@ val size : ('a, 'b, 'id) t -> int val logStats : _ t -> unit -(****************************************************************************) - -val create0: int -> ('a, 'b, 'id) t0 - -val clear0: ('a, 'b, 'id) t0 -> unit - -val logStats0: ('a, 'b, 'id) t0 -> unit - -val filterMapInplace0: ('a, 'b, 'id) t0 -> ('a -> 'b -> 'b option [@bs]) -> unit - -val reduce0: ('a, 'b, 'id) t0 -> 'c -> ('c -> 'a -> 'b -> 'c [@bs]) -> 'c - -val forEach0: ('a, 'b, 'id) t0 -> ('a -> 'b -> unit [@bs]) -> unit - -val replace0: - hash:('a,'id) Bs_Hash.hash -> - eq:('a,'id) Bs_Hash.eq -> - ('a, 'b, 'id) t0 -> 'a -> 'b -> unit - -val add0: hash:('a,'id) Bs_Hash.hash -> ('a,'b,'id) t0 -> 'a -> 'b -> unit -val get0: - hash:('a,'id) Bs_Hash.hash -> - eq:('a,'id) Bs_Hash.eq -> - ('a, 'b, 'id) t0 -> 'a -> 'b option - -val getAll0: - hash:('a,'id) Bs_Hash.hash -> - eq:('a,'id) Bs_Hash.eq -> - ('a, 'b, 'id) t0 -> 'a -> 'b list - -val has0: - hash:('a,'id) Bs_Hash.hash -> - eq:('a,'id) Bs_Hash.eq -> - ('a, 'b, 'id) t0 -> 'a -> bool - -val removeAll0: - hash:('a,'id) Bs_Hash.hash -> - eq:('a,'id) Bs_Hash.eq -> - ('a, 'b, 'id) t0 -> 'a -> unit - -val remove0: - hash:('a,'id) Bs_Hash.hash -> - eq:('a,'id) Bs_Hash.eq -> - ('a, 'b, 'id) t0 -> 'a -> unit diff --git a/jscomp/others/bs_HashSet.ml b/jscomp/others/bs_HashSet.ml index c20749a95ad..8636ac4947c 100644 --- a/jscomp/others/bs_HashSet.ml +++ b/jscomp/others/bs_HashSet.ml @@ -164,9 +164,9 @@ let has0 h key ~hash ~eq = let toArray h = N.toArray0 (B.data h) (* Wrapper *) let make dict initialize_size = - B.bag ~data:(C.create0 initialize_size) + B.bag ~data:(C.make initialize_size) ~dict -let clear h = C.clear0 (B.data h) +let clear h = C.clear (B.data h) let size h = C.size (B.data h) let forEach h f = N.forEach0 (B.data h) f @@ -187,7 +187,7 @@ let has (type a) (type id) (h : (a,id) t) (key : a) = let ofArray0 ~hash ~eq arr = let len = Bs.Array.length arr in - let v = C.create0 len in + let v = C.make len in for i = 0 to len - 1 do addDone0 ~eq ~hash v (A.getUnsafe arr i) done ; diff --git a/jscomp/others/bs_HashSetInt.ml b/jscomp/others/bs_HashSetInt.ml index 8cc0ea126ac..bf734491c55 100644 --- a/jscomp/others/bs_HashSetInt.ml +++ b/jscomp/others/bs_HashSetInt.ml @@ -1,4 +1,4 @@ -# 9 "hashset.cppo.ml" +# 10 "hashset.cppo.ml" type key = int type seed = int external caml_hash_mix_int : seed -> int -> seed = "caml_hash_mix_int" @@ -6,7 +6,7 @@ external final_mix : seed -> seed = "caml_hash_final_mix" let hash (s : key) = final_mix (caml_hash_mix_int 0 s) -# 19 +# 20 module N = Bs_internalSetBuckets module C = Bs_internalBucketsType module A = Bs_Array @@ -128,8 +128,8 @@ let has h key = memInBucket key bucket -let make = C.create0 -let clear = C.clear0 +let make = C.make +let clear = C.clear let size = C.size let forEach = N.forEach0 diff --git a/jscomp/others/bs_HashSetString.ml b/jscomp/others/bs_HashSetString.ml index 0d47d63e46e..e8d05701450 100644 --- a/jscomp/others/bs_HashSetString.ml +++ b/jscomp/others/bs_HashSetString.ml @@ -5,8 +5,9 @@ external caml_hash_mix_string : seed -> string -> seed = "caml_hash_mix_string" external final_mix : seed -> seed = "caml_hash_final_mix" let hash (s : key) = final_mix (caml_hash_mix_string 0 s ) + -# 19 +# 20 module N = Bs_internalSetBuckets module C = Bs_internalBucketsType module A = Bs_Array @@ -128,8 +129,8 @@ let has h key = memInBucket key bucket -let make = C.create0 -let clear = C.clear0 +let make = C.make +let clear = C.clear let size = C.size let forEach = N.forEach0 diff --git a/jscomp/others/bs_internalBuckets.ml b/jscomp/others/bs_internalBuckets.ml index 7442894753d..8c61e002b69 100644 --- a/jscomp/others/bs_internalBuckets.ml +++ b/jscomp/others/bs_internalBuckets.ml @@ -30,7 +30,7 @@ type ('a,'b) bucket = { mutable value : 'b; mutable next : ('a,'b) bucket C.opt } -and ('a, 'b) t0 = ('a,'b) bucket C.container +and ('a, 'b) t = ('a,'b) bucket C.container [@@bs.deriving abstract] module A = Bs_Array @@ -42,7 +42,7 @@ type statistics = { bucket_histogram: int array } -let rec copy ( x : _ t0) : _ t0= +let rec copy ( x : _ t) : _ t= C.container ~size:(C.size x) ~buckets:(copyBuckets (C.buckets x)) @@ -88,7 +88,7 @@ let rec do_bucket_iter ~f buckets = | Some cell -> f (key cell) (value cell) [@bs]; do_bucket_iter ~f (next cell) -let forEach0 h f = +let forEach h f = let d = C.buckets h in for i = 0 to A.length d - 1 do do_bucket_iter f (A.getUnsafe d i) @@ -102,7 +102,7 @@ let rec do_bucket_fold ~f b accu = | Some cell -> do_bucket_fold ~f (next cell) (f accu (key cell) (value cell) [@bs]) -let reduce0 h init f = +let reduce h init f = let d = C.buckets h in let accu = ref init in for i = 0 to A.length d - 1 do @@ -128,7 +128,7 @@ let getBucketHistogram h = ); histo -let logStats0 h = +let logStats h = let histogram = getBucketHistogram h in Js.log [%obj{ bindings = C.size h; buckets = A.length (C.buckets h); @@ -162,7 +162,7 @@ let rec filterMapInplaceBucket f h i prec cell = filterMapInplaceBucket f h i bucket nextCell end -let filterMapInplace0 h f = +let keepMapInPlace h f = let h_buckets = C.buckets h in for i = 0 to A.length h_buckets - 1 do let v = A.getUnsafe h_buckets i in @@ -177,7 +177,7 @@ let rec fillArray i arr cell = | None -> i + 1 | Some v -> fillArray (i + 1) arr v -let toArray0 h = +let toArray h = let d = C.buckets h in let current = ref 0 in let arr = A.makeUninitializedUnsafe (C.size h) in @@ -209,6 +209,6 @@ let linear h f = done; arr -let keys0 h = linear h (fun [@bs] x -> key x) -let values0 h = linear h (fun [@bs] x -> value x) -let toArray0 h = linear h (fun [@bs]x -> key x, value x) +let keysToArray h = linear h (fun [@bs] x -> key x) +let valuesToArray h = linear h (fun [@bs] x -> value x) +let toArray h = linear h (fun [@bs]x -> key x, value x) diff --git a/jscomp/others/bs_internalBuckets.mli b/jscomp/others/bs_internalBuckets.mli index e9afe84efbe..19262e921dc 100644 --- a/jscomp/others/bs_internalBuckets.mli +++ b/jscomp/others/bs_internalBuckets.mli @@ -29,28 +29,28 @@ type ('a,'b) bucket = { mutable value : 'b; mutable next : ('a,'b) bucket C.opt } -and ('a, 'b) t0 = ('a,'b) bucket C.container +and ('a, 'b) t = ('a,'b) bucket C.container [@@bs.deriving abstract] -val copy : ('a, 'b) t0 -> ('a, 'b) t0 +val copy : ('a, 'b) t -> ('a, 'b) t -val forEach0 : ('a, 'b) t0 -> ('a -> 'b -> 'c [@bs]) -> unit +val forEach : ('a, 'b) t -> ('a -> 'b -> 'c [@bs]) -> unit -val reduce0 : - ('a, 'b) t0 -> 'c -> ('c -> 'a -> 'b -> 'c [@bs]) -> 'c -val logStats0 : ('a, 'b) t0 -> unit +val reduce : + ('a, 'b) t -> 'c -> ('c -> 'a -> 'b -> 'c [@bs]) -> 'c +val logStats : ('a, 'b) t -> unit -val filterMapInplace0 : - ('a, 'b) t0 -> ('a -> 'b -> 'b option [@bs]) -> unit +val keepMapInPlace : + ('a, 'b) t -> ('a -> 'b -> 'b option [@bs]) -> unit val fillArray : int -> ('a * 'b) array -> ('a, 'b) bucket -> int -val keys0 : ('a, 'b) t0 -> 'a array +val keysToArray : ('a, 'b) t -> 'a array -val values0 : ('a, 'b) t0 -> 'b array +val valuesToArray : ('a, 'b) t -> 'b array -val toArray0 : ('a, 'b) t0 -> ('a * 'b) array +val toArray : ('a, 'b) t -> ('a * 'b) array -val getBucketHistogram : ('a,'b) t0 -> int array +val getBucketHistogram : ('a,'b) t -> int array diff --git a/jscomp/others/bs_internalBucketsType.ml b/jscomp/others/bs_internalBucketsType.ml index 1ab982e55ba..087e3130ece 100644 --- a/jscomp/others/bs_internalBucketsType.ml +++ b/jscomp/others/bs_internalBucketsType.ml @@ -39,13 +39,13 @@ let rec power_2_above x n = else if x * 2 < x then x (* overflow *) else power_2_above (x * 2) n -let create0 initialSize = +let make initialSize = let s = power_2_above 16 initialSize in container ~size:0 ~buckets:(A.makeUninitialized s) -let clear0 h = +let clear h = sizeSet h 0; let h_buckets = buckets h in let len = A.length h_buckets in @@ -53,17 +53,3 @@ let clear0 h = A.setUnsafe h_buckets i emptyOpt done - -type statistics = { - num_bindings: int; - (** Number of bindings present in the table. - Same value as returned by {!Hashtbl.length}. *) - num_buckets: int; - (** Number of buckets in the table. *) - max_bucket_length: int; - (** Maximal number of bindings per bucket. *) - bucket_histogram: int array - (** Histogram of bucket sizes. This array [histo] has - length [max_bucket_length + 1]. The value of - [histo.(i)] is the number of buckets whose size is [i]. *) -} diff --git a/jscomp/others/bs_internalBucketsType.mli b/jscomp/others/bs_internalBucketsType.mli index d5de6babcf2..d9ba3660d19 100644 --- a/jscomp/others/bs_internalBucketsType.mli +++ b/jscomp/others/bs_internalBucketsType.mli @@ -33,12 +33,6 @@ external toOpt : 'a opt -> 'a option = "#undefined_to_opt" external return : 'a -> 'a opt = "%identity" val emptyOpt : 'a Js.undefined -val create0 : int -> 'a container -val clear0 : 'a container -> unit +val make : int -> 'a container +val clear : 'a container -> unit -type statistics = { - num_bindings : int; - num_buckets : int; - max_bucket_length : int; - bucket_histogram : int array; -} diff --git a/jscomp/others/hashmap.cppo.ml b/jscomp/others/hashmap.cppo.ml index ba94f102bf0..5c8c4104ff8 100644 --- a/jscomp/others/hashmap.cppo.ml +++ b/jscomp/others/hashmap.cppo.ml @@ -35,7 +35,7 @@ module C = Bs_internalBucketsType module A = Bs_Array -type 'b t = (key,'b) N.t0 +type 'b t = (key,'b) N.t let rec copyBucketReHash ~h_buckets ~ndata_tail h old_bucket = @@ -181,14 +181,14 @@ let has h key = memInBucket key bucket -let make = C.create0 -let clear = C.clear0 +let make = C.make +let clear = C.clear let size = C.size -let forEach = N.forEach0 -let reduce = N.reduce0 -let logStats = N.logStats0 -let keepMapInPlace = N.filterMapInplace0 -let toArray = N.toArray0 +let forEach = N.forEach +let reduce = N.reduce +let logStats = N.logStats +let keepMapInPlace = N.keepMapInPlace +let toArray = N.toArray let ofArray arr = let len = A.length arr in @@ -209,8 +209,8 @@ let mergeMany h arr = let copy = N.copy -let keysToArray = N.keys0 -let valuesToArray = N.values0 +let keysToArray = N.keysToArray +let valuesToArray = N.valuesToArray let getBucketHistogram = N.getBucketHistogram let isEmpty h = C.size h = 0 diff --git a/jscomp/others/hashset.cppo.ml b/jscomp/others/hashset.cppo.ml index 2921055839b..01413c00b06 100644 --- a/jscomp/others/hashset.cppo.ml +++ b/jscomp/others/hashset.cppo.ml @@ -5,16 +5,17 @@ external caml_hash_mix_string : seed -> string -> seed = "caml_hash_mix_string" external final_mix : seed -> seed = "caml_hash_final_mix" let hash (s : key) = final_mix (caml_hash_mix_string 0 s ) - #elif defined TYPE_INT + +#elif defined TYPE_INT type key = int type seed = int external caml_hash_mix_int : seed -> int -> seed = "caml_hash_mix_int" external final_mix : seed -> seed = "caml_hash_final_mix" let hash (s : key) = final_mix (caml_hash_mix_int 0 s) - #else +#else [%error "unknown type"] - #endif +#endif module N = Bs_internalSetBuckets module C = Bs_internalBucketsType @@ -137,8 +138,8 @@ let has h key = memInBucket key bucket -let make = C.create0 -let clear = C.clear0 +let make = C.make +let clear = C.clear let size = C.size let forEach = N.forEach0 diff --git a/jscomp/test/bs_hashmap_test.js b/jscomp/test/bs_hashmap_test.js index eea02674a0a..ee1a77ecd8f 100644 --- a/jscomp/test/bs_hashmap_test.js +++ b/jscomp/test/bs_hashmap_test.js @@ -37,7 +37,7 @@ var Y = /* module */[ var empty = { dict: Y, - data: Bs_internalBucketsType.create0(30) + data: Bs_internalBucketsType.make(30) }; function add(x, y) { @@ -75,13 +75,13 @@ var xx = Bs_HashMap.ofArray(v, Y); eqx("File \"bs_hashmap_test.ml\", line 40, characters 6-13", xx.data.size, 91); -eqx("File \"bs_hashmap_test.ml\", line 41, characters 6-13", Bs_Sort.stableSortBy(Bs_internalBuckets.keys0(xx.data), cmp), Array_data_util.range(30, 120)); +eqx("File \"bs_hashmap_test.ml\", line 41, characters 6-13", Bs_Sort.stableSortBy(Bs_internalBuckets.keysToArray(xx.data), cmp), Array_data_util.range(30, 120)); var u$1 = Bs_Array.concat(Array_data_util.randomRange(0, 100000), Array_data_util.randomRange(0, 100)); var v$1 = { dict: Y, - data: Bs_internalBucketsType.create0(40) + data: Bs_internalBucketsType.make(40) }; Bs_HashMap.mergeMany(v$1, Bs_Array.zip(u$1, u$1)); diff --git a/jscomp/test/bs_hashtbl_string_test.js b/jscomp/test/bs_hashtbl_string_test.js index e2f021f3bce..43fa57bd479 100644 --- a/jscomp/test/bs_hashtbl_string_test.js +++ b/jscomp/test/bs_hashtbl_string_test.js @@ -73,7 +73,7 @@ var Int = /* module */[ var empty = { dict: Int, - data: Bs_internalBucketsType.create0(500000) + data: Bs_internalBucketsType.make(500000) }; function bench() { @@ -93,13 +93,13 @@ function bench() { } } - return Bs_internalBuckets.logStats0(empty.data); + return Bs_internalBuckets.logStats(empty.data); } function bench2(m) { var empty = { dict: m, - data: Bs_internalBucketsType.create0(1000000) + data: Bs_internalBucketsType.make(1000000) }; for(var i = 0; i <= 1000000; ++i){ Bs_HashMap.set(empty, "" + i, i); @@ -214,7 +214,7 @@ function bench4() { function bench5() { var table = { dict: Int, - data: Bs_internalBucketsType.create0(1000000) + data: Bs_internalBucketsType.make(1000000) }; console.time("bs_hashtbl_string_test.ml 132"); for(var i = 0; i <= 1000000; ++i){ diff --git a/lib/js/bs_HashMap.js b/lib/js/bs_HashMap.js index 1cc8507302e..141ac0b767a 100644 --- a/lib/js/bs_HashMap.js +++ b/lib/js/bs_HashMap.js @@ -105,12 +105,12 @@ function setDone0(hash, eq, h, key, value) { function make(initialize_size, dict) { return { dict: dict, - data: Bs_internalBucketsType.create0(initialize_size) + data: Bs_internalBucketsType.make(initialize_size) }; } function clear(h) { - return Bs_internalBucketsType.clear0(h.data); + return Bs_internalBucketsType.clear(h.data); } function size(h) { @@ -118,15 +118,15 @@ function size(h) { } function forEach(h, f) { - return Bs_internalBuckets.forEach0(h.data, f); + return Bs_internalBuckets.forEach(h.data, f); } function reduce(h, init, f) { - return Bs_internalBuckets.reduce0(h.data, init, f); + return Bs_internalBuckets.reduce(h.data, init, f); } function logStats(h) { - return Bs_internalBuckets.logStats0(h.data); + return Bs_internalBuckets.logStats(h.data); } function set(h, key, info) { @@ -267,16 +267,16 @@ function has(h, key) { } function keepMapInPlace(h, f) { - return Bs_internalBuckets.filterMapInplace0(h.data, f); + return Bs_internalBuckets.keepMapInPlace(h.data, f); } function toArray(h) { - return Bs_internalBuckets.toArray0(h.data); + return Bs_internalBuckets.toArray(h.data); } function ofArray0(arr, hash, eq) { var len = arr.length; - var v = Bs_internalBucketsType.create0(len); + var v = Bs_internalBucketsType.make(len); for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ var match = arr[i]; setDone0(hash, eq, v, match[0], match[1]); @@ -313,11 +313,11 @@ function copy(h) { } function keysToArray(h) { - return Bs_internalBuckets.keys0(h.data); + return Bs_internalBuckets.keysToArray(h.data); } function valuesToArray(h) { - return Bs_internalBuckets.values0(h.data); + return Bs_internalBuckets.valuesToArray(h.data); } function getBucketHistogram(h) { diff --git a/lib/js/bs_HashMapInt.js b/lib/js/bs_HashMapInt.js index b93a6dafe11..8668681c785 100644 --- a/lib/js/bs_HashMapInt.js +++ b/lib/js/bs_HashMapInt.js @@ -224,7 +224,7 @@ function size(prim) { function ofArray(arr) { var len = arr.length; - var v = Bs_internalBucketsType.create0(len); + var v = Bs_internalBucketsType.make(len); for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ var match = arr[i]; set(v, match[0], match[1]); @@ -245,25 +245,25 @@ function isEmpty(h) { return +(h.size === 0); } -var make = Bs_internalBucketsType.create0; +var make = Bs_internalBucketsType.make; -var clear = Bs_internalBucketsType.clear0; +var clear = Bs_internalBucketsType.clear; var copy = Bs_internalBuckets.copy; -var forEach = Bs_internalBuckets.forEach0; +var forEach = Bs_internalBuckets.forEach; -var reduce = Bs_internalBuckets.reduce0; +var reduce = Bs_internalBuckets.reduce; -var keepMapInPlace = Bs_internalBuckets.filterMapInplace0; +var keepMapInPlace = Bs_internalBuckets.keepMapInPlace; -var logStats = Bs_internalBuckets.logStats0; +var logStats = Bs_internalBuckets.logStats; -var toArray = Bs_internalBuckets.toArray0; +var toArray = Bs_internalBuckets.toArray; -var keysToArray = Bs_internalBuckets.keys0; +var keysToArray = Bs_internalBuckets.keysToArray; -var valuesToArray = Bs_internalBuckets.values0; +var valuesToArray = Bs_internalBuckets.valuesToArray; var getBucketHistogram = Bs_internalBuckets.getBucketHistogram; diff --git a/lib/js/bs_HashMapString.js b/lib/js/bs_HashMapString.js index 53369689851..c3dc104962c 100644 --- a/lib/js/bs_HashMapString.js +++ b/lib/js/bs_HashMapString.js @@ -224,7 +224,7 @@ function size(prim) { function ofArray(arr) { var len = arr.length; - var v = Bs_internalBucketsType.create0(len); + var v = Bs_internalBucketsType.make(len); for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ var match = arr[i]; set(v, match[0], match[1]); @@ -245,25 +245,25 @@ function isEmpty(h) { return +(h.size === 0); } -var make = Bs_internalBucketsType.create0; +var make = Bs_internalBucketsType.make; -var clear = Bs_internalBucketsType.clear0; +var clear = Bs_internalBucketsType.clear; var copy = Bs_internalBuckets.copy; -var forEach = Bs_internalBuckets.forEach0; +var forEach = Bs_internalBuckets.forEach; -var reduce = Bs_internalBuckets.reduce0; +var reduce = Bs_internalBuckets.reduce; -var keepMapInPlace = Bs_internalBuckets.filterMapInplace0; +var keepMapInPlace = Bs_internalBuckets.keepMapInPlace; -var logStats = Bs_internalBuckets.logStats0; +var logStats = Bs_internalBuckets.logStats; -var toArray = Bs_internalBuckets.toArray0; +var toArray = Bs_internalBuckets.toArray; -var keysToArray = Bs_internalBuckets.keys0; +var keysToArray = Bs_internalBuckets.keysToArray; -var valuesToArray = Bs_internalBuckets.values0; +var valuesToArray = Bs_internalBuckets.valuesToArray; var getBucketHistogram = Bs_internalBuckets.getBucketHistogram; diff --git a/lib/js/bs_HashMultiMap.js b/lib/js/bs_HashMultiMap.js index 00357831864..e9567b6d8d3 100644 --- a/lib/js/bs_HashMultiMap.js +++ b/lib/js/bs_HashMultiMap.js @@ -48,33 +48,89 @@ function resize(hash, h) { } } -function add0(hash, h, key, value) { - var h_buckets = h.buckets; +function replace_bucket(eq, key, info, _buckets) { + while(true) { + var buckets = _buckets; + if (buckets !== undefined) { + if (eq(buckets.key, key)) { + buckets.key = key; + buckets.value = info; + return /* false */0; + } else { + _buckets = buckets.next; + continue ; + + } + } else { + return /* true */1; + } + }; +} + +function create(dict, initialize_size) { + return { + dict: dict, + data: Bs_internalBucketsType.make(initialize_size) + }; +} + +function clear(h) { + return Bs_internalBucketsType.clear(h.data); +} + +function size(h) { + return h.data.size; +} + +function forEach(h, f) { + return Bs_internalBuckets.forEach(h.data, f); +} + +function reduce(h, init, f) { + return Bs_internalBuckets.reduce(h.data, init, f); +} + +function logStats(h) { + return Bs_internalBuckets.logStats(h.data); +} + +function add(h, key, info) { + var M = h.dict; + var hash = M[/* hash */0]; + var h$1 = h.data; + var key$1 = key; + var value = info; + var h_buckets = h$1.buckets; var h_buckets_lenth = h_buckets.length; - var i = hash(key) & (h_buckets_lenth - 1 | 0); + var i = hash(key$1) & (h_buckets_lenth - 1 | 0); var bucket = { - key: key, + key: key$1, value: value, next: h_buckets[i] }; h_buckets[i] = bucket; - var h_new_size = h.size + 1 | 0; - h.size = h_new_size; + var h_new_size = h$1.size + 1 | 0; + h$1.size = h_new_size; if (h_new_size > (h_buckets_lenth << 1)) { - return resize(hash, h); + return resize(hash, h$1); } else { return 0; } } -function remove0(hash, eq, h, key) { - var h_buckets = h.buckets; - var i = hash(key) & (h_buckets.length - 1 | 0); +function remove(h, key) { + var M = h.dict; + var hash = M[/* hash */0]; + var eq = M[/* eq */1]; + var h$1 = h.data; + var key$1 = key; + var h_buckets = h$1.buckets; + var i = hash(key$1) & (h_buckets.length - 1 | 0); var eq$1 = eq; - var h$1 = h; + var h$2 = h$1; var h_buckets$1 = h_buckets; var i$1 = i; - var key$1 = key; + var key$2 = key$1; var _prec = Bs_internalBucketsType.emptyOpt; var _buckets = h_buckets[i]; while(true) { @@ -82,13 +138,13 @@ function remove0(hash, eq, h, key) { var prec = _prec; if (buckets !== undefined) { var cell_next = buckets.next; - if (eq$1(buckets.key, key$1)) { + if (eq$1(buckets.key, key$2)) { if (prec !== undefined) { prec.next = cell_next; } else { h_buckets$1[i$1] = cell_next; } - h$1.size = h$1.size - 1 | 0; + h$2.size = h$2.size - 1 | 0; return /* () */0; } else { _buckets = cell_next; @@ -102,14 +158,19 @@ function remove0(hash, eq, h, key) { }; } -function removeAll0(hash, eq, h, key) { - var h_buckets = h.buckets; - var i = hash(key) & (h_buckets.length - 1 | 0); +function removeAll(h, key) { + var M = h.dict; + var hash = M[/* hash */0]; + var eq = M[/* eq */1]; + var h$1 = h.data; + var key$1 = key; + var h_buckets = h$1.buckets; + var i = hash(key$1) & (h_buckets.length - 1 | 0); var eq$1 = eq; - var h$1 = h; + var h$2 = h$1; var h_buckets$1 = h_buckets; var i$1 = i; - var key$1 = key; + var key$2 = key$1; var _prec = Bs_internalBucketsType.emptyOpt; var _buckets = h_buckets[i]; while(true) { @@ -117,13 +178,13 @@ function removeAll0(hash, eq, h, key) { var prec = _prec; if (buckets !== undefined) { var cell_next = buckets.next; - if (eq$1(buckets.key, key$1)) { + if (eq$1(buckets.key, key$2)) { if (prec !== undefined) { prec.next = cell_next; } else { h_buckets$1[i$1] = cell_next; } - h$1.size = h$1.size - 1 | 0; + h$2.size = h$2.size - 1 | 0; } _buckets = cell_next; _prec = buckets; @@ -135,31 +196,36 @@ function removeAll0(hash, eq, h, key) { }; } -function get0(hash, eq, h, key) { - var h_buckets = h.buckets; - var nid = hash(key) & (h_buckets.length - 1 | 0); +function get(h, key) { + var M = h.dict; + var hash = M[/* hash */0]; + var eq = M[/* eq */1]; + var h$1 = h.data; + var key$1 = key; + var h_buckets = h$1.buckets; + var nid = hash(key$1) & (h_buckets.length - 1 | 0); var match = h_buckets[nid]; if (match !== undefined) { - if (eq(key, match.key)) { + if (eq(key$1, match.key)) { return /* Some */[match.value]; } else { var match$1 = match.next; if (match$1 !== undefined) { - if (eq(key, match$1.key)) { + if (eq(key$1, match$1.key)) { return /* Some */[match$1.value]; } else { var match$2 = match$1.next; if (match$2 !== undefined) { - if (eq(key, match$2.key)) { + if (eq(key$1, match$2.key)) { return /* Some */[match$2.value]; } else { var eq$1 = eq; - var key$1 = key; + var key$2 = key$1; var _buckets = match$2.next; while(true) { var buckets = _buckets; if (buckets !== undefined) { - if (eq$1(key$1, buckets.key)) { + if (eq$1(key$2, buckets.key)) { return /* Some */[buckets.value]; } else { _buckets = buckets.next; @@ -184,12 +250,17 @@ function get0(hash, eq, h, key) { } } -function getAll0(hash, eq, h, key) { +function getAll(h, key) { + var M = h.dict; + var hash = M[/* hash */0]; + var eq = M[/* eq */1]; + var h$1 = h.data; + var key$1 = key; var find_in_bucket = function (_buckets) { while(true) { var buckets = _buckets; if (buckets !== undefined) { - if (eq(buckets.key, key)) { + if (eq(buckets.key, key$1)) { return /* :: */[ buckets.value, find_in_bucket(buckets.next) @@ -204,43 +275,30 @@ function getAll0(hash, eq, h, key) { } }; }; - var h_buckets = h.buckets; - var nid = hash(key) & (h_buckets.length - 1 | 0); + var h_buckets = h$1.buckets; + var nid = hash(key$1) & (h_buckets.length - 1 | 0); return find_in_bucket(h_buckets[nid]); } -function replace_bucket(eq, key, info, _buckets) { - while(true) { - var buckets = _buckets; - if (buckets !== undefined) { - if (eq(buckets.key, key)) { - buckets.key = key; - buckets.value = info; - return /* false */0; - } else { - _buckets = buckets.next; - continue ; - - } - } else { - return /* true */1; - } - }; -} - -function replace0(hash, eq, h, key, info) { - var h_buckets = h.buckets; - var i = hash(key) & (h_buckets.length - 1 | 0); +function replace(h, key, info) { + var M = h.dict; + var hash = M[/* hash */0]; + var eq = M[/* eq */1]; + var h$1 = h.data; + var key$1 = key; + var info$1 = info; + var h_buckets = h$1.buckets; + var i = hash(key$1) & (h_buckets.length - 1 | 0); var l = h_buckets[i]; - if (replace_bucket(eq, key, info, l)) { + if (replace_bucket(eq, key$1, info$1, l)) { h_buckets[i] = { - key: key, - value: info, + key: key$1, + value: info$1, next: l }; - h.size = h.size + 1 | 0; - if (h.size > (h.buckets.length << 1)) { - return resize(hash, h); + h$1.size = h$1.size + 1 | 0; + if (h$1.size > (h$1.buckets.length << 1)) { + return resize(hash, h$1); } else { return 0; } @@ -249,17 +307,22 @@ function replace0(hash, eq, h, key, info) { } } -function has0(hash, eq, h, key) { - var h_buckets = h.buckets; - var nid = hash(key) & (h_buckets.length - 1 | 0); +function has(h, key) { + var M = h.dict; + var hash = M[/* hash */0]; + var eq = M[/* eq */1]; + var h$1 = h.data; + var key$1 = key; + var h_buckets = h$1.buckets; + var nid = hash(key$1) & (h_buckets.length - 1 | 0); var bucket = h_buckets[nid]; if (bucket !== undefined) { var eq$1 = eq; - var key$1 = key; + var key$2 = key$1; var _cell = bucket; while(true) { var cell = _cell; - if (eq$1(cell.key, key$1)) { + if (eq$1(cell.key, key$2)) { return /* true */1; } else { var match = cell.next; @@ -277,84 +340,10 @@ function has0(hash, eq, h, key) { } } -function create(dict, initialize_size) { - return { - dict: dict, - data: Bs_internalBucketsType.create0(initialize_size) - }; +function keepMapInPlace(h, f) { + return Bs_internalBuckets.keepMapInPlace(h.data, f); } -function clear(h) { - return Bs_internalBucketsType.clear0(h.data); -} - -function size(h) { - return h.data.size; -} - -function forEach(h, f) { - return Bs_internalBuckets.forEach0(h.data, f); -} - -function reduce(h, init, f) { - return Bs_internalBuckets.reduce0(h.data, init, f); -} - -function logStats(h) { - return Bs_internalBuckets.logStats0(h.data); -} - -function add(h, key, info) { - var M = h.dict; - return add0(M[/* hash */0], h.data, key, info); -} - -function remove(h, key) { - var M = h.dict; - return remove0(M[/* hash */0], M[/* eq */1], h.data, key); -} - -function removeAll(h, key) { - var M = h.dict; - return removeAll0(M[/* hash */0], M[/* eq */1], h.data, key); -} - -function get(h, key) { - var M = h.dict; - return get0(M[/* hash */0], M[/* eq */1], h.data, key); -} - -function getAll(h, key) { - var M = h.dict; - return getAll0(M[/* hash */0], M[/* eq */1], h.data, key); -} - -function replace(h, key, info) { - var M = h.dict; - return replace0(M[/* hash */0], M[/* eq */1], h.data, key, info); -} - -function has(h, key) { - var M = h.dict; - return has0(M[/* hash */0], M[/* eq */1], h.data, key); -} - -function filterMapDone(h, f) { - return Bs_internalBuckets.filterMapInplace0(h.data, f); -} - -var create0 = Bs_internalBucketsType.create0; - -var clear0 = Bs_internalBucketsType.clear0; - -var logStats0 = Bs_internalBuckets.logStats0; - -var filterMapInplace0 = Bs_internalBuckets.filterMapInplace0; - -var reduce0 = Bs_internalBuckets.reduce0; - -var forEach0 = Bs_internalBuckets.forEach0; - exports.create = create; exports.clear = clear; exports.add = add; @@ -366,20 +355,7 @@ exports.removeAll = removeAll; exports.replace = replace; exports.forEach = forEach; exports.reduce = reduce; -exports.filterMapDone = filterMapDone; +exports.keepMapInPlace = keepMapInPlace; exports.size = size; exports.logStats = logStats; -exports.create0 = create0; -exports.clear0 = clear0; -exports.logStats0 = logStats0; -exports.filterMapInplace0 = filterMapInplace0; -exports.reduce0 = reduce0; -exports.forEach0 = forEach0; -exports.replace0 = replace0; -exports.add0 = add0; -exports.get0 = get0; -exports.getAll0 = getAll0; -exports.has0 = has0; -exports.removeAll0 = removeAll0; -exports.remove0 = remove0; /* No side effect */ diff --git a/lib/js/bs_HashSet.js b/lib/js/bs_HashSet.js index 9e768439b70..c80cfb54ec9 100644 --- a/lib/js/bs_HashSet.js +++ b/lib/js/bs_HashSet.js @@ -97,12 +97,12 @@ function toArray(h) { function make(dict, initialize_size) { return { dict: dict, - data: Bs_internalBucketsType.create0(initialize_size) + data: Bs_internalBucketsType.make(initialize_size) }; } function clear(h) { - return Bs_internalBucketsType.clear0(h.data); + return Bs_internalBucketsType.clear(h.data); } function size(h) { @@ -207,7 +207,7 @@ function has(h, key) { function ofArray0(hash, eq, arr) { var len = arr.length; - var v = Bs_internalBucketsType.create0(len); + var v = Bs_internalBucketsType.make(len); for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ addDone0(v, arr[i], hash, eq); } diff --git a/lib/js/bs_HashSetInt.js b/lib/js/bs_HashSetInt.js index 8be1b7fb489..436e6957ba5 100644 --- a/lib/js/bs_HashSetInt.js +++ b/lib/js/bs_HashSetInt.js @@ -171,7 +171,7 @@ function size(prim) { function ofArray(arr) { var len = arr.length; - var v = Bs_internalBucketsType.create0(len); + var v = Bs_internalBucketsType.make(len); for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ add(v, arr[i]); } @@ -190,9 +190,9 @@ function isEmpty(h) { return +(h.size === 0); } -var make = Bs_internalBucketsType.create0; +var make = Bs_internalBucketsType.make; -var clear = Bs_internalBucketsType.clear0; +var clear = Bs_internalBucketsType.clear; var copy = Bs_internalSetBuckets.copy; diff --git a/lib/js/bs_HashSetString.js b/lib/js/bs_HashSetString.js index 94295b7130b..5e9df389695 100644 --- a/lib/js/bs_HashSetString.js +++ b/lib/js/bs_HashSetString.js @@ -171,7 +171,7 @@ function size(prim) { function ofArray(arr) { var len = arr.length; - var v = Bs_internalBucketsType.create0(len); + var v = Bs_internalBucketsType.make(len); for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ add(v, arr[i]); } @@ -190,9 +190,9 @@ function isEmpty(h) { return +(h.size === 0); } -var make = Bs_internalBucketsType.create0; +var make = Bs_internalBucketsType.make; -var clear = Bs_internalBucketsType.clear0; +var clear = Bs_internalBucketsType.clear; var copy = Bs_internalSetBuckets.copy; diff --git a/lib/js/bs_internalBuckets.js b/lib/js/bs_internalBuckets.js index c0ff891e9d6..43aad9faacc 100644 --- a/lib/js/bs_internalBuckets.js +++ b/lib/js/bs_internalBuckets.js @@ -83,7 +83,7 @@ function do_bucket_iter(f, _buckets) { }; } -function forEach0(h, f) { +function forEach(h, f) { var d = h.buckets; for(var i = 0 ,i_finish = d.length - 1 | 0; i <= i_finish; ++i){ do_bucket_iter(f, d[i]); @@ -106,7 +106,7 @@ function do_bucket_fold(f, _b, _accu) { }; } -function reduce0(h, init, f) { +function reduce(h, init, f) { var d = h.buckets; var accu = init; for(var i = 0 ,i_finish = d.length - 1 | 0; i <= i_finish; ++i){ @@ -139,7 +139,7 @@ function getBucketHistogram(h) { return histo; } -function logStats0(h) { +function logStats(h) { var histogram = getBucketHistogram(h); console.log({ bindings: h.size, @@ -188,7 +188,7 @@ function filterMapInplaceBucket(f, h, i, _prec, _cell) { }; } -function filterMapInplace0(h, f) { +function keepMapInPlace(h, f) { var h_buckets = h.buckets; for(var i = 0 ,i_finish = h_buckets.length - 1 | 0; i <= i_finish; ++i){ var v = h_buckets[i]; @@ -251,19 +251,19 @@ function linear(h, f) { return arr; } -function keys0(h) { +function keysToArray(h) { return linear(h, (function (x) { return x.key; })); } -function values0(h) { +function valuesToArray(h) { return linear(h, (function (x) { return x.value; })); } -function toArray0(h) { +function toArray(h) { return linear(h, (function (x) { return /* tuple */[ x.key, @@ -276,13 +276,13 @@ var C = 0; exports.C = C; exports.copy = copy; -exports.forEach0 = forEach0; -exports.reduce0 = reduce0; -exports.logStats0 = logStats0; -exports.filterMapInplace0 = filterMapInplace0; +exports.forEach = forEach; +exports.reduce = reduce; +exports.logStats = logStats; +exports.keepMapInPlace = keepMapInPlace; exports.fillArray = fillArray; -exports.keys0 = keys0; -exports.values0 = values0; -exports.toArray0 = toArray0; +exports.keysToArray = keysToArray; +exports.valuesToArray = valuesToArray; +exports.toArray = toArray; exports.getBucketHistogram = getBucketHistogram; /* No side effect */ diff --git a/lib/js/bs_internalBucketsType.js b/lib/js/bs_internalBucketsType.js index b142c53bd3f..1ded15a3b49 100644 --- a/lib/js/bs_internalBucketsType.js +++ b/lib/js/bs_internalBucketsType.js @@ -18,7 +18,7 @@ function power_2_above(_x, n) { }; } -function create0(initialSize) { +function make(initialSize) { var s = power_2_above(16, initialSize); return { size: 0, @@ -26,7 +26,7 @@ function create0(initialSize) { }; } -function clear0(h) { +function clear(h) { h.size = 0; var h_buckets = h.buckets; var len = h_buckets.length; @@ -37,6 +37,6 @@ function clear0(h) { } exports.emptyOpt = emptyOpt; -exports.create0 = create0; -exports.clear0 = clear0; +exports.make = make; +exports.clear = clear; /* No side effect */ From 32aea5b0700a7792a5d2a757a59020846dbdf820 Mon Sep 17 00:00:00 2001 From: Hongbo Zhang Date: Sun, 28 Jan 2018 15:34:45 +0800 Subject: [PATCH 12/17] more efficient generic map --- jscomp/others/bs_Map.ml | 198 ++++++++++++++++++++------------------- jscomp/others/bs_Map.mli | 8 +- lib/js/bs_Map.js | 107 ++++++++++----------- 3 files changed, 158 insertions(+), 155 deletions(-) diff --git a/jscomp/others/bs_Map.ml b/jscomp/others/bs_Map.ml index 48c485cf523..5c802f16446 100644 --- a/jscomp/others/bs_Map.ml +++ b/jscomp/others/bs_Map.ml @@ -16,129 +16,135 @@ module N = Bs_SortedMapDict module A = Bs_Array type ('key, 'a, 'id) t0 = ('key, 'a, 'id ) N.t type ('key, 'id ) dict = ('key, 'id) Bs_Cmp.t -type ('k,'v,'id) t = { - dict : ('k,'id) dict; - data : ('k,'v, 'id) t0 -} -[@@bs.deriving abstract] +type ('key, 'id ) cmp = ('key, 'id) Bs_Cmp.cmp +module S = struct + type ('k,'v,'id) t = { + cmp: ('k,'id) cmp; + data: ('k,'v, 'id) t0 + } + [@@bs.deriving abstract] +end + +type ('k, 'v, 'id ) t = ('k, 'v, 'id) S.t let ofArray (type k) (type id) data ~(dict : (k,id) Bs_Cmp.t) = - let module M = (val dict) in - t ~dict ~data:(N.ofArray ~cmp:M.cmp data) + let module M = (val dict) in + let cmp = M.cmp in + S.t ~cmp ~data:(N.ofArray ~cmp data) -let remove (type k) (type id) (m : (k,_,id) t) x = - let module M = (val dict m) in - let odata = data m in - let newData = N.remove odata x ~cmp:M.cmp in +let remove m x = + let cmp, odata = S.cmp m, S.data m in + let newData = N.remove odata x ~cmp in if newData == odata then m - else t ~dict:(module M) ~data:newData + else S.t ~cmp ~data:newData -let removeMany (type k) (type id) (m : (k,_,id) t) x = - let module M = (val dict m) in - let odata = data m in - let newData = N.removeMany odata x ~cmp:M.cmp in +let removeMany m x = + let cmp, odata = S.cmp m, S.data m in + let newData = N.removeMany odata x ~cmp in if newData == odata then m - else t ~dict:(module M) ~data:newData + else S.t ~cmp ~data:newData -let set (type k) (type id) (m : (k,_,id) t) key d = - let module X = (val dict m) in - t ~dict:(module X) ~data:(N.set ~cmp:X.cmp (data m) key d) +let set m key d = + let cmp = S.cmp m in + S.t ~cmp ~data:(N.set ~cmp (S.data m) key d) -let mergeMany (type elt) (type id) (m : (elt,_,id) t) e = - let module M = (val dict m) in - t ~dict:(module M) ~data:(N.mergeMany ~cmp:M.cmp (data m) e) +let mergeMany m e = + let cmp = S.cmp m in + S.t ~cmp ~data:(N.mergeMany ~cmp (S.data m) e) -let update (type k) (type id) (m : (k,_,id) t) key f = - let module X = (val dict m) in - t ~dict:(module X) ~data:(N.update ~cmp:X.cmp (data m) key f ) +let update m key f = + let cmp = S.cmp m in + S.t ~cmp ~data:(N.update ~cmp (S.data m) key f ) -let split (type k) (type id) (m : (k,_,id) t) x = - let module M = (val dict m) in - let (l,r),b = N.split ~cmp:M.cmp (data m) x in - (t ~dict:(module M) ~data:l, t ~dict:(module M) ~data:r), b +let split m x = + let cmp = S.cmp m in + let (l,r),b = N.split ~cmp (S.data m) x in + (S.t ~cmp ~data:l, S.t ~cmp ~data:r), b -let merge (type k) (type id) (s1 : (k,_,id) t) - (s2 : (k,_,id) t) f = - let module X = (val dict s1) in - t ~dict:(module X) ~data:(N.merge ~cmp:X.cmp (data s1) (data s2) f) +let merge s1 s2 f = + let cmp = S.cmp s1 in + S.t ~cmp ~data:(N.merge ~cmp (S.data s1) (S.data s2) f) -let empty ~dict = - t ~dict ~data:N.empty +let empty (type elt) (type id) ~(dict: (elt, id) dict) = + let module M = (val dict) in + S.t ~cmp:M.cmp ~data:N.empty let isEmpty map = - N.isEmpty (data map) + N.isEmpty (S.data map) -let cmp (type k) (type id) (m1 : (k,'v,id) t) (m2 : (k,'v,id) t) cmp - = - let module X = (val dict m1) in - N.cmp ~kcmp:X.cmp ~vcmp:cmp (data m1) (data m2) -let eq (type k) (type id) - (m1 : (k,'v,id) t) (m2 : (k,'v,id) t) cmp = - let module X = (val dict m1) in - N.eq ~kcmp:X.cmp ~veq:cmp (data m1) (data m2) +let forEach m f = N.forEach (S.data m) f -let forEach m f = N.forEach (data m) f +let reduce m acc f = N.reduce (S.data m) acc f -let reduce m acc f = N.reduce (data m) acc f +let every m f = N.every (S.data m) f -let every m f = N.every (data m) f +let some m f = N.some (S.data m) f -let some m f = N.some (data m) f - -let keepBy m f = - t ~dict:(dict m) ~data:(N.keepBy (data m) f) +let keepBy m f = + S.t ~cmp:(S.cmp m) ~data:(N.keepBy (S.data m) f) let partition m p = - let dict = dict m in - let l,r = N.partition (data m) p in - t ~dict ~data:l, t ~dict ~data:r + let cmp = S.cmp m in + let l,r = N.partition (S.data m) p in + S.t ~cmp ~data:l, S.t ~cmp ~data:r let map m f = - t ~dict:(dict m) ~data:(N.map (data m) f) + S.t ~cmp:(S.cmp m) ~data:(N.map (S.data m) f) let mapWithKey m f = - t ~dict:(dict m) ~data:(N.mapWithKey (data m) f) - -let size map = N.size (data map) -let toList map = N.toList (data map) -let toArray m = N.toArray (data m) -let keysToArray m = N.keysToArray (data m) -let valuesToArray m = N.valuesToArray (data m) -let minKey m = N.minKey (data m) -let minKeyUndefined m = N.minKeyUndefined (data m) -let maxKey m = N.maxKey (data m) -let maxKeyUndefined m = N.maxKeyUndefined (data m) -let minimum m = N.minimum (data m) -let minUndefined m = N.minUndefined (data m) -let maximum m = N.maximum (data m) -let maxUndefined m = N.maxUndefined (data m) - -let get (type k) (type id) (map : (k,_,id) t) x = - let module X = (val dict map) in - N.get ~cmp:X.cmp (data map) x - -let getUndefined (type k) (type id) (map : (k,_,id) t) x = - let module X = (val dict map) in - N.getUndefined ~cmp:X.cmp (data map) x - -let getWithDefault (type k) (type id) (map : (k,_,id) t) x def = - let module X = (val dict map) in - N.getWithDefault ~cmp:X.cmp (data map) x def - -let getExn (type k) (type id) (map : (k,_,id) t) x = - let module X = (val dict map) in - N.getExn ~cmp:X.cmp (data map) x - -let has (type k) (type id) (map : (k,_,id) t) x = - let module X = (val dict map) in - N.has ~cmp:X.cmp (data map) x + S.t ~cmp:(S.cmp m) ~data:(N.mapWithKey (S.data m) f) -let checkInvariantInternal m = - N.checkInvariantInternal (data m) +let size map = N.size (S.data map) +let toList map = N.toList (S.data map) +let toArray m = N.toArray (S.data m) +let keysToArray m = N.keysToArray (S.data m) +let valuesToArray m = N.valuesToArray (S.data m) +let minKey m = N.minKey (S.data m) +let minKeyUndefined m = N.minKeyUndefined (S.data m) +let maxKey m = N.maxKey (S.data m) +let maxKeyUndefined m = N.maxKeyUndefined (S.data m) +let minimum m = N.minimum (S.data m) +let minUndefined m = N.minUndefined (S.data m) +let maximum m = N.maximum (S.data m) +let maxUndefined m = N.maxUndefined (S.data m) + +let get map x = + N.get ~cmp:(S.cmp map) (S.data map) x -let getData = data -let getDict = dict -let packDictData = t +let getUndefined map x = + N.getUndefined ~cmp:(S.cmp map) (S.data map) x + +let getWithDefault map x def = + N.getWithDefault ~cmp:(S.cmp map) (S.data map) x def + +let getExn map x = + N.getExn ~cmp:(S.cmp map) (S.data map) x + +let has map x = + N.has ~cmp:(S.cmp map) (S.data map) x + +let checkInvariantInternal m = + N.checkInvariantInternal (S.data m) + +let eq m1 m2 veq = + N.eq ~kcmp:(S.cmp m1) ~veq (S.data m1) (S.data m2) + +let cmp m1 m2 vcmp = + N.cmp ~kcmp:(S.cmp m1) ~vcmp (S.data m1) (S.data m2) + +let getData = S.data + +let getDict (type elt) (type id) (m : (elt,_,id) t) : (elt, id) dict = + let module T = struct + type nonrec id = id + type nonrec t = elt + let cmp = S.cmp m + end in + (module T ) + +let packDictData (type elt) (type id) ~(dict : (elt, id) dict) ~data = + let module M = (val dict) in + S.t ~cmp:M.cmp ~data diff --git a/jscomp/others/bs_Map.mli b/jscomp/others/bs_Map.mli index 3c761f2b925..b27d978ae91 100644 --- a/jscomp/others/bs_Map.mli +++ b/jscomp/others/bs_Map.mli @@ -44,11 +44,13 @@ val empty: dict:('k, 'id) dict -> ('k, 'a, 'id) t val isEmpty: _ t -> bool val has: ('k, 'a, 'id) t -> 'k -> bool -val cmp: - ('k, 'v, 'id) t -> + +val cmp: + ('k, 'v, 'id) t -> ('k, 'v, 'id) t -> - ('v -> 'v -> int [@bs]) -> + ('v -> 'v -> int [@bs]) -> int + val eq: ('k, 'a, 'id) t -> ('k, 'a, 'id) t -> diff --git a/lib/js/bs_Map.js b/lib/js/bs_Map.js index 3c75306efed..74f5cd8f3d0 100644 --- a/lib/js/bs_Map.js +++ b/lib/js/bs_Map.js @@ -3,76 +3,77 @@ var Bs_SortedMapDict = require("./bs_SortedMapDict.js"); function ofArray(data, dict) { + var cmp = dict[/* cmp */0]; return { - dict: dict, - data: Bs_SortedMapDict.ofArray(data, dict[/* cmp */0]) + cmp: cmp, + data: Bs_SortedMapDict.ofArray(data, cmp) }; } function remove(m, x) { - var M = m.dict; + var cmp = m.cmp; var odata = m.data; - var newData = Bs_SortedMapDict.remove(odata, x, M[/* cmp */0]); + var newData = Bs_SortedMapDict.remove(odata, x, cmp); if (newData === odata) { return m; } else { return { - dict: M, + cmp: cmp, data: newData }; } } function removeMany(m, x) { - var M = m.dict; + var cmp = m.cmp; var odata = m.data; - var newData = Bs_SortedMapDict.removeMany(odata, x, M[/* cmp */0]); + var newData = Bs_SortedMapDict.removeMany(odata, x, cmp); if (newData === odata) { return m; } else { return { - dict: M, + cmp: cmp, data: newData }; } } function set(m, key, d) { - var X = m.dict; + var cmp = m.cmp; return { - dict: X, - data: Bs_SortedMapDict.set(m.data, key, d, X[/* cmp */0]) + cmp: cmp, + data: Bs_SortedMapDict.set(m.data, key, d, cmp) }; } function mergeMany(m, e) { - var M = m.dict; + var cmp = m.cmp; return { - dict: M, - data: Bs_SortedMapDict.mergeMany(m.data, e, M[/* cmp */0]) + cmp: cmp, + data: Bs_SortedMapDict.mergeMany(m.data, e, cmp) }; } function update(m, key, f) { - var X = m.dict; + var cmp = m.cmp; return { - dict: X, - data: Bs_SortedMapDict.update(m.data, key, f, X[/* cmp */0]) + cmp: cmp, + data: Bs_SortedMapDict.update(m.data, key, f, cmp) }; } function split(m, x) { - var M = m.dict; - var match = Bs_SortedMapDict.split(m.data, x, M[/* cmp */0]); + var cmp = m.cmp; + var match = Bs_SortedMapDict.split(m.data, x, cmp); var match$1 = match[0]; return /* tuple */[ /* tuple */[ { - dict: M, + cmp: cmp, data: match$1[0] }, { - dict: M, + cmp: cmp, data: match$1[1] } ], @@ -81,16 +82,16 @@ function split(m, x) { } function merge(s1, s2, f) { - var X = s1.dict; + var cmp = s1.cmp; return { - dict: X, - data: Bs_SortedMapDict.merge(s1.data, s2.data, f, X[/* cmp */0]) + cmp: cmp, + data: Bs_SortedMapDict.merge(s1.data, s2.data, f, cmp) }; } function empty(dict) { return { - dict: dict, + cmp: dict[/* cmp */0], data: Bs_SortedMapDict.empty }; } @@ -99,16 +100,6 @@ function isEmpty(map) { return Bs_SortedMapDict.isEmpty(map.data); } -function cmp(m1, m2, cmp$1) { - var X = m1.dict; - return Bs_SortedMapDict.cmp(m1.data, m2.data, X[/* cmp */0], cmp$1); -} - -function eq(m1, m2, cmp) { - var X = m1.dict; - return Bs_SortedMapDict.eq(m1.data, m2.data, X[/* cmp */0], cmp); -} - function forEach(m, f) { return Bs_SortedMapDict.forEach(m.data, f); } @@ -127,21 +118,21 @@ function some(m, f) { function keepBy(m, f) { return { - dict: m.dict, + cmp: m.cmp, data: Bs_SortedMapDict.keepBy(m.data, f) }; } function partition(m, p) { - var dict = m.dict; + var cmp = m.cmp; var match = Bs_SortedMapDict.partition(m.data, p); return /* tuple */[ { - dict: dict, + cmp: cmp, data: match[0] }, { - dict: dict, + cmp: cmp, data: match[1] } ]; @@ -149,14 +140,14 @@ function partition(m, p) { function map(m, f) { return { - dict: m.dict, + cmp: m.cmp, data: Bs_SortedMapDict.map(m.data, f) }; } function mapWithKey(m, f) { return { - dict: m.dict, + cmp: m.cmp, data: Bs_SortedMapDict.mapWithKey(m.data, f) }; } @@ -214,46 +205,50 @@ function maxUndefined(m) { } function get(map, x) { - var X = map.dict; - return Bs_SortedMapDict.get(map.data, x, X[/* cmp */0]); + return Bs_SortedMapDict.get(map.data, x, map.cmp); } function getUndefined(map, x) { - var X = map.dict; - return Bs_SortedMapDict.getUndefined(map.data, x, X[/* cmp */0]); + return Bs_SortedMapDict.getUndefined(map.data, x, map.cmp); } function getWithDefault(map, x, def) { - var X = map.dict; - return Bs_SortedMapDict.getWithDefault(map.data, x, def, X[/* cmp */0]); + return Bs_SortedMapDict.getWithDefault(map.data, x, def, map.cmp); } function getExn(map, x) { - var X = map.dict; - return Bs_SortedMapDict.getExn(map.data, x, X[/* cmp */0]); + return Bs_SortedMapDict.getExn(map.data, x, map.cmp); } function has(map, x) { - var X = map.dict; - return Bs_SortedMapDict.has(map.data, x, X[/* cmp */0]); + return Bs_SortedMapDict.has(map.data, x, map.cmp); } function checkInvariantInternal(m) { return Bs_SortedMapDict.checkInvariantInternal(m.data); } +function eq(m1, m2, veq) { + return Bs_SortedMapDict.eq(m1.data, m2.data, m1.cmp, veq); +} + +function cmp(m1, m2, vcmp) { + return Bs_SortedMapDict.cmp(m1.data, m2.data, m1.cmp, vcmp); +} + function getData(prim) { return prim.data; } -function getDict(prim) { - return prim.dict; +function getDict(m) { + var cmp = m.cmp; + return /* module */[/* cmp */cmp]; } -function packDictData(prim, prim$1) { +function packDictData(dict, data) { return { - dict: prim, - data: prim$1 + cmp: dict[/* cmp */0], + data: data }; } From 8765163dae205a4e7579d97effb750aae5b80321 Mon Sep 17 00:00:00 2001 From: Hongbo Zhang Date: Sun, 28 Jan 2018 15:51:30 +0800 Subject: [PATCH 13/17] more efficient set --- jscomp/others/bs_Set.ml | 174 +++++++++++++++++++++------------------- lib/js/bs_Set.js | 101 +++++++++++------------ 2 files changed, 141 insertions(+), 134 deletions(-) diff --git a/jscomp/others/bs_Set.ml b/jscomp/others/bs_Set.ml index 6709e1c4794..ac27fbe12eb 100644 --- a/jscomp/others/bs_Set.ml +++ b/jscomp/others/bs_Set.ml @@ -27,127 +27,137 @@ module A = Bs_Array type ('k,'id) t0 = ('k, 'id) N.t type ('key, 'id) dict = ('key, 'id) Bs_Cmp.t +type ('key, 'id ) cmp = ('key, 'id) Bs_Cmp.cmp -type ('k,'id) t = { - dict: ('k, 'id) dict ; - data: ('k, 'id) t0 -} [@@bs.deriving abstract] - - +module S = struct + type ('k,'id) t = { + cmp: ('k, 'id) cmp; + data: ('k, 'id) t0 + } [@@bs.deriving abstract] +end +type ('k, 'id) t = ('k, 'id) S.t + let ofArray (type elt) (type id) data ~(dict : (elt,id) dict) = - let module M = (val dict ) in - t ~dict ~data:(N.ofArray ~cmp:M.cmp data) + let module M = (val dict ) in + let cmp = M.cmp in + S.t ~cmp ~data:(N.ofArray ~cmp data) -let remove (type elt) (type id) (m : (elt,id) t) e = - let module M = (val dict m) in - let data = data m in - let newData = N.remove ~cmp:M.cmp data e in +let remove m e = + let cmp, data = S.cmp m, S.data m in + let newData = N.remove ~cmp data e in if newData == data then m - else t ~dict:(module M) ~data:newData + else S.t ~cmp ~data:newData -let add (type elt) (type id) (m : (elt,id) t) e = - let module M = (val dict m) in - let data = data m in - let newData = N.add ~cmp:M.cmp data e in +let add m e = + let cmp, data = S.cmp m, S.data m in + let newData = N.add ~cmp data e in if newData == data then m else - t ~dict:(module M) ~data:newData + S.t ~cmp ~data:newData -let mergeMany (type elt) (type id) (m : (elt,id) t) e = - let module M = (val dict m) in - t ~dict:(module M) ~data:(N.mergeMany ~cmp:M.cmp (data m) e ) +let mergeMany m e = + let cmp = S.cmp m in + S.t ~cmp ~data:(N.mergeMany ~cmp (S.data m) e ) -let removeMany (type elt) (type id) (m : (elt,id) t) e = - let module M = (val dict m) in - t ~dict:(module M) ~data:(N.removeMany ~cmp:M.cmp (data m) e) +let removeMany m e = + let cmp = S.cmp m in + S.t ~cmp ~data:(N.removeMany ~cmp (S.data m) e) -let union (type elt) (type id) (m : (elt,id) t) (n : (elt,id) t) = - let module M = (val dict m) in - t ~data:(N.union ~cmp:M.cmp (data m) (data n)) ~dict:(module M) +let union m n = + let cmp = S.cmp m in + S.t ~data:(N.union ~cmp (S.data m) (S.data n)) ~cmp -let intersect (type elt) (type id) (m : (elt,id) t) (n : (elt,id) t) = - let module M = (val dict m) in - t ~data:(N.intersect ~cmp:M.cmp (data m) (data n)) ~dict:(module M) +let intersect m n = + let cmp = S.cmp m in + S.t ~data:(N.intersect ~cmp (S.data m) (S.data n)) ~cmp -let diff (type elt) (type id) (m : (elt,id) t) (n : (elt,id) t) = - let module M = (val dict m) in - t ~dict:(module M) ~data:(N.diff ~cmp:M.cmp (data m) (data n)) +let diff m n = + let cmp = S.cmp m in + S.t ~cmp ~data:(N.diff ~cmp (S.data m) (S.data n)) -let subset (type elt) (type id) (m : (elt,id) t) (n : (elt,id) t) = - let module M = (val dict m) in - N.subset ~cmp:M.cmp (data m) (data n) +let subset m n = + let cmp = S.cmp m in + N.subset ~cmp (S.data m) (S.data n) -let split (type elt) (type id) (m : (elt,id) t) e = - let module M = (val dict m) in - let (l, r), b = N.split ~cmp:M.cmp (data m) e in - (t ~dict:(module M) ~data:l, t ~dict:(module M) ~data:r), b +let split m e = + let cmp = S.cmp m in + let (l, r), b = N.split ~cmp (S.data m) e in + (S.t ~cmp ~data:l, S.t ~cmp ~data:r), b -let empty ~dict = - t ~dict ~data:N.empty +let empty (type elt) (type id) ~(dict : (elt, id) dict) = + let module M = (val dict) in + S.t ~cmp:M.cmp ~data:N.empty -let isEmpty m = N.isEmpty (data m) +let isEmpty m = N.isEmpty (S.data m) -let cmp (type elt) (type id) (m : (elt,id) t) (n : (elt,id) t) = - let module M = (val dict m) in - N.cmp ~cmp:M.cmp (data m) (data n) +let cmp m n = + let cmp = S.cmp m in + N.cmp ~cmp (S.data m) (S.data n) -let eq (type elt) (type id) (m : (elt,id) t) (n : (elt,id) t) = - let module M = (val dict m) in - N.eq ~cmp:M.cmp (data m) (data n) +let eq m n = + N.eq ~cmp:(S.cmp m) (S.data m) (S.data n) -let forEach m f = N.forEach (data m) f +let forEach m f = N.forEach (S.data m) f -let reduce m acc f = N.reduce (data m) acc f +let reduce m acc f = N.reduce (S.data m) acc f -let every m f = N.every (data m) f +let every m f = N.every (S.data m) f -let some m f = N.some (data m) f +let some m f = N.some (S.data m) f let keepBy m f = - t ~dict:(dict m) ~data:(N.keepBy (data m) f ) + S.t ~cmp:(S.cmp m) ~data:(N.keepBy (S.data m) f ) let partition m f = - let l,r = N.partition (data m) f in - let dict = dict m in - t ~data:l ~dict, t ~data:r ~dict + let l,r = N.partition (S.data m) f in + let cmp = S.cmp m in + S.t ~data:l ~cmp, S.t ~data:r ~cmp + +let size m = N.size (S.data m) +let toList m = N.toList (S.data m) +let toArray m = N.toArray (S.data m) -let size m = N.size (data m) -let toList m = N.toList (data m) -let toArray m = N.toArray (data m) +let minimum m = N.minimum (S.data m) +let minUndefined m = N.minUndefined (S.data m) +let maximum m = N.maximum (S.data m) +let maxUndefined m = N.maxUndefined (S.data m) -let minimum m = N.minimum (data m) -let minUndefined m = N.minUndefined (data m) -let maximum m = N.maximum (data m) -let maxUndefined m = N.maxUndefined (data m) +let get m e = + N.get ~cmp:(S.cmp m) (S.data m) e -let get (type elt) (type id) (m : (elt,id) t) e = - let module M = (val dict m) in - N.get ~cmp:M.cmp (data m) e +let getUndefined m e = + N.getUndefined ~cmp:(S.cmp m) (S.data m) e -let getUndefined (type elt) (type id) (m : (elt,id) t) e = - let module M = (val dict m) in - N.getUndefined ~cmp:M.cmp (data m) e +let getExn m e = + N.getExn ~cmp:(S.cmp m) (S.data m) e -let getExn (type elt) (type id) (m : (elt,id) t) e = - let module M = (val dict m) in - N.getExn ~cmp:M.cmp (data m) e +let has m e = + N.has ~cmp:(S.cmp m) (S.data m) e -let has (type elt) (type id) (m : (elt,id) t) e = - let module M = (val dict m) in - N.has ~cmp:M.cmp (data m) e +let ofSortedArrayUnsafe (type elt) (type id) xs ~(dict : (elt,id) dict ) = + let module M = (val dict) in + S.t ~cmp:M.cmp ~data:(N.ofSortedArrayUnsafe xs) -let ofSortedArrayUnsafe xs ~dict = - t ~dict ~data:(N.ofSortedArrayUnsafe xs) + + +let getData = S.data +let getDict (type elt) (type id) (m : (elt,id) t) : (elt, id) dict = + let module T = struct + type nonrec id = id + type nonrec t = elt + let cmp = S.cmp m + end in + (module T) +let packDictData (type elt) (type id) ~(dict : (elt, id) dict) ~data = + let module M = (val dict) in + S.t ~cmp:M.cmp ~data -let getData = data -let getDict = dict -let packDictData = t -let checkInvariantInternal d = N.checkInvariantInternal (data d) +let checkInvariantInternal d = N.checkInvariantInternal (S.data d) diff --git a/lib/js/bs_Set.js b/lib/js/bs_Set.js index f905e2a8270..37632c5a013 100644 --- a/lib/js/bs_Set.js +++ b/lib/js/bs_Set.js @@ -3,97 +3,98 @@ var Bs_SortedSetDict = require("./bs_SortedSetDict.js"); function ofArray(data, dict) { + var cmp = dict[/* cmp */0]; return { - dict: dict, - data: Bs_SortedSetDict.ofArray(data, dict[/* cmp */0]) + cmp: cmp, + data: Bs_SortedSetDict.ofArray(data, cmp) }; } function remove(m, e) { - var M = m.dict; + var cmp = m.cmp; var data = m.data; - var newData = Bs_SortedSetDict.remove(data, e, M[/* cmp */0]); + var newData = Bs_SortedSetDict.remove(data, e, cmp); if (newData === data) { return m; } else { return { - dict: M, + cmp: cmp, data: newData }; } } function add(m, e) { - var M = m.dict; + var cmp = m.cmp; var data = m.data; - var newData = Bs_SortedSetDict.add(data, e, M[/* cmp */0]); + var newData = Bs_SortedSetDict.add(data, e, cmp); if (newData === data) { return m; } else { return { - dict: M, + cmp: cmp, data: newData }; } } function mergeMany(m, e) { - var M = m.dict; + var cmp = m.cmp; return { - dict: M, - data: Bs_SortedSetDict.mergeMany(m.data, e, M[/* cmp */0]) + cmp: cmp, + data: Bs_SortedSetDict.mergeMany(m.data, e, cmp) }; } function removeMany(m, e) { - var M = m.dict; + var cmp = m.cmp; return { - dict: M, - data: Bs_SortedSetDict.removeMany(m.data, e, M[/* cmp */0]) + cmp: cmp, + data: Bs_SortedSetDict.removeMany(m.data, e, cmp) }; } function union(m, n) { - var M = m.dict; + var cmp = m.cmp; return { - dict: M, - data: Bs_SortedSetDict.union(m.data, n.data, M[/* cmp */0]) + cmp: cmp, + data: Bs_SortedSetDict.union(m.data, n.data, cmp) }; } function intersect(m, n) { - var M = m.dict; + var cmp = m.cmp; return { - dict: M, - data: Bs_SortedSetDict.intersect(m.data, n.data, M[/* cmp */0]) + cmp: cmp, + data: Bs_SortedSetDict.intersect(m.data, n.data, cmp) }; } function diff(m, n) { - var M = m.dict; + var cmp = m.cmp; return { - dict: M, - data: Bs_SortedSetDict.diff(m.data, n.data, M[/* cmp */0]) + cmp: cmp, + data: Bs_SortedSetDict.diff(m.data, n.data, cmp) }; } function subset(m, n) { - var M = m.dict; - return Bs_SortedSetDict.subset(m.data, n.data, M[/* cmp */0]); + var cmp = m.cmp; + return Bs_SortedSetDict.subset(m.data, n.data, cmp); } function split(m, e) { - var M = m.dict; - var match = Bs_SortedSetDict.split(m.data, e, M[/* cmp */0]); + var cmp = m.cmp; + var match = Bs_SortedSetDict.split(m.data, e, cmp); var match$1 = match[0]; return /* tuple */[ /* tuple */[ { - dict: M, + cmp: cmp, data: match$1[0] }, { - dict: M, + cmp: cmp, data: match$1[1] } ], @@ -103,7 +104,7 @@ function split(m, e) { function empty(dict) { return { - dict: dict, + cmp: dict[/* cmp */0], data: Bs_SortedSetDict.empty }; } @@ -113,13 +114,12 @@ function isEmpty(m) { } function cmp(m, n) { - var M = m.dict; - return Bs_SortedSetDict.cmp(m.data, n.data, M[/* cmp */0]); + var cmp$1 = m.cmp; + return Bs_SortedSetDict.cmp(m.data, n.data, cmp$1); } function eq(m, n) { - var M = m.dict; - return Bs_SortedSetDict.eq(m.data, n.data, M[/* cmp */0]); + return Bs_SortedSetDict.eq(m.data, n.data, m.cmp); } function forEach(m, f) { @@ -140,21 +140,21 @@ function some(m, f) { function keepBy(m, f) { return { - dict: m.dict, + cmp: m.cmp, data: Bs_SortedSetDict.keepBy(m.data, f) }; } function partition(m, f) { var match = Bs_SortedSetDict.partition(m.data, f); - var dict = m.dict; + var cmp = m.cmp; return /* tuple */[ { - dict: dict, + cmp: cmp, data: match[0] }, { - dict: dict, + cmp: cmp, data: match[1] } ]; @@ -189,28 +189,24 @@ function maxUndefined(m) { } function get(m, e) { - var M = m.dict; - return Bs_SortedSetDict.get(m.data, e, M[/* cmp */0]); + return Bs_SortedSetDict.get(m.data, e, m.cmp); } function getUndefined(m, e) { - var M = m.dict; - return Bs_SortedSetDict.getUndefined(m.data, e, M[/* cmp */0]); + return Bs_SortedSetDict.getUndefined(m.data, e, m.cmp); } function getExn(m, e) { - var M = m.dict; - return Bs_SortedSetDict.getExn(m.data, e, M[/* cmp */0]); + return Bs_SortedSetDict.getExn(m.data, e, m.cmp); } function has(m, e) { - var M = m.dict; - return Bs_SortedSetDict.has(m.data, e, M[/* cmp */0]); + return Bs_SortedSetDict.has(m.data, e, m.cmp); } function ofSortedArrayUnsafe(xs, dict) { return { - dict: dict, + cmp: dict[/* cmp */0], data: Bs_SortedSetDict.ofSortedArrayUnsafe(xs) }; } @@ -219,14 +215,15 @@ function getData(prim) { return prim.data; } -function getDict(prim) { - return prim.dict; +function getDict(m) { + var cmp = m.cmp; + return /* module */[/* cmp */cmp]; } -function packDictData(prim, prim$1) { +function packDictData(dict, data) { return { - dict: prim, - data: prim$1 + cmp: dict[/* cmp */0], + data: data }; } From 3af4dcb74ff54a6b6b22eb54c0091bb227df7d1c Mon Sep 17 00:00:00 2001 From: Hongbo Zhang Date: Sun, 28 Jan 2018 20:59:37 +0800 Subject: [PATCH 14/17] optmize setm --- jscomp/others/bs_Set.ml | 4 +- jscomp/others/bs_SetM.ml | 260 +++++++++++++++++++-------------------- lib/js/bs_SetM.js | 115 ++++++++--------- 3 files changed, 180 insertions(+), 199 deletions(-) diff --git a/jscomp/others/bs_Set.ml b/jscomp/others/bs_Set.ml index ac27fbe12eb..652b666ba2f 100644 --- a/jscomp/others/bs_Set.ml +++ b/jscomp/others/bs_Set.ml @@ -25,14 +25,14 @@ module N = Bs_SortedSetDict module A = Bs_Array -type ('k,'id) t0 = ('k, 'id) N.t + type ('key, 'id) dict = ('key, 'id) Bs_Cmp.t type ('key, 'id ) cmp = ('key, 'id) Bs_Cmp.cmp module S = struct type ('k,'id) t = { cmp: ('k, 'id) cmp; - data: ('k, 'id) t0 + data: ('k, 'id) N.t; } [@@bs.deriving abstract] end diff --git a/jscomp/others/bs_SetM.ml b/jscomp/others/bs_SetM.ml index baf11ac2e72..803d0086fff 100644 --- a/jscomp/others/bs_SetM.ml +++ b/jscomp/others/bs_SetM.ml @@ -26,18 +26,21 @@ module N = Bs_internalAVLset module A = Bs_Array -module S = Bs_Sort +module Sort = Bs_Sort -type ('k,'id) t0 = 'k N.t type ('k, 'id) dict = ('k, 'id) Bs_Cmp.t +type ('key, 'id ) cmp = ('key, 'id) Bs_Cmp.cmp -type ('elt,'id) t = - { - dict: ('elt, 'id) dict; - mutable data: 'elt N.t - } [@@bs.deriving abstract] +module S = struct + type ('elt,'id) t = + { + cmp: ('elt, 'id) cmp; + mutable data: 'elt N.t + } [@@bs.deriving abstract] +end +type ('k, 'id) t = ('k, 'id) S.t let rec removeMutateAux nt x ~cmp = @@ -68,15 +71,14 @@ let rec removeMutateAux nt x ~cmp = N.return (N.balMutate nt) end -let remove (type elt) (type id) (d : (elt,id) t) v = - let oldRoot = data d in - let module M = (val dict d) in +let remove d v = + let oldRoot = S.data d in match N.toOpt oldRoot with | None -> () | Some oldRoot2 -> - let newRoot = removeMutateAux ~cmp:M.cmp oldRoot2 v in + let newRoot = removeMutateAux ~cmp:(S.cmp d) oldRoot2 v in if newRoot != oldRoot then - dataSet d newRoot + S.dataSet d newRoot let rec removeArrayMutateAux t xs i len ~cmp = @@ -88,16 +90,15 @@ let rec removeArrayMutateAux t xs i len ~cmp = | Some t -> removeArrayMutateAux t xs (i+1) len ~cmp else N.return t -let removeMany (type elt) (type id) (d : (elt,id) t) xs = - let oldRoot = data d in +let removeMany d xs = + let oldRoot = S.data d in match N.toOpt oldRoot with | None -> () | Some nt -> let len = A.length xs in - let module M = (val dict d) in - let newRoot = removeArrayMutateAux nt xs 0 len ~cmp:M.cmp in + let newRoot = removeArrayMutateAux nt xs 0 len ~cmp:(S.cmp d) in if newRoot != oldRoot then - dataSet d newRoot + S.dataSet d newRoot let rec removeMutateCheckAux nt x removed ~cmp= @@ -131,21 +132,20 @@ let rec removeMutateCheckAux nt x removed ~cmp= -let removeCheck (type elt) (type id) (d : (elt,id) t) v = - let oldRoot = data d in +let removeCheck d v = + let oldRoot = S.data d in match N.toOpt oldRoot with | None -> false | Some oldRoot2 -> - let module M = (val dict d) in let removed = ref false in - let newRoot = removeMutateCheckAux ~cmp:M.cmp oldRoot2 v removed in + let newRoot = removeMutateCheckAux ~cmp:(S.cmp d) oldRoot2 v removed in if newRoot != oldRoot then - dataSet d newRoot ; + S.dataSet d newRoot ; !removed -let rec addMutateCheckAux (t : _ t0) x added ~cmp = +let rec addMutateCheckAux t x added ~cmp = match N.toOpt t with | None -> added := true; @@ -164,136 +164,132 @@ let rec addMutateCheckAux (t : _ t0) x added ~cmp = ); N.return (N.balMutate nt) -let addCheck (type elt) (type id) (m : (elt,id) t) e = - let dict, oldRoot = (dict m, data m) in - let module M = (val dict) in +let addCheck m e = + let oldRoot = S.data m in let added = ref false in - let newRoot = addMutateCheckAux ~cmp:M.cmp oldRoot e added in + let newRoot = addMutateCheckAux ~cmp:(S.cmp m) oldRoot e added in if newRoot != oldRoot then - dataSet m newRoot; + S.dataSet m newRoot; !added -let split (type elt) (type id) (d : (elt,id) t) key = - let module M = (val dict d ) in - let arr = N.toArray (data d) in - let i = S.binarySearchBy arr key (Bs_Cmp.getCmpIntenral M.cmp) in +let split d key = + let arr = N.toArray (S.data d) in + let cmp = S.cmp d in + let i = Sort.binarySearchBy arr key (Bs_Cmp.getCmpIntenral cmp) in let len = A.length arr in if i < 0 then let next = - i -1 in - (t + (S.t ~data:(N.ofSortedArrayAux arr 0 next) - ~dict:(module M) + ~cmp , - t + S.t ~data:(N.ofSortedArrayAux arr next (len - next)) - ~dict:(module M) + ~cmp ), false else - (t + (S.t ~data:(N.ofSortedArrayAux arr 0 i) - ~dict:(module M), - t + ~cmp, + S.t ~data:(N.ofSortedArrayAux arr (i+1) (len - i - 1)) - ~dict:(module M) + ~cmp ), true let keepBy d p = - t ~data:(N.filterCopy (data d) p ) ~dict:(dict d) + S.t ~data:(N.filterCopy (S.data d) p ) ~cmp:(S.cmp d) + let partition d p = - let dict = dict d in - let a, b = N.partitionCopy (data d) p in - t ~data:a ~dict, t ~data:b ~dict + let cmp = S.cmp d in + let a, b = N.partitionCopy (S.data d) p in + S.t ~data:a ~cmp, S.t ~data:b ~cmp -let empty ~dict = - t ~dict ~data:N.empty +let empty (type elt) (type id) ~(dict : (elt, id) dict) = + let module M = (val dict) in + S.t ~cmp:M.cmp ~data:N.empty let isEmpty d = - N.isEmpty (data d) + N.isEmpty (S.data d) -let singleton x ~dict = - t ~data:(N.singleton x) ~dict let minimum d = - N.minimum (data d) + N.minimum (S.data d) let minUndefined d = - N.minUndefined (data d) + N.minUndefined (S.data d) let maximum d = - N.maximum (data d) + N.maximum (S.data d) let maxUndefined d = - N.maxUndefined (data d) + N.maxUndefined (S.data d) let forEach d f = - N.forEach (data d) f + N.forEach (S.data d) f let reduce d acc cb = - N.reduce (data d) acc cb + N.reduce (S.data d) acc cb let every d p = - N.every (data d) p + N.every (S.data d) p let some d p = - N.some (data d) p + N.some (S.data d) p let size d = - N.size (data d) + N.size (S.data d) let toList d = - N.toList (data d) + N.toList (S.data d) let toArray d = - N.toArray (data d) -let ofSortedArrayUnsafe xs ~dict : _ t = - t ~data:(N.ofSortedArrayUnsafe xs) ~dict -let checkInvariantInternal d = - N.checkInvariantInternal (data d) -let cmp (type elt) (type id) (d0 : (elt,id) t) d1 = - let module M = (val dict d0) in - N.cmp ~cmp:M.cmp (data d0) (data d1) -let eq (type elt) (type id) (d0 : (elt,id) t) d1 = - let module M = (val dict d0) in - N.eq ~cmp:M.cmp (data d0) (data d1) -let get (type elt) (type id) (d : (elt,id) t) x = - let module M = (val dict d) in - N.get ~cmp:M.cmp (data d) x -let getUndefined (type elt) (type id) (d : (elt,id) t) x = - let module M = (val dict d) in - N.getUndefined ~cmp:M.cmp (data d) x -let getExn (type elt) (type id) (d : (elt,id) t) x = - let module M = (val dict d) in - N.getExn ~cmp:M.cmp (data d) x -let has (type elt) (type id) (d : (elt,id) t) x = - let module M = (val dict d) in - N.has ~cmp:M.cmp (data d) x -let ofArray (type elt) (type id) data ~(dict : (elt,id) dict) = + N.toArray (S.data d) + +let ofSortedArrayUnsafe (type elt) (type id) xs ~(dict : (elt,id) dict) : _ t = let module M = (val dict) in - t ~dict ~data:(N.ofArray ~cmp:M.cmp data) -let add (type elt) (type id) (m : (elt,id) t) e = - let module M = (val dict m) in - let oldRoot = (data m) in - let newRoot = N.addMutate ~cmp:M.cmp oldRoot e in + S.t ~data:(N.ofSortedArrayUnsafe xs) ~cmp:M.cmp + +let checkInvariantInternal d = + N.checkInvariantInternal (S.data d) + +let cmp d0 d1 = + N.cmp ~cmp:(S.cmp d0) (S.data d0) (S.data d1) + +let eq d0 d1 = + N.eq ~cmp:(S.cmp d0) (S.data d0) (S.data d1) + +let get d x = + N.get ~cmp:(S.cmp d) (S.data d) x + +let getUndefined d x = + N.getUndefined ~cmp:(S.cmp d) (S.data d) x + +let getExn d x = + N.getExn ~cmp:(S.cmp d) (S.data d) x + +let has d x = + N.has ~cmp:(S.cmp d) (S.data d) x + +let ofArray (type elt) (type id) data ~(dict : (elt,id) dict) = + let module M = (val dict) in + let cmp = M.cmp in + S.t ~cmp ~data:(N.ofArray ~cmp data) + +let add m e = + let oldRoot = S.data m in + let newRoot = N.addMutate ~cmp:(S.cmp m) oldRoot e in if newRoot != oldRoot then - dataSet m newRoot + S.dataSet m newRoot -let addArrayMutate (t : _ t0) xs ~cmp = +let addArrayMutate t xs ~cmp = let v = ref t in for i = 0 to A.length xs - 1 do v := N.addMutate !v (A.getUnsafe xs i) ~cmp done; !v -let mergeMany (type elt) (type id) (d : (elt,id) t ) xs = - let module M = (val dict d) in - dataSet d (addArrayMutate (data d) xs ~cmp:M.cmp) - - - - - +let mergeMany d xs = + S.dataSet d (addArrayMutate (S.data d) xs ~cmp:(S.cmp d)) -let subset (type elt) (type id) (a : (elt,id) t) b = - let module M = (val dict a) in - N.subset ~cmp:M.cmp (data a) (data b) +let subset a b = + N.subset ~cmp:(S.cmp a) (S.data a) (S.data b) -let intersect (type elt) (type id) (a : (elt,id) t) b : _ t = - (* let dict, dataa, datab = dict a, data a, data b in *) - let module M = (val dict a) in - match N.toOpt (data a), N.toOpt (data b) with - | None, _ -> empty (module M) - | _, None -> empty (module M) +let intersect a b : _ t = + let cmp = S.cmp a in + match N.toOpt (S.data a), N.toOpt (S.data b) with + | None, _ -> S.t ~cmp ~data:N.empty + | _, None -> S.t ~cmp ~data:N.empty | Some dataa0, Some datab0 -> let sizea, sizeb = N.lengthNode dataa0, N.lengthNode datab0 in @@ -301,7 +297,7 @@ let intersect (type elt) (type id) (a : (elt,id) t) b : _ t = let tmp = A.makeUninitializedUnsafe totalSize in ignore @@ N.fillArray dataa0 0 tmp ; ignore @@ N.fillArray datab0 sizea tmp; - let p = Bs_Cmp.getCmpIntenral M.cmp in + let p = Bs_Cmp.getCmpIntenral cmp in if (p (A.getUnsafe tmp (sizea - 1)) (A.getUnsafe tmp sizea) [@bs] < 0) || @@ -309,20 +305,20 @@ let intersect (type elt) (type id) (a : (elt,id) t) b : _ t = (A.getUnsafe tmp (totalSize - 1)) (A.getUnsafe tmp 0) [@bs] < 0 ) - then empty (module M) + then S.t ~cmp ~data:N.empty else let tmp2 = A.makeUninitializedUnsafe (min sizea sizeb) in - let k = S.intersect tmp 0 sizea tmp sizea sizeb tmp2 0 p in - t ~data:(N.ofSortedArrayAux tmp2 0 k) - ~dict:(module M) + let k = Sort.intersect tmp 0 sizea tmp sizea sizeb tmp2 0 p in + S.t ~data:(N.ofSortedArrayAux tmp2 0 k) + ~cmp -let diff (type elt) (type id) (a : (elt,id) t) b : _ t = - let module M = (val dict a) in - let dataa = data a in - match N.toOpt dataa, N.toOpt (data b) with - | None, _ -> empty (module M) +let diff a b : _ t = + let cmp = S.cmp a in + let dataa = S.data a in + match N.toOpt dataa, N.toOpt (S.data b) with + | None, _ -> S.t ~cmp ~data:N.empty | _, None -> - t ~data:(N.copy dataa) ~dict:(module M) + S.t ~data:(N.copy dataa) ~cmp | Some dataa0, Some datab0 -> let sizea, sizeb = N.lengthNode dataa0, N.lengthNode datab0 in @@ -330,7 +326,7 @@ let diff (type elt) (type id) (a : (elt,id) t) b : _ t = let tmp = A.makeUninitializedUnsafe totalSize in ignore @@ N.fillArray dataa0 0 tmp ; ignore @@ N.fillArray datab0 sizea tmp; - let p = Bs_Cmp.getCmpIntenral M.cmp in + let p = Bs_Cmp.getCmpIntenral cmp in if (p (A.getUnsafe tmp (sizea - 1)) (A.getUnsafe tmp sizea) [@bs] < 0) || @@ -338,18 +334,18 @@ let diff (type elt) (type id) (a : (elt,id) t) b : _ t = (A.getUnsafe tmp (totalSize - 1)) (A.getUnsafe tmp 0) [@bs] < 0 ) - then t ~data:(N.copy dataa) ~dict:(module M) + then S.t ~data:(N.copy dataa) ~cmp else let tmp2 = A.makeUninitializedUnsafe sizea in - let k = S.diff tmp 0 sizea tmp sizea sizeb tmp2 0 p in - t ~data:(N.ofSortedArrayAux tmp2 0 k) ~dict:(module M) + let k = Sort.diff tmp 0 sizea tmp sizea sizeb tmp2 0 p in + S.t ~data:(N.ofSortedArrayAux tmp2 0 k) ~cmp -let union (type elt) (type id) (a : (elt,id) t) b = - let module M = (val dict a) in - let dataa, datab = data a, data b in +let union a b = + let cmp = S.cmp a in + let dataa, datab = S.data a, S.data b in match N.toOpt dataa, N.toOpt datab with - | None, _ -> t ~data:(N.copy datab) ~dict:(module M) - | _, None -> t ~data:(N.copy dataa) ~dict:(module M) + | None, _ -> S.t ~data:(N.copy datab) ~cmp + | _, None -> S.t ~data:(N.copy dataa) ~cmp | Some dataa0, Some datab0 -> let sizea, sizeb = N.lengthNode dataa0, N.lengthNode datab0 in @@ -357,14 +353,14 @@ let union (type elt) (type id) (a : (elt,id) t) b = let tmp = A.makeUninitializedUnsafe totalSize in ignore @@ N.fillArray dataa0 0 tmp ; ignore @@ N.fillArray datab0 sizea tmp ; - let p = (Bs_Cmp.getCmpIntenral M.cmp) in + let p = (Bs_Cmp.getCmpIntenral cmp) in if p (A.getUnsafe tmp (sizea - 1)) (A.getUnsafe tmp sizea) [@bs] < 0 then - t ~data:(N.ofSortedArrayAux tmp 0 totalSize) ~dict:(module M) + S.t ~data:(N.ofSortedArrayAux tmp 0 totalSize) ~cmp else let tmp2 = A.makeUninitializedUnsafe totalSize in - let k = S.union tmp 0 sizea tmp sizea sizeb tmp2 0 p in - t ~data:(N.ofSortedArrayAux tmp2 0 k) ~dict:(module M) + let k = Sort.union tmp 0 sizea tmp sizea sizeb tmp2 0 p in + S.t ~data:(N.ofSortedArrayAux tmp2 0 k) ~cmp -let copy d = t ~data:(N.copy (data d)) ~dict:(dict d) +let copy d = S.t ~data:(N.copy (S.data d)) ~cmp:(S.cmp d) diff --git a/lib/js/bs_SetM.js b/lib/js/bs_SetM.js index ff77eeaa431..9602b0a4edc 100644 --- a/lib/js/bs_SetM.js +++ b/lib/js/bs_SetM.js @@ -44,9 +44,8 @@ function removeMutateAux(nt, x, cmp) { function remove(d, v) { var oldRoot = d.data; - var M = d.dict; if (oldRoot !== null) { - var newRoot = removeMutateAux(oldRoot, v, M[/* cmp */0]); + var newRoot = removeMutateAux(oldRoot, v, d.cmp); if (newRoot !== oldRoot) { d.data = newRoot; return /* () */0; @@ -83,8 +82,7 @@ function removeMany(d, xs) { var oldRoot = d.data; if (oldRoot !== null) { var len = xs.length; - var M = d.dict; - var newRoot = removeArrayMutateAux(oldRoot, xs, 0, len, M[/* cmp */0]); + var newRoot = removeArrayMutateAux(oldRoot, xs, 0, len, d.cmp); if (newRoot !== oldRoot) { d.data = newRoot; return /* () */0; @@ -139,9 +137,8 @@ function removeMutateCheckAux(nt, x, removed, cmp) { function removeCheck(d, v) { var oldRoot = d.data; if (oldRoot !== null) { - var M = d.dict; var removed = [/* false */0]; - var newRoot = removeMutateCheckAux(oldRoot, v, removed, M[/* cmp */0]); + var newRoot = removeMutateCheckAux(oldRoot, v, removed, d.cmp); if (newRoot !== oldRoot) { d.data = newRoot; } @@ -175,10 +172,9 @@ function addMutateCheckAux(t, x, added, cmp) { } function addCheck(m, e) { - var dict = m.dict; var oldRoot = m.data; var added = [/* false */0]; - var newRoot = addMutateCheckAux(oldRoot, e, added, dict[/* cmp */0]); + var newRoot = addMutateCheckAux(oldRoot, e, added, m.cmp); if (newRoot !== oldRoot) { m.data = newRoot; } @@ -186,20 +182,20 @@ function addCheck(m, e) { } function split(d, key) { - var M = d.dict; var arr = Bs_internalAVLset.toArray(d.data); - var i = Bs_Sort.binarySearchBy(arr, key, M[/* cmp */0]); + var cmp = d.cmp; + var i = Bs_Sort.binarySearchBy(arr, key, cmp); var len = arr.length; if (i < 0) { var next = (-i | 0) - 1 | 0; return /* tuple */[ /* tuple */[ { - dict: M, + cmp: cmp, data: Bs_internalAVLset.ofSortedArrayAux(arr, 0, next) }, { - dict: M, + cmp: cmp, data: Bs_internalAVLset.ofSortedArrayAux(arr, next, len - next | 0) } ], @@ -209,11 +205,11 @@ function split(d, key) { return /* tuple */[ /* tuple */[ { - dict: M, + cmp: cmp, data: Bs_internalAVLset.ofSortedArrayAux(arr, 0, i) }, { - dict: M, + cmp: cmp, data: Bs_internalAVLset.ofSortedArrayAux(arr, i + 1 | 0, (len - i | 0) - 1 | 0) } ], @@ -224,21 +220,21 @@ function split(d, key) { function keepBy(d, p) { return { - dict: d.dict, + cmp: d.cmp, data: Bs_internalAVLset.filterCopy(d.data, p) }; } function partition(d, p) { - var dict = d.dict; + var cmp = d.cmp; var match = Bs_internalAVLset.partitionCopy(d.data, p); return /* tuple */[ { - dict: dict, + cmp: cmp, data: match[0] }, { - dict: dict, + cmp: cmp, data: match[1] } ]; @@ -246,7 +242,7 @@ function partition(d, p) { function empty(dict) { return { - dict: dict, + cmp: dict[/* cmp */0], data: Bs_internalAVLset.empty }; } @@ -301,7 +297,7 @@ function toArray(d) { function ofSortedArrayUnsafe(xs, dict) { return { - dict: dict, + cmp: dict[/* cmp */0], data: Bs_internalAVLset.ofSortedArrayUnsafe(xs) }; } @@ -311,46 +307,40 @@ function checkInvariantInternal(d) { } function cmp(d0, d1) { - var M = d0.dict; - return Bs_internalAVLset.cmp(d0.data, d1.data, M[/* cmp */0]); + return Bs_internalAVLset.cmp(d0.data, d1.data, d0.cmp); } function eq(d0, d1) { - var M = d0.dict; - return Bs_internalAVLset.eq(d0.data, d1.data, M[/* cmp */0]); + return Bs_internalAVLset.eq(d0.data, d1.data, d0.cmp); } function get(d, x) { - var M = d.dict; - return Bs_internalAVLset.get(d.data, x, M[/* cmp */0]); + return Bs_internalAVLset.get(d.data, x, d.cmp); } function getUndefined(d, x) { - var M = d.dict; - return Bs_internalAVLset.getUndefined(d.data, x, M[/* cmp */0]); + return Bs_internalAVLset.getUndefined(d.data, x, d.cmp); } function getExn(d, x) { - var M = d.dict; - return Bs_internalAVLset.getExn(d.data, x, M[/* cmp */0]); + return Bs_internalAVLset.getExn(d.data, x, d.cmp); } function has(d, x) { - var M = d.dict; - return Bs_internalAVLset.has(d.data, x, M[/* cmp */0]); + return Bs_internalAVLset.has(d.data, x, d.cmp); } function ofArray(data, dict) { + var cmp = dict[/* cmp */0]; return { - dict: dict, - data: Bs_internalAVLset.ofArray(data, dict[/* cmp */0]) + cmp: cmp, + data: Bs_internalAVLset.ofArray(data, cmp) }; } function add(m, e) { - var M = m.dict; var oldRoot = m.data; - var newRoot = Bs_internalAVLset.addMutate(M[/* cmp */0], oldRoot, e); + var newRoot = Bs_internalAVLset.addMutate(m.cmp, oldRoot, e); if (newRoot !== oldRoot) { m.data = newRoot; return /* () */0; @@ -368,18 +358,16 @@ function addArrayMutate(t, xs, cmp) { } function mergeMany(d, xs) { - var M = d.dict; - d.data = addArrayMutate(d.data, xs, M[/* cmp */0]); + d.data = addArrayMutate(d.data, xs, d.cmp); return /* () */0; } function subset(a, b) { - var M = a.dict; - return Bs_internalAVLset.subset(a.data, b.data, M[/* cmp */0]); + return Bs_internalAVLset.subset(a.data, b.data, a.cmp); } function intersect(a, b) { - var M = a.dict; + var cmp = a.cmp; var match = a.data; var match$1 = b.data; if (match !== null) { @@ -390,36 +378,35 @@ function intersect(a, b) { var tmp = new Array(totalSize); Bs_internalAVLset.fillArray(match, 0, tmp); Bs_internalAVLset.fillArray(match$1, sizea, tmp); - var p = M[/* cmp */0]; - if (p(tmp[sizea - 1 | 0], tmp[sizea]) < 0 || p(tmp[totalSize - 1 | 0], tmp[0]) < 0) { + if (cmp(tmp[sizea - 1 | 0], tmp[sizea]) < 0 || cmp(tmp[totalSize - 1 | 0], tmp[0]) < 0) { return { - dict: M, + cmp: cmp, data: Bs_internalAVLset.empty }; } else { var tmp2 = new Array(sizea < sizeb ? sizea : sizeb); - var k = Bs_Sort.intersect(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0, p); + var k = Bs_Sort.intersect(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0, cmp); return { - dict: M, + cmp: cmp, data: Bs_internalAVLset.ofSortedArrayAux(tmp2, 0, k) }; } } else { return { - dict: M, + cmp: cmp, data: Bs_internalAVLset.empty }; } } else { return { - dict: M, + cmp: cmp, data: Bs_internalAVLset.empty }; } } function diff(a, b) { - var M = a.dict; + var cmp = a.cmp; var dataa = a.data; var match = b.data; if (dataa !== null) { @@ -430,36 +417,35 @@ function diff(a, b) { var tmp = new Array(totalSize); Bs_internalAVLset.fillArray(dataa, 0, tmp); Bs_internalAVLset.fillArray(match, sizea, tmp); - var p = M[/* cmp */0]; - if (p(tmp[sizea - 1 | 0], tmp[sizea]) < 0 || p(tmp[totalSize - 1 | 0], tmp[0]) < 0) { + if (cmp(tmp[sizea - 1 | 0], tmp[sizea]) < 0 || cmp(tmp[totalSize - 1 | 0], tmp[0]) < 0) { return { - dict: M, + cmp: cmp, data: Bs_internalAVLset.copy(dataa) }; } else { var tmp2 = new Array(sizea); - var k = Bs_Sort.diff(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0, p); + var k = Bs_Sort.diff(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0, cmp); return { - dict: M, + cmp: cmp, data: Bs_internalAVLset.ofSortedArrayAux(tmp2, 0, k) }; } } else { return { - dict: M, + cmp: cmp, data: Bs_internalAVLset.copy(dataa) }; } } else { return { - dict: M, + cmp: cmp, data: Bs_internalAVLset.empty }; } } function union(a, b) { - var M = a.dict; + var cmp = a.cmp; var dataa = a.data; var datab = b.data; if (dataa !== null) { @@ -470,29 +456,28 @@ function union(a, b) { var tmp = new Array(totalSize); Bs_internalAVLset.fillArray(dataa, 0, tmp); Bs_internalAVLset.fillArray(datab, sizea, tmp); - var p = M[/* cmp */0]; - if (p(tmp[sizea - 1 | 0], tmp[sizea]) < 0) { + if (cmp(tmp[sizea - 1 | 0], tmp[sizea]) < 0) { return { - dict: M, + cmp: cmp, data: Bs_internalAVLset.ofSortedArrayAux(tmp, 0, totalSize) }; } else { var tmp2 = new Array(totalSize); - var k = Bs_Sort.union(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0, p); + var k = Bs_Sort.union(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0, cmp); return { - dict: M, + cmp: cmp, data: Bs_internalAVLset.ofSortedArrayAux(tmp2, 0, k) }; } } else { return { - dict: M, + cmp: cmp, data: Bs_internalAVLset.copy(dataa) }; } } else { return { - dict: M, + cmp: cmp, data: Bs_internalAVLset.copy(datab) }; } @@ -500,7 +485,7 @@ function union(a, b) { function copy(d) { return { - dict: d.dict, + cmp: d.cmp, data: Bs_internalAVLset.copy(d.data) }; } From df4a3b1eb566852113ce3f86a0db4297a2b71983 Mon Sep 17 00:00:00 2001 From: Hongbo Zhang Date: Sun, 28 Jan 2018 21:15:57 +0800 Subject: [PATCH 15/17] optimize mapM --- jscomp/others/.depend | 3 +- jscomp/others/bs_Map.ml | 4 +- jscomp/others/bs_MapM.ml | 174 +++++++++++++----------- jscomp/stdlib/camlinternalOO.ml | 4 +- jscomp/test/bs_hashtbl_string_test.js | 2 +- jscomp/test/bs_map_test.js | 26 ++-- jscomp/test/bs_poly_map_test.js | 2 +- jscomp/test/bs_poly_mutable_set_test.js | 4 +- jscomp/test/bs_poly_set_test.js | 8 +- lib/js/bs_MapM.js | 47 +++---- lib/js/camlinternalOO.js | 8 +- 11 files changed, 141 insertions(+), 141 deletions(-) diff --git a/jscomp/others/.depend b/jscomp/others/.depend index 8caf00986ce..63306002c1d 100644 --- a/jscomp/others/.depend +++ b/jscomp/others/.depend @@ -64,8 +64,7 @@ bs_MapIntM.cmj : bs_internalMapInt.cmj bs_internalAVLtree.cmj bs_SortInt.cmj \ bs_Set.cmj : bs_SortedSetDict.cmj bs_Cmp.cmj bs_Array.cmj bs_Set.cmi bs_SetM.cmj : bs_internalAVLset.cmj bs_Sort.cmj bs_Cmp.cmj bs_Array.cmj \ bs_SetM.cmi -bs_MapM.cmj : bs_internalAVLtree.cmj bs_Sort.cmj bs_Cmp.cmj bs_Array.cmj \ - bs_MapM.cmi +bs_MapM.cmj : bs_internalAVLtree.cmj bs_Cmp.cmj bs_Array.cmj bs_MapM.cmi bs_internalSetInt.cmj : bs_internalAVLset.cmj bs_SortInt.cmj bs_Array.cmj bs_internalSetString.cmj : bs_internalAVLset.cmj bs_SortString.cmj \ bs_Array.cmj diff --git a/jscomp/others/bs_Map.ml b/jscomp/others/bs_Map.ml index 5c802f16446..57cfc2912e9 100644 --- a/jscomp/others/bs_Map.ml +++ b/jscomp/others/bs_Map.ml @@ -14,14 +14,14 @@ module N = Bs_SortedMapDict module A = Bs_Array -type ('key, 'a, 'id) t0 = ('key, 'a, 'id ) N.t + type ('key, 'id ) dict = ('key, 'id) Bs_Cmp.t type ('key, 'id ) cmp = ('key, 'id) Bs_Cmp.cmp module S = struct type ('k,'v,'id) t = { cmp: ('k,'id) cmp; - data: ('k,'v, 'id) t0 + data: ('k,'v, 'id) N.t } [@@bs.deriving abstract] end diff --git a/jscomp/others/bs_MapM.ml b/jscomp/others/bs_MapM.ml index 5f383829f4d..dc625807b2a 100644 --- a/jscomp/others/bs_MapM.ml +++ b/jscomp/others/bs_MapM.ml @@ -26,14 +26,19 @@ module N = Bs_internalAVLtree module A = Bs_Array -module S = Bs_Sort + type ('key, 'id) dict = ('key, 'id) Bs_Cmp.t +type ('key, 'id ) cmp = ('key, 'id) Bs_Cmp.cmp -type ('k, 'v, 'id) t = { - dict: ('k, 'id) dict; - mutable data: ('k, 'v) N.t -} [@@bs.deriving abstract] +module S = struct + type ('k, 'v, 'id) t = { + cmp: ('k, 'id) cmp; + mutable data: ('k, 'v) N.t + } [@@bs.deriving abstract] +end + +type ('k, 'v, 'id) t = ('k, 'v, 'id) S.t let rec removeMutateAux nt x ~cmp = let k = N.key nt in @@ -63,15 +68,14 @@ let rec removeMutateAux nt x ~cmp = N.return (N.balMutate nt) end -let remove (type elt) (type id) (d : (elt,_,id) t) k = - let oldRoot = data d in +let remove d k = + let oldRoot = S.data d in match N.toOpt oldRoot with | None -> () | Some oldRoot2 -> - let module M = (val dict d) in - let newRoot = removeMutateAux ~cmp:M.cmp oldRoot2 k in + let newRoot = removeMutateAux ~cmp:(S.cmp d) oldRoot2 k in if newRoot != oldRoot then - dataSet d newRoot + S.dataSet d newRoot let rec removeArrayMutateAux t xs i len ~cmp = @@ -83,16 +87,15 @@ let rec removeArrayMutateAux t xs i len ~cmp = | Some t -> removeArrayMutateAux t xs (i+1) len ~cmp else N.return t -let removeMany (type elt) (type id) (d : (elt,_,id) t) xs = - let oldRoot = data d in +let removeMany d xs = + let oldRoot = S.data d in match N.toOpt oldRoot with | None -> () | Some nt -> let len = A.length xs in - let module M = (val dict d) in - let newRoot = removeArrayMutateAux nt xs 0 len ~cmp:M.cmp in + let newRoot = removeArrayMutateAux nt xs 0 len ~cmp:(S.cmp d) in if newRoot != oldRoot then - dataSet d newRoot + S.dataSet d newRoot let rec updateDone t x f ~cmp = @@ -130,85 +133,92 @@ let rec updateDone t x f ~cmp = ); N.return (N.balMutate nt) -let update (type k) (type id) (t : (k,_,id) t) x f = - let oldRoot = data t in - let module M = (val dict t) in - let newRoot = updateDone oldRoot x f ~cmp:M.cmp in +let update t x f = + let oldRoot = S.data t in + let newRoot = updateDone oldRoot x f ~cmp:(S.cmp t) in if newRoot != oldRoot then - dataSet t newRoot + S.dataSet t newRoot -let empty ~dict = - t ~dict ~data:N.empty +let empty (type elt) (type id) ~(dict : (elt,id) dict) = + let module M = (val dict) in + S.t ~cmp:M.cmp ~data:N.empty + let isEmpty d = - N.isEmpty (data d) -let singleton dict x v= - t ~data:(N.singleton x v) ~dict - -let minKey m = N.minKey (data m) -let minKeyUndefined m = N.minKeyUndefined (data m) -let maxKey m = N.maxKey (data m) -let maxKeyUndefined m = N.maxKeyUndefined (data m) -let minimum m = N.minimum (data m) -let minUndefined m = N.minUndefined (data m) -let maximum m = N.maximum (data m) -let maxUndefined m = N.maxUndefined (data m) + N.isEmpty (S.data d) + + +let minKey m = N.minKey (S.data m) +let minKeyUndefined m = N.minKeyUndefined (S.data m) +let maxKey m = N.maxKey (S.data m) +let maxKeyUndefined m = N.maxKeyUndefined (S.data m) +let minimum m = N.minimum (S.data m) +let minUndefined m = N.minUndefined (S.data m) +let maximum m = N.maximum (S.data m) +let maxUndefined m = N.maxUndefined (S.data m) let forEach d f = - N.forEach (data d) f + N.forEach (S.data d) f let reduce d acc cb = - N.reduce (data d) acc cb + N.reduce (S.data d) acc cb let every d p = - N.every (data d) p + N.every (S.data d) p let some d p = - N.some (data d) p + N.some (S.data d) p let size d = - N.size (data d) + N.size (S.data d) let toList d = - N.toList (data d) + N.toList (S.data d) let toArray d = - N.toArray (data d) + N.toArray (S.data d) let keysToArray d = - N.keysToArray (data d) + N.keysToArray (S.data d) let valuesToArray d = - N.valuesToArray (data d) -let ofSortedArrayUnsafe ~dict xs : _ t = - t ~data:(N.ofSortedArrayUnsafe xs) ~dict + N.valuesToArray (S.data d) + +let ofSortedArrayUnsafe (type elt) (type id) ~(dict : (elt,id) dict) xs : _ t = + let module M = (val dict) in + S.t ~data:(N.ofSortedArrayUnsafe xs) ~cmp:M.cmp + let checkInvariantInternal d = - N.checkInvariantInternal (data d) -let cmp (type k) (type id) (m1 : (k,'v,id) t) (m2 : (k,'v,id) t) cmp = - let module X = (val dict m1) in - N.cmp ~kcmp:X.cmp ~vcmp:cmp (data m1) (data m2) -let eq (type k) (type id) (m1 : (k,'v,id) t) (m2 : (k,'v,id) t) cmp = - let module M = (val dict m1) in - N.eq ~kcmp:M.cmp ~veq:cmp (data m1) (data m2) + N.checkInvariantInternal (S.data d) + +let cmp m1 m2 cmp = + N.cmp ~kcmp:(S.cmp m1) ~vcmp:cmp (S.data m1) (S.data m2) + +let eq m1 m2 cmp = + N.eq ~kcmp:(S.cmp m1) ~veq:cmp (S.data m1) (S.data m2) + let map m f = - t ~dict:(dict m) ~data:(N.map (data m) f) + S.t ~cmp:(S.cmp m) ~data:(N.map (S.data m) f) + let mapWithKey m f = - t ~dict:(dict m) ~data:(N.mapWithKey (data m) f) -let get (type k) (type id) (m : (k,_,id) t) x = - let module X = (val dict m) in - N.get ~cmp:X.cmp (data m) x -let getUndefined (type k) (type id) (m : (k,_,id) t) x = - let module X = (val dict m) in - N.getUndefined ~cmp:X.cmp (data m) x -let getWithDefault (type k) (type id) (m : (k,_,id) t) x def = - let module X = (val dict m) in - N.getWithDefault ~cmp:X.cmp (data m) x def -let getExn (type k) (type id) (m : (k,_,id) t) x = - let module X = (val dict m) in - N.getExn ~cmp:X.cmp (data m) x -let has (type k) (type id) (m : (k,_,id) t) x = - let module X = (val dict m) in - N.has ~cmp:X.cmp (data m) x -let ofArray (type k) (type id) data ~(dict : (k,id) Bs_Cmp.t)= - let module M = (val dict ) in - t ~dict ~data:(N.ofArray ~cmp:M.cmp data) -let set (type elt) (type id) (m : (elt,_,id) t) e v = - let module M = (val dict m) in - let oldRoot = data m in - let newRoot = N.updateMutate ~cmp:M.cmp oldRoot e v in + S.t ~cmp:(S.cmp m) ~data:(N.mapWithKey (S.data m) f) + +let get m x = + N.get ~cmp:(S.cmp m) (S.data m) x + +let getUndefined m x = + N.getUndefined ~cmp:(S.cmp m) (S.data m) x + +let getWithDefault m x def = + N.getWithDefault ~cmp:(S.cmp m) (S.data m) x def + +let getExn m x = + N.getExn ~cmp:(S.cmp m) (S.data m) x + +let has m x = + N.has ~cmp:(S.cmp m) (S.data m) x + +let ofArray (type k) (type id) data ~(dict : (k,id) dict)= + let module M = (val dict ) in + let cmp = M.cmp in + S.t ~cmp ~data:(N.ofArray ~cmp data) + +let set m e v = + let oldRoot = S.data m in + let newRoot = N.updateMutate ~cmp:(S.cmp m) oldRoot e v in if newRoot != oldRoot then - dataSet m newRoot + S.dataSet m newRoot let mergeArrayAux t xs ~cmp = let v = ref t in @@ -217,10 +227,10 @@ let mergeArrayAux t xs ~cmp = v := N.updateMutate !v key value ~cmp done; !v -let mergeMany (type elt) (type id) (d : (elt,_,id) t ) xs = - let module M = (val dict d) in - let oldRoot = data d in - let newRoot = mergeArrayAux oldRoot xs ~cmp:M.cmp in + +let mergeMany d xs = + let oldRoot = S.data d in + let newRoot = mergeArrayAux oldRoot xs ~cmp:(S.cmp d) in if newRoot != oldRoot then - dataSet d newRoot + S.dataSet d newRoot diff --git a/jscomp/stdlib/camlinternalOO.ml b/jscomp/stdlib/camlinternalOO.ml index 3e7a3ed766d..c2d40694e37 100644 --- a/jscomp/stdlib/camlinternalOO.ml +++ b/jscomp/stdlib/camlinternalOO.ml @@ -185,7 +185,7 @@ let new_method table = let get_method_label table name = #if BS then - match Js.nullToOption (Meths.getNull table.methods_by_name name) + match Js.undefinedToOption (Meths.getUndefined table.methods_by_name name) with | Some x -> x | None -> @@ -314,7 +314,7 @@ let new_slot table = let new_variable table name = #if BS then - match Js.nullToOption (Vars.getNull table.vars name : int Js.null) with + match Js.undefinedToOption (Vars.getUndefined table.vars name : int Js.undefined) with | Some x -> x | None -> let index = new_slot table in diff --git a/jscomp/test/bs_hashtbl_string_test.js b/jscomp/test/bs_hashtbl_string_test.js index 43fa57bd479..135ab58d83b 100644 --- a/jscomp/test/bs_hashtbl_string_test.js +++ b/jscomp/test/bs_hashtbl_string_test.js @@ -136,7 +136,7 @@ function bench2(m) { function bench3(m) { var empty = { - dict: m, + cmp: m[/* cmp */0], data: Bs_SortedMapDict.empty }; var cmp = m[/* cmp */0]; diff --git a/jscomp/test/bs_map_test.js b/jscomp/test/bs_map_test.js index 7425837d420..4a13cbe71d8 100644 --- a/jscomp/test/bs_map_test.js +++ b/jscomp/test/bs_map_test.js @@ -27,7 +27,7 @@ var Icmp = /* module */[/* cmp */Caml_primitive.caml_int_compare]; var Icmp2 = /* module */[/* cmp */Caml_primitive.caml_int_compare]; var m0 = { - dict: Icmp, + cmp: Icmp[/* cmp */0], data: Bs_SortedMapDict.empty }; @@ -36,28 +36,30 @@ var I2 = /* module */[/* cmp */(function (x, y) { })]; var m = { - dict: Icmp2, + cmp: Icmp2[/* cmp */0], data: Bs_SortedMapDict.empty }; var m2 = { - dict: I2, + cmp: I2[/* cmp */0], data: Bs_SortedMapDict.empty }; var data = m.data; -m2.dict; +Bs_Map.getDict(m2); -var m_dict = m.dict; +var m_dict = Bs_Map.getDict(m); for(var i = 0; i <= 100000; ++i){ data = Bs_SortedMapDict.set(data, i, i, m_dict[/* cmp */0]); } +var data$1 = data; + var newm = { - dict: m_dict, - data: data + cmp: m_dict[/* cmp */0], + data: data$1 }; console.log(newm); @@ -67,21 +69,21 @@ var m11 = Bs_SortedMapDict.set(Bs_SortedMapDict.empty, 1, 1, Icmp[/* cmp */0]); console.log(m11); var v = { - dict: Icmp2, + cmp: Icmp2[/* cmp */0], data: Bs_SortedSetDict.empty }; -var m_dict$1 = m.dict; +var m_dict$1 = Bs_Map.getDict(m); var cmp = m_dict$1[/* cmp */0]; -var data$1 = v.data; +var data$2 = v.data; for(var i$1 = 0; i$1 <= 100000; ++i$1){ - data$1 = Bs_SortedSetDict.add(data$1, i$1, cmp); + data$2 = Bs_SortedSetDict.add(data$2, i$1, cmp); } -console.log(data$1); +console.log(data$2); function f(param) { return Bs_Map.ofArray(param, Icmp); diff --git a/jscomp/test/bs_poly_map_test.js b/jscomp/test/bs_poly_map_test.js index 25f1a7ef795..11291a09e5c 100644 --- a/jscomp/test/bs_poly_map_test.js +++ b/jscomp/test/bs_poly_map_test.js @@ -193,7 +193,7 @@ function acc(m, is) { } var m = { - dict: Icmp, + cmp: Icmp[/* cmp */0], data: Bs_SortedMapDict.empty }; diff --git a/jscomp/test/bs_poly_mutable_set_test.js b/jscomp/test/bs_poly_mutable_set_test.js index f554449e49b..a7141f19fa2 100644 --- a/jscomp/test/bs_poly_mutable_set_test.js +++ b/jscomp/test/bs_poly_mutable_set_test.js @@ -112,12 +112,12 @@ var dd = Bs_SetM.intersect(aa, bb); b("File \"bs_poly_mutable_set_test.ml\", line 67, characters 4-11", Bs_SetM.eq(dd, f(Array_data_util.randomRange(40, 100)))); b("File \"bs_poly_mutable_set_test.ml\", line 68, characters 4-11", Bs_SetM.eq(Bs_SetM.intersect(f(Array_data_util.randomRange(0, 20)), f(Array_data_util.randomRange(21, 40))), { - dict: IntCmp, + cmp: IntCmp[/* cmp */0], data: Bs_internalAVLset.empty })); b("File \"bs_poly_mutable_set_test.ml\", line 74, characters 4-11", Bs_SetM.eq(Bs_SetM.intersect(f(Array_data_util.randomRange(21, 40)), f(Array_data_util.randomRange(0, 20))), { - dict: IntCmp, + cmp: IntCmp[/* cmp */0], data: Bs_internalAVLset.empty })); diff --git a/jscomp/test/bs_poly_set_test.js b/jscomp/test/bs_poly_set_test.js index 3da6516c5f8..95cccdb28c7 100644 --- a/jscomp/test/bs_poly_set_test.js +++ b/jscomp/test/bs_poly_set_test.js @@ -162,28 +162,28 @@ var u25 = Bs_Set.add(u22, 59); eq("File \"bs_poly_set_test.ml\", line 79, characters 5-12", Bs_SortedSetDict.size(u25.data), 60); var m = { - dict: IntCmp, + cmp: IntCmp[/* cmp */0], data: Bs_SortedSetDict.empty }; b("File \"bs_poly_set_test.ml\", line 80, characters 4-11", +(Bs_SortedSetDict.minimum(m.data) === /* None */0)); var m$1 = { - dict: IntCmp, + cmp: IntCmp[/* cmp */0], data: Bs_SortedSetDict.empty }; b("File \"bs_poly_set_test.ml\", line 81, characters 4-11", +(Bs_SortedSetDict.maximum(m$1.data) === /* None */0)); var m$2 = { - dict: IntCmp, + cmp: IntCmp[/* cmp */0], data: Bs_SortedSetDict.empty }; b("File \"bs_poly_set_test.ml\", line 82, characters 4-11", Caml_obj.caml_equal(Bs_SortedSetDict.minUndefined(m$2.data), undefined)); var m$3 = { - dict: IntCmp, + cmp: IntCmp[/* cmp */0], data: Bs_SortedSetDict.empty }; diff --git a/lib/js/bs_MapM.js b/lib/js/bs_MapM.js index b868d2fb72c..17488dfcd79 100644 --- a/lib/js/bs_MapM.js +++ b/lib/js/bs_MapM.js @@ -44,8 +44,7 @@ function removeMutateAux(nt, x, cmp) { function remove(d, k) { var oldRoot = d.data; if (oldRoot !== null) { - var M = d.dict; - var newRoot = removeMutateAux(oldRoot, k, M[/* cmp */0]); + var newRoot = removeMutateAux(oldRoot, k, d.cmp); if (newRoot !== oldRoot) { d.data = newRoot; return /* () */0; @@ -82,8 +81,7 @@ function removeMany(d, xs) { var oldRoot = d.data; if (oldRoot !== null) { var len = xs.length; - var M = d.dict; - var newRoot = removeArrayMutateAux(oldRoot, xs, 0, len, M[/* cmp */0]); + var newRoot = removeArrayMutateAux(oldRoot, xs, 0, len, d.cmp); if (newRoot !== oldRoot) { d.data = newRoot; return /* () */0; @@ -143,8 +141,7 @@ function updateDone(t, x, f, cmp) { function update(t, x, f) { var oldRoot = t.data; - var M = t.dict; - var newRoot = updateDone(oldRoot, x, f, M[/* cmp */0]); + var newRoot = updateDone(oldRoot, x, f, t.cmp); if (newRoot !== oldRoot) { t.data = newRoot; return /* () */0; @@ -155,7 +152,7 @@ function update(t, x, f) { function empty(dict) { return { - dict: dict, + cmp: dict[/* cmp */0], data: Bs_internalAVLtree.empty }; } @@ -237,65 +234,58 @@ function checkInvariantInternal(d) { } function cmp(m1, m2, cmp$1) { - var X = m1.dict; - return Bs_internalAVLtree.cmp(m1.data, m2.data, X[/* cmp */0], cmp$1); + return Bs_internalAVLtree.cmp(m1.data, m2.data, m1.cmp, cmp$1); } function eq(m1, m2, cmp) { - var M = m1.dict; - return Bs_internalAVLtree.eq(m1.data, m2.data, M[/* cmp */0], cmp); + return Bs_internalAVLtree.eq(m1.data, m2.data, m1.cmp, cmp); } function map(m, f) { return { - dict: m.dict, + cmp: m.cmp, data: Bs_internalAVLtree.map(m.data, f) }; } function mapWithKey(m, f) { return { - dict: m.dict, + cmp: m.cmp, data: Bs_internalAVLtree.mapWithKey(m.data, f) }; } function get(m, x) { - var X = m.dict; - return Bs_internalAVLtree.get(m.data, x, X[/* cmp */0]); + return Bs_internalAVLtree.get(m.data, x, m.cmp); } function getUndefined(m, x) { - var X = m.dict; - return Bs_internalAVLtree.getUndefined(m.data, x, X[/* cmp */0]); + return Bs_internalAVLtree.getUndefined(m.data, x, m.cmp); } function getWithDefault(m, x, def) { - var X = m.dict; - return Bs_internalAVLtree.getWithDefault(m.data, x, def, X[/* cmp */0]); + return Bs_internalAVLtree.getWithDefault(m.data, x, def, m.cmp); } function getExn(m, x) { - var X = m.dict; - return Bs_internalAVLtree.getExn(m.data, x, X[/* cmp */0]); + return Bs_internalAVLtree.getExn(m.data, x, m.cmp); } function has(m, x) { - var X = m.dict; - return Bs_internalAVLtree.has(m.data, x, X[/* cmp */0]); + return Bs_internalAVLtree.has(m.data, x, m.cmp); } function ofArray(data, dict) { + var cmp = dict[/* cmp */0]; return { - dict: dict, - data: Bs_internalAVLtree.ofArray(data, dict[/* cmp */0]) + cmp: cmp, + data: Bs_internalAVLtree.ofArray(data, cmp) }; } function set(m, e, v) { - var M = m.dict; var oldRoot = m.data; - var newRoot = Bs_internalAVLtree.updateMutate(oldRoot, e, v, M[/* cmp */0]); + var newRoot = Bs_internalAVLtree.updateMutate(oldRoot, e, v, m.cmp); if (newRoot !== oldRoot) { m.data = newRoot; return /* () */0; @@ -314,9 +304,8 @@ function mergeArrayAux(t, xs, cmp) { } function mergeMany(d, xs) { - var M = d.dict; var oldRoot = d.data; - var newRoot = mergeArrayAux(oldRoot, xs, M[/* cmp */0]); + var newRoot = mergeArrayAux(oldRoot, xs, d.cmp); if (newRoot !== oldRoot) { d.data = newRoot; return /* () */0; diff --git a/lib/js/camlinternalOO.js b/lib/js/camlinternalOO.js index 3802ae99200..83a2f24a6c8 100644 --- a/lib/js/camlinternalOO.js +++ b/lib/js/camlinternalOO.js @@ -106,8 +106,8 @@ function new_method(table) { } function get_method_label(table, name) { - var match = Bs_MapString.getNull(table[/* methods_by_name */2], name); - if (match !== null) { + var match = Bs_MapString.getUndefined(table[/* methods_by_name */2], name); + if (match !== undefined) { return match; } else { var label = new_method(table); @@ -248,8 +248,8 @@ function new_slot(table) { } function new_variable(table, name) { - var match = Bs_MapString.getNull(table[/* vars */6], name); - if (match !== null) { + var match = Bs_MapString.getUndefined(table[/* vars */6], name); + if (match !== undefined) { return match; } else { var index = new_slot(table); From ac956adf44e6cf82d1685200c841fb33ab20edb8 Mon Sep 17 00:00:00 2001 From: Hongbo Zhang Date: Mon, 29 Jan 2018 13:11:53 +0800 Subject: [PATCH 16/17] better layout for hashmap --- jscomp/others/.depend | 6 +- jscomp/others/bs_HashMap.ml | 74 +++++++------- jscomp/others/bs_HashMapInt.ml | 4 +- jscomp/others/bs_HashMapString.ml | 4 +- jscomp/others/bs_HashMultiMap.ml | 65 ++++++------- jscomp/others/bs_HashMultiMap.mli | 5 +- jscomp/others/bs_HashSet.ml | 75 ++++++--------- jscomp/others/bs_HashSet.mli | 3 +- jscomp/others/bs_HashSetInt.ml | 15 +-- jscomp/others/bs_HashSetString.ml | 15 +-- jscomp/others/bs_internalBuckets.ml | 4 +- jscomp/others/bs_internalBuckets.mli | 21 ++-- jscomp/others/bs_internalBucketsType.ml | 8 +- jscomp/others/bs_internalBucketsType.mli | 12 ++- jscomp/others/bs_internalSetBuckets.ml | 14 +-- jscomp/others/bs_internalSetBuckets.mli | 18 ++-- jscomp/others/hashmap.cppo.ml | 4 +- jscomp/others/hashset.cppo.ml | 15 +-- jscomp/test/bs_hashmap_test.js | 24 ++--- jscomp/test/bs_hashset_int_test.js | 3 +- jscomp/test/bs_hashtbl_string_test.js | 29 ++---- lib/js/bs_HashMap.js | 117 ++++++++--------------- lib/js/bs_HashMapInt.js | 8 +- lib/js/bs_HashMapString.js | 8 +- lib/js/bs_HashMultiMap.js | 88 +++++++---------- lib/js/bs_HashSet.js | 91 +++++++----------- lib/js/bs_HashSetInt.js | 16 ++-- lib/js/bs_HashSetString.js | 16 ++-- lib/js/bs_internalBuckets.js | 4 +- lib/js/bs_internalBucketsType.js | 6 +- lib/js/bs_internalSetBuckets.js | 20 ++-- 31 files changed, 354 insertions(+), 438 deletions(-) diff --git a/jscomp/others/.depend b/jscomp/others/.depend index 63306002c1d..b55cfa97919 100644 --- a/jscomp/others/.depend +++ b/jscomp/others/.depend @@ -34,11 +34,11 @@ bs_internalSetBuckets.cmj : bs_internalBucketsType.cmj bs_Array.cmj bs.cmj \ bs_internalBuckets.cmj : bs_internalBucketsType.cmj bs_Array.cmj \ bs_internalBuckets.cmi bs_HashMap.cmj : bs_internalBucketsType.cmj bs_internalBuckets.cmj \ - bs_Hash.cmj bs_Bag.cmj bs_Array.cmj bs_HashMap.cmi + bs_Hash.cmj bs_Array.cmj bs_HashMap.cmi bs_HashMultiMap.cmj : bs_internalBucketsType.cmj bs_internalBuckets.cmj \ - bs_Hash.cmj bs_Bag.cmj bs_Array.cmj bs_HashMultiMap.cmi + bs_Hash.cmj bs_Array.cmj bs_HashMultiMap.cmi bs_HashSet.cmj : bs_internalSetBuckets.cmj bs_internalBucketsType.cmj \ - bs_Hash.cmj bs_Bag.cmj bs_Array.cmj bs.cmj bs_HashSet.cmi + bs_Hash.cmj bs_Array.cmj bs.cmj bs_HashSet.cmi bs_HashSetString.cmj : bs_internalSetBuckets.cmj bs_internalBucketsType.cmj \ bs_Array.cmj bs.cmj bs_HashSetString.cmi bs_HashSetInt.cmj : bs_internalSetBuckets.cmj bs_internalBucketsType.cmj \ diff --git a/jscomp/others/bs_HashMap.ml b/jscomp/others/bs_HashMap.ml index add30a34768..da56b06b506 100644 --- a/jscomp/others/bs_HashMap.ml +++ b/jscomp/others/bs_HashMap.ml @@ -14,14 +14,14 @@ module N = Bs_internalBuckets module C = Bs_internalBucketsType -module B = Bs_Bag module A = Bs_Array -type ('a, 'b,'id) t0 = ('a,'b) N.t -type ('a,'b,'id) t = - (('a, 'id) Bs_Hash.t, - ('a,'b,'id) t0) B.bag +type ('a, 'id) eq = ('a, 'id) Bs_Hash.eq +type ('a, 'id) hash = ('a, 'id) Bs_Hash.hash +type ('a, 'id) dict = ('a, 'id) Bs_Hash.t +type ('a,'b,'id) t = + ( ('a, 'id) hash, ('a, 'id) eq, 'a, 'b) N.t @@ -176,38 +176,35 @@ let has0 ~hash ~eq h key = -let make initialize_size ~dict = - B.bag ~data:(C.make initialize_size) ~dict -let clear h = C.clear (B.data h) -let size h = C.size (B.data h) -let forEach h f = N.forEach (B.data h) f -let reduce h init f = N.reduce (B.data h) init f -let logStats h = N.logStats (B.data h) +let make (type elt) (type id) initialize_size ~(dict : (elt,id) dict) = + let module M = (val dict) in + C.make ~hash:M.hash ~eq:M.eq initialize_size + +let clear = C.clear +let size = C.size +let forEach = N.forEach +let reduce = N.reduce +let logStats = N.logStats -let set (type a) (type id) (h : (a,_,id) t) (key:a) info = - let module M = (val B.dict h) in - setDone0 ~hash:M.hash ~eq:M.eq (B.data h) key info +let set h key info = + setDone0 ~hash:(C.hash h) ~eq:(C.eq h) h key info -let remove (type a) (type id) (h : (a,_,id) t) (key : a) = - let module M = (val B.dict h) in - remove0 ~hash:M.hash ~eq:M.eq (B.data h) key +let remove h key = + remove0 ~hash:(C.hash h) ~eq:(C.eq h) h key -let get (type a) (type id) (h : (a, _, id) t) (key : a) = - let module M = (val B.dict h) in - get0 ~hash:M.hash ~eq:M.eq (B.data h) key +let get h key = + get0 ~hash:(C.hash h) ~eq:(C.eq h) h key -let has (type a) (type id) (h : (a,_,id) t) (key : a) = - let module M = (val B.dict h) in - has0 ~hash:M.hash ~eq:M.eq (B.data h) key +let has h key = + has0 ~hash:(C.hash h) ~eq:(C.eq h) h key -let keepMapInPlace h f = N.keepMapInPlace (B.data h) f +let keepMapInPlace = N.keepMapInPlace - -let toArray h = N.toArray (B.data h) +let toArray = N.toArray let ofArray0 arr ~hash ~eq = let len = A.length arr in - let v = C.make len in + let v = C.make ~hash ~eq len in for i = 0 to len - 1 do let key,value = (A.getUnsafe arr i) in setDone0 ~eq ~hash v key value @@ -223,18 +220,17 @@ let mergeArrayDone0 h arr ~hash ~eq = done let ofArray (type a) (type id) arr ~dict:(dict:(a,id) Bs_Hash.t) = - let module M = (val dict) in - B.bag ~dict ~data:M.(ofArray0 ~eq ~hash arr) - -let mergeMany (type a) (type id) (h : (a,_,id) t) arr = - let module M = (val B.dict h) in - mergeArrayDone0 ~hash:M.hash ~eq:M.eq (B.data h) arr + let module M = (val dict) in + ofArray0 ~eq:M.eq ~hash:M.hash arr + +let mergeMany h arr = + mergeArrayDone0 ~hash:(C.hash h) ~eq:(C.eq h) h arr -let copy h = B.bag ~dict:(B.dict h) ~data:(N.copy (B.data h)) -let keysToArray h = N.keysToArray (B.data h) -let valuesToArray h = N.valuesToArray (B.data h) -let getBucketHistogram h = N.getBucketHistogram (B.data h) +let copy = N.copy -let isEmpty h = C.size (B.data h) = 0 +let keysToArray = N.keysToArray +let valuesToArray = N.valuesToArray +let getBucketHistogram = N.getBucketHistogram +let isEmpty h = C.size h = 0 diff --git a/jscomp/others/bs_HashMapInt.ml b/jscomp/others/bs_HashMapInt.ml index f01b61c7fc1..4e4c03ac158 100644 --- a/jscomp/others/bs_HashMapInt.ml +++ b/jscomp/others/bs_HashMapInt.ml @@ -27,7 +27,7 @@ module C = Bs_internalBucketsType module A = Bs_Array -type 'b t = (key,'b) N.t +type 'b t = (unit, unit, key,'b) N.t let rec copyBucketReHash ~h_buckets ~ndata_tail h old_bucket = @@ -173,7 +173,7 @@ let has h key = memInBucket key bucket -let make = C.make +let make size = C.make size ~hash:() ~eq:() let clear = C.clear let size = C.size let forEach = N.forEach diff --git a/jscomp/others/bs_HashMapString.ml b/jscomp/others/bs_HashMapString.ml index edc25ab41a9..346846c1a3a 100644 --- a/jscomp/others/bs_HashMapString.ml +++ b/jscomp/others/bs_HashMapString.ml @@ -27,7 +27,7 @@ module C = Bs_internalBucketsType module A = Bs_Array -type 'b t = (key,'b) N.t +type 'b t = (unit, unit, key,'b) N.t let rec copyBucketReHash ~h_buckets ~ndata_tail h old_bucket = @@ -173,7 +173,7 @@ let has h key = memInBucket key bucket -let make = C.make +let make size = C.make size ~hash:() ~eq:() let clear = C.clear let size = C.size let forEach = N.forEach diff --git a/jscomp/others/bs_HashMultiMap.ml b/jscomp/others/bs_HashMultiMap.ml index 721410e477c..e558634fac4 100644 --- a/jscomp/others/bs_HashMultiMap.ml +++ b/jscomp/others/bs_HashMultiMap.ml @@ -14,16 +14,13 @@ module N = Bs_internalBuckets module C = Bs_internalBucketsType -module B = Bs_Bag module A = Bs_Array -type ('a, 'b,'id) t0 = ('a,'b) N.t -type ('a,'b) bucket = ('a,'b) N.bucket - -type ('a,'b,'id) t = - (('a, 'id) Bs_Hash.t, - ('a,'b,'id) t0) B.bag +type ('a, 'id) eq = ('a, 'id) Bs_Hash.eq +type ('a, 'id) hash = ('a, 'id) Bs_Hash.hash +type ('a, 'id) dict = ('a, 'id) Bs_Hash.t +type ('a, 'b,'id) t = ( ('a, 'id) hash, ('a, 'id) eq , 'a,'b) N.t let rec insert_bucket ~hash ~h_buckets ~ndata_tail h old_bucket = @@ -209,42 +206,36 @@ let has0 ~hash ~eq h key = let make = C.make (* Wrapper *) -let create dict initialize_size = - B.bag ~data:(C.make initialize_size) ~dict -let clear h = C.clear (B.data h) +let make (type elt) (type id) initialize_size ~(dict : (elt, id) dict) = + let module M = (val dict) in + C.make initialize_size ~hash:M.hash ~eq:M.eq + +let clear = C.clear -let size h = C.size (B.data h) -let forEach h f = N.forEach (B.data h) f -let reduce h init f = N.reduce (B.data h) init f -let logStats h = N.logStats (B.data h) +let size = C.size +let forEach = N.forEach +let reduce = N.reduce +let logStats = N.logStats -let add (type a) (type id) (h : (a,_,id) t) key info = - let module M = (val B.dict h) in - add0 ~hash:M.hash (B.data h) key info +let add h key info = + add0 ~hash:(C.hash h) h key info -let remove (type a) (type id) (h : (a,_,id) t) key = - let module M = (val B.dict h) in - remove0 ~hash:M.hash ~eq:M.eq (B.data h) key +let remove h key = + remove0 ~hash:(C.hash h) ~eq:(C.eq h) h key -let removeAll (type a) (type id) (h : (a,_,id) t) key = - let module M = (val B.dict h) in - removeAll0 ~hash:M.hash ~eq:M.eq (B.data h) key +let removeAll h key = + removeAll0 ~hash:(C.hash h) ~eq:(C.eq h) h key -let get (type a) (type id) (h : (a,_,id) t) key = - let module M = (val B.dict h) in - get0 ~hash:M.hash ~eq:M.eq (B.data h) key +let get h key = + get0 ~hash:(C.hash h) ~eq:(C.eq h) h key -let getAll (type a) (type id) (h : (a,_,id) t) key = - let module M = (val B.dict h) in - getAll0 ~hash:M.hash ~eq:M.eq (B.data h) key +let getAll h key = + getAll0 ~hash:(C.hash h) ~eq:(C.eq h) h key -let replace (type a) (type id) (h : (a,_,id) t) key info = - let module M = (val B.dict h) in - replace0 ~hash:M.hash ~eq:M.eq (B.data h) key info +let replace h key info = + replace0 ~hash:(C.hash h) ~eq:(C.eq h) h key info -let has (type a) (type id) (h : (a,_,id) t) key = - let module M = (val B.dict h) in - has0 ~hash:M.hash ~eq:M.eq (B.data h) key +let has h key = + has0 ~hash:(C.hash h) ~eq:(C.eq h) h key -let keepMapInPlace h f = - N.keepMapInPlace (B.data h) f +let keepMapInPlace = N.keepMapInPlace diff --git a/jscomp/others/bs_HashMultiMap.mli b/jscomp/others/bs_HashMultiMap.mli index 9bc9c484924..7aa4034d1b7 100644 --- a/jscomp/others/bs_HashMultiMap.mli +++ b/jscomp/others/bs_HashMultiMap.mli @@ -6,8 +6,9 @@ type ('a,'b,'id) t (** The type of hash tables from type ['a] to type ['b]. *) - -val create : ('a,'id) Bs_Hash.t -> int -> ('a,'b,'id) t +type ('a, 'id) dict = ('a, 'id) Bs_Hash.t + +val make : int -> dict: ('a, 'id) dict -> ('a,'b,'id) t (** [Hashtbl.create n] creates a new, empty hash table, with initial size [n]. For best results, [n] should be on the order of the expected number of elements that will be in diff --git a/jscomp/others/bs_HashSet.ml b/jscomp/others/bs_HashSet.ml index 8636ac4947c..a0744925c8c 100644 --- a/jscomp/others/bs_HashSet.ml +++ b/jscomp/others/bs_HashSet.ml @@ -25,17 +25,13 @@ module N = Bs_internalSetBuckets module C = Bs_internalBucketsType -module B = Bs_Bag module A = Bs_Array -type ('a,'id) t0 = 'a N.t0 +type ('a, 'id) eq = ('a, 'id) Bs_Hash.eq +type ('a, 'id) hash = ('a, 'id) Bs_Hash.hash +type ('a, 'id) dict = ('a, 'id) Bs_Hash.t - -type 'a bucket = 'a N.bucket - -type ('a,'id) t = - (('a, 'id) Bs_Hash.t, - ('a,'id) t0) B.bag +type ('a,'id) t = ( ('a, 'id) hash, ('a, 'id) eq, 'a) N.t @@ -125,9 +121,9 @@ let rec addBucket ~eq h key cell = | Some n -> addBucket ~eq h key n let addDone0 - (h : (_,'id) t0) key - ~hash:(hash:(_,'id)Bs_Hash.hash) - ~eq:(eq:(_,'id) Bs_Hash.eq) + (h : (_,'id) t) key + ~hash:(hash:(_,'id) hash) + ~eq:(eq:(_,'id) eq) = let h_buckets = C.buckets h in let i = (Bs_Hash.getHashInternal hash) key [@bs] land (Array.length h_buckets - 1) in @@ -161,33 +157,30 @@ let has0 h key ~hash ~eq = memInBucket ~eq key bucket -let toArray h = N.toArray0 (B.data h) +let toArray = N.toArray (* Wrapper *) -let make dict initialize_size = - B.bag ~data:(C.make initialize_size) - ~dict -let clear h = C.clear (B.data h) +let make (type elt) (type id) initialize_size ~(dict: (elt, id) dict)= + let module M = (val dict) in + C.make initialize_size ~hash:M.hash ~eq:M.eq -let size h = C.size (B.data h) -let forEach h f = N.forEach0 (B.data h) f -let reduce h init f = N.reduce0 (B.data h) init f -let logStats h = N.logStats0 (B.data h) +let clear = C.clear +let size = C.size +let forEach = N.forEach +let reduce = N.reduce +let logStats = N.logStats -let add (type a) (type id) (h : (a,id) t) (key:a) = - let module M = (val B.dict h) in - addDone0 ~hash:M.hash ~eq:M.eq (B.data h) key +let add h key = + addDone0 ~hash:(C.hash h) ~eq:(C.eq h) h key -let remove (type a) (type id) (h : (a,id) t) (key : a) = - let module M = (val B.dict h) in - remove0 ~hash:M.hash ~eq:M.eq (B.data h) key +let remove h key = + remove0 ~hash:(C.hash h) ~eq:(C.eq h) h key -let has (type a) (type id) (h : (a,id) t) (key : a) = - let module M = (val B.dict h) in - has0 ~hash:M.hash ~eq:M.eq (B.data h) key +let has h key = + has0 ~hash:(C.hash h) ~eq:(C.eq h) h key let ofArray0 ~hash ~eq arr = - let len = Bs.Array.length arr in - let v = C.make len in + let len = A.length arr in + let v = C.make len ~hash ~eq in for i = 0 to len - 1 do addDone0 ~eq ~hash v (A.getUnsafe arr i) done ; @@ -200,21 +193,13 @@ let addArray0 ~hash ~eq h arr = addDone0 h ~eq ~hash (A.getUnsafe arr i) done -let ofArray (type a) (type id) - arr - ~dict:(dict:(a,id) Bs_Hash.t) = +let ofArray (type a) (type id) arr ~(dict:(a,id) dict) = let module M = (val dict) in - B.bag ~dict ~data:M.(ofArray0 ~eq~hash arr) - -let mergeMany (type a) (type id) (h : (a,id) t) arr = - let module M = (val B.dict h) in - addArray0 ~hash:M.hash ~eq:M.eq (B.data h) arr - + ofArray0 ~eq:M.eq ~hash:M.hash arr +let mergeMany h arr = + addArray0 ~hash:(C.hash h) ~eq:(C.eq h) h arr -let getData = B.data -let getDict = B.dict -let packDictData = B.bag -let getBucketHistogram h = N.getBucketHistogram (B.data h) +let getBucketHistogram = N.getBucketHistogram -let isEmpty h = C.size (B.data h) = 0 +let isEmpty h = C.size h = 0 diff --git a/jscomp/others/bs_HashSet.mli b/jscomp/others/bs_HashSet.mli index 96adb92350a..653374e057e 100644 --- a/jscomp/others/bs_HashSet.mli +++ b/jscomp/others/bs_HashSet.mli @@ -27,8 +27,9 @@ type ('a, 'id) t (** The type of hash tables from type ['a] to type ['b]. *) +type ('a, 'id) dict = ('a, 'id) Bs_Hash.t -val make: ('a,'id) Bs_Hash.t -> int -> ('a, 'id) t +val make: int -> dict:('a,'id) dict -> ('a, 'id) t val clear: ('a, 'id) t -> unit val isEmpty: _ t -> bool val add: ('a, 'id) t -> 'a -> unit diff --git a/jscomp/others/bs_HashSetInt.ml b/jscomp/others/bs_HashSetInt.ml index bf734491c55..56153580fd2 100644 --- a/jscomp/others/bs_HashSetInt.ml +++ b/jscomp/others/bs_HashSetInt.ml @@ -10,7 +10,8 @@ let hash (s : key) = module N = Bs_internalSetBuckets module C = Bs_internalBucketsType module A = Bs_Array -type t = key N.t0 + +type t = (unit, unit, key) N.t let rec copyBucket ~h_buckets ~ndata_tail h old_bucket = match C.toOpt old_bucket with @@ -128,18 +129,18 @@ let has h key = memInBucket key bucket -let make = C.make +let make size = C.make size ~hash:() ~eq:() let clear = C.clear let size = C.size -let forEach = N.forEach0 -let reduce = N.reduce0 -let logStats = N.logStats0 -let toArray = N.toArray0 +let forEach = N.forEach +let reduce = N.reduce +let logStats = N.logStats +let toArray = N.toArray let ofArray arr = let len = Bs.Array.length arr in - let v = make len in + let v = C.make len ~hash:() ~eq:() in for i = 0 to len - 1 do add v (A.getUnsafe arr i) done ; diff --git a/jscomp/others/bs_HashSetString.ml b/jscomp/others/bs_HashSetString.ml index e8d05701450..5683f505b73 100644 --- a/jscomp/others/bs_HashSetString.ml +++ b/jscomp/others/bs_HashSetString.ml @@ -11,7 +11,8 @@ let hash (s : key) = module N = Bs_internalSetBuckets module C = Bs_internalBucketsType module A = Bs_Array -type t = key N.t0 + +type t = (unit, unit, key) N.t let rec copyBucket ~h_buckets ~ndata_tail h old_bucket = match C.toOpt old_bucket with @@ -129,18 +130,18 @@ let has h key = memInBucket key bucket -let make = C.make +let make size = C.make size ~hash:() ~eq:() let clear = C.clear let size = C.size -let forEach = N.forEach0 -let reduce = N.reduce0 -let logStats = N.logStats0 -let toArray = N.toArray0 +let forEach = N.forEach +let reduce = N.reduce +let logStats = N.logStats +let toArray = N.toArray let ofArray arr = let len = Bs.Array.length arr in - let v = make len in + let v = C.make len ~hash:() ~eq:() in for i = 0 to len - 1 do add v (A.getUnsafe arr i) done ; diff --git a/jscomp/others/bs_internalBuckets.ml b/jscomp/others/bs_internalBuckets.ml index 8c61e002b69..eac36540c02 100644 --- a/jscomp/others/bs_internalBuckets.ml +++ b/jscomp/others/bs_internalBuckets.ml @@ -30,7 +30,7 @@ type ('a,'b) bucket = { mutable value : 'b; mutable next : ('a,'b) bucket C.opt } -and ('a, 'b) t = ('a,'b) bucket C.container +and ('hash, 'eq, 'a, 'b) t = ('hash, 'eq, ('a,'b) bucket) C.container [@@bs.deriving abstract] module A = Bs_Array @@ -44,6 +44,8 @@ type statistics = { let rec copy ( x : _ t) : _ t= C.container + ~hash:(C.hash x) + ~eq:(C.eq x) ~size:(C.size x) ~buckets:(copyBuckets (C.buckets x)) and copyBuckets ( buckets : _ bucket C.opt array) = diff --git a/jscomp/others/bs_internalBuckets.mli b/jscomp/others/bs_internalBuckets.mli index 19262e921dc..6ab6bc95271 100644 --- a/jscomp/others/bs_internalBuckets.mli +++ b/jscomp/others/bs_internalBuckets.mli @@ -29,28 +29,29 @@ type ('a,'b) bucket = { mutable value : 'b; mutable next : ('a,'b) bucket C.opt } -and ('a, 'b) t = ('a,'b) bucket C.container +and ('hash, 'eq, 'a, 'b) t = ('hash, 'eq, ('a,'b) bucket) C.container [@@bs.deriving abstract] -val copy : ('a, 'b) t -> ('a, 'b) t +val copy : ('hash, 'eq, 'a, 'b) t -> ('hash, 'eq, 'a, 'b) t -val forEach : ('a, 'b) t -> ('a -> 'b -> 'c [@bs]) -> unit +val forEach : (_, _, 'a, 'b) t -> ('a -> 'b -> 'c [@bs]) -> unit val reduce : - ('a, 'b) t -> 'c -> ('c -> 'a -> 'b -> 'c [@bs]) -> 'c -val logStats : ('a, 'b) t -> unit + (_, _, 'a, 'b) t -> 'c -> ('c -> 'a -> 'b -> 'c [@bs]) -> 'c + +val logStats : _ t -> unit val keepMapInPlace : - ('a, 'b) t -> ('a -> 'b -> 'b option [@bs]) -> unit + (_, _, 'a, 'b) t -> ('a -> 'b -> 'b option [@bs]) -> unit val fillArray : int -> ('a * 'b) array -> ('a, 'b) bucket -> int -val keysToArray : ('a, 'b) t -> 'a array +val keysToArray : (_, _, 'a, _) t -> 'a array -val valuesToArray : ('a, 'b) t -> 'b array +val valuesToArray : (_, _, _, 'b) t -> 'b array -val toArray : ('a, 'b) t -> ('a * 'b) array +val toArray : (_, _, 'a, 'b) t -> ('a * 'b) array -val getBucketHistogram : ('a,'b) t -> int array +val getBucketHistogram : _ t -> int array diff --git a/jscomp/others/bs_internalBucketsType.ml b/jscomp/others/bs_internalBucketsType.ml index 087e3130ece..72f53a93c2a 100644 --- a/jscomp/others/bs_internalBucketsType.ml +++ b/jscomp/others/bs_internalBucketsType.ml @@ -23,9 +23,11 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) type 'a opt = 'a Js.undefined -type 'c container = +type ('hash, 'eq, 'c) container = { mutable size: int; (* number of entries *) mutable buckets: 'c opt array; (* the buckets *) + hash: 'hash; + eq: 'eq } [@@bs.deriving abstract] @@ -39,11 +41,13 @@ let rec power_2_above x n = else if x * 2 < x then x (* overflow *) else power_2_above (x * 2) n -let make initialSize = +let make ~hash ~eq initialSize = let s = power_2_above 16 initialSize in container ~size:0 ~buckets:(A.makeUninitialized s) + ~hash + ~eq let clear h = sizeSet h 0; diff --git a/jscomp/others/bs_internalBucketsType.mli b/jscomp/others/bs_internalBucketsType.mli index d9ba3660d19..6dc5bb338e7 100644 --- a/jscomp/others/bs_internalBucketsType.mli +++ b/jscomp/others/bs_internalBucketsType.mli @@ -23,16 +23,22 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) type 'a opt = 'a Js.undefined -type 'c container = +type ('hash, 'eq, 'c) container = { mutable size: int; (* number of entries *) mutable buckets: 'c opt array; (* the buckets *) + hash: 'hash; + eq: 'eq; } [@@bs.deriving abstract] external toOpt : 'a opt -> 'a option = "#undefined_to_opt" external return : 'a -> 'a opt = "%identity" val emptyOpt : 'a Js.undefined -val make : int -> 'a container -val clear : 'a container -> unit +val make : + hash:'hash -> + eq:'eq -> + int -> + ('hash, 'eq, _) container +val clear : _ container -> unit diff --git a/jscomp/others/bs_internalSetBuckets.ml b/jscomp/others/bs_internalSetBuckets.ml index 186b1dc5608..823504be142 100644 --- a/jscomp/others/bs_internalSetBuckets.ml +++ b/jscomp/others/bs_internalSetBuckets.ml @@ -35,13 +35,15 @@ type 'a bucket = { mutable key : 'a; mutable next : 'a bucket C.opt } -and 'a t0 = 'a bucket C.container +and ('hash, 'eq, 'a) t = ('hash, 'eq, 'a bucket) C.container [@@bs.deriving abstract] module A = Bs_Array -let rec copy ( x : _ t0) : _ t0= +let rec copy ( x : _ t) : _ t= C.container + ~hash:(C.hash x) + ~eq:(C.eq x ) ~size:(C.size x) ~buckets:(copyBuckets (C.buckets x)) and copyBuckets ( buckets : _ bucket C.opt array) = @@ -83,7 +85,7 @@ let rec doBucketIter ~f buckets = | Some cell -> f (key cell) [@bs]; doBucketIter ~f (next cell) -let forEach0 h f = +let forEach h f = let d = C.buckets h in for i = 0 to A.length d - 1 do doBucketIter f (A.getUnsafe d i) @@ -95,7 +97,7 @@ let rec fillArray i arr cell = | None -> i + 1 | Some v -> fillArray (i + 1) arr v -let toArray0 h = +let toArray h = let d = C.buckets h in let current = ref 0 in let arr = Bs.Array.makeUninitializedUnsafe (C.size h) in @@ -117,7 +119,7 @@ let rec doBucketFold ~f b accu = | Some cell -> doBucketFold ~f (next cell) (f accu (key cell) [@bs]) -let reduce0 h init f = +let reduce h init f = let d = C.buckets h in let accu = ref init in for i = 0 to A.length d - 1 do @@ -142,7 +144,7 @@ let getBucketHistogram h = histo -let logStats0 h = +let logStats h = let histogram = getBucketHistogram h in Js.log [%obj{ bindings = C.size h; buckets = A.length (C.buckets h); diff --git a/jscomp/others/bs_internalSetBuckets.mli b/jscomp/others/bs_internalSetBuckets.mli index 4bd352d4c88..206fa821887 100644 --- a/jscomp/others/bs_internalSetBuckets.mli +++ b/jscomp/others/bs_internalSetBuckets.mli @@ -28,14 +28,18 @@ type 'a bucket = { mutable key : 'a; mutable next : 'a bucket C.opt } -and 'a t0 = 'a bucket C.container +and ('hash, 'eq, 'a) t = ('hash, 'eq, 'a bucket) C.container [@@bs.deriving abstract] -val copy: 'a t0 -> 'a t0 -val forEach0: 'a bucket C.container -> ('a -> 'b [@bs]) -> unit +val copy: ('hash, 'eq, 'a) t -> ('hash, 'eq, 'a) t +val forEach: ('hash, 'eq, 'a) t -> ('a -> unit [@bs]) -> unit + val fillArray: int -> 'a array -> 'a bucket -> int -val toArray0: 'a t0 -> 'a array -val reduce0: 'a t0 -> 'b -> ('b -> 'a -> 'b [@bs]) -> 'b -val logStats0: _ t0 -> unit -val getBucketHistogram: _ t0 -> int array +val toArray: (_,_,'a) t -> 'a array + +val reduce: (_,_,'a) t -> 'b -> ('b -> 'a -> 'b [@bs]) -> 'b + +val logStats: _ t -> unit + +val getBucketHistogram: _ t -> int array diff --git a/jscomp/others/hashmap.cppo.ml b/jscomp/others/hashmap.cppo.ml index 5c8c4104ff8..c38cdaea2de 100644 --- a/jscomp/others/hashmap.cppo.ml +++ b/jscomp/others/hashmap.cppo.ml @@ -35,7 +35,7 @@ module C = Bs_internalBucketsType module A = Bs_Array -type 'b t = (key,'b) N.t +type 'b t = (unit, unit, key,'b) N.t let rec copyBucketReHash ~h_buckets ~ndata_tail h old_bucket = @@ -181,7 +181,7 @@ let has h key = memInBucket key bucket -let make = C.make +let make size = C.make size ~hash:() ~eq:() let clear = C.clear let size = C.size let forEach = N.forEach diff --git a/jscomp/others/hashset.cppo.ml b/jscomp/others/hashset.cppo.ml index 01413c00b06..e05414fa8c5 100644 --- a/jscomp/others/hashset.cppo.ml +++ b/jscomp/others/hashset.cppo.ml @@ -20,7 +20,8 @@ let hash (s : key) = module N = Bs_internalSetBuckets module C = Bs_internalBucketsType module A = Bs_Array -type t = key N.t0 + +type t = (unit, unit, key) N.t let rec copyBucket ~h_buckets ~ndata_tail h old_bucket = match C.toOpt old_bucket with @@ -138,18 +139,18 @@ let has h key = memInBucket key bucket -let make = C.make +let make size = C.make size ~hash:() ~eq:() let clear = C.clear let size = C.size -let forEach = N.forEach0 -let reduce = N.reduce0 -let logStats = N.logStats0 -let toArray = N.toArray0 +let forEach = N.forEach +let reduce = N.reduce +let logStats = N.logStats +let toArray = N.toArray let ofArray arr = let len = Bs.Array.length arr in - let v = make len in + let v = C.make len ~hash:() ~eq:() in for i = 0 to len - 1 do add v (A.getUnsafe arr i) done ; diff --git a/jscomp/test/bs_hashmap_test.js b/jscomp/test/bs_hashmap_test.js index ee1a77ecd8f..7068b289d25 100644 --- a/jscomp/test/bs_hashmap_test.js +++ b/jscomp/test/bs_hashmap_test.js @@ -7,8 +7,6 @@ var Bs_Array = require("../../lib/js/bs_Array.js"); var Bs_HashMap = require("../../lib/js/bs_HashMap.js"); var Caml_primitive = require("../../lib/js/caml_primitive.js"); var Array_data_util = require("./array_data_util.js"); -var Bs_internalBuckets = require("../../lib/js/bs_internalBuckets.js"); -var Bs_internalBucketsType = require("../../lib/js/bs_internalBucketsType.js"); var suites = [/* [] */0]; @@ -35,10 +33,7 @@ var Y = /* module */[ /* eq */eq ]; -var empty = { - dict: Y, - data: Bs_internalBucketsType.make(30) -}; +var empty = Bs_HashMap.make(30, Y); function add(x, y) { return x + y | 0; @@ -65,7 +60,7 @@ Bs_HashMap.mergeMany(empty, /* array */[ eqx("File \"bs_hashmap_test.ml\", line 31, characters 6-13", Bs_HashMap.get(empty, 2), /* Some */[2]); -eqx("File \"bs_hashmap_test.ml\", line 32, characters 6-13", empty.data.size, 3); +eqx("File \"bs_hashmap_test.ml\", line 32, characters 6-13", empty.size, 3); var u = Bs_Array.concat(Array_data_util.randomRange(30, 100), Array_data_util.randomRange(40, 120)); @@ -73,32 +68,29 @@ var v = Bs_Array.zip(u, u); var xx = Bs_HashMap.ofArray(v, Y); -eqx("File \"bs_hashmap_test.ml\", line 40, characters 6-13", xx.data.size, 91); +eqx("File \"bs_hashmap_test.ml\", line 40, characters 6-13", xx.size, 91); -eqx("File \"bs_hashmap_test.ml\", line 41, characters 6-13", Bs_Sort.stableSortBy(Bs_internalBuckets.keysToArray(xx.data), cmp), Array_data_util.range(30, 120)); +eqx("File \"bs_hashmap_test.ml\", line 41, characters 6-13", Bs_Sort.stableSortBy(Bs_HashMap.keysToArray(xx), cmp), Array_data_util.range(30, 120)); var u$1 = Bs_Array.concat(Array_data_util.randomRange(0, 100000), Array_data_util.randomRange(0, 100)); -var v$1 = { - dict: Y, - data: Bs_internalBucketsType.make(40) -}; +var v$1 = Bs_HashMap.make(40, Y); Bs_HashMap.mergeMany(v$1, Bs_Array.zip(u$1, u$1)); -eqx("File \"bs_hashmap_test.ml\", line 47, characters 6-13", v$1.data.size, 100001); +eqx("File \"bs_hashmap_test.ml\", line 47, characters 6-13", v$1.size, 100001); for(var i = 0; i <= 1000; ++i){ Bs_HashMap.remove(v$1, i); } -eqx("File \"bs_hashmap_test.ml\", line 51, characters 6-13", v$1.data.size, 99000); +eqx("File \"bs_hashmap_test.ml\", line 51, characters 6-13", v$1.size, 99000); for(var i$1 = 0; i$1 <= 2000; ++i$1){ Bs_HashMap.remove(v$1, i$1); } -eqx("File \"bs_hashmap_test.ml\", line 55, characters 6-13", v$1.data.size, 98000); +eqx("File \"bs_hashmap_test.ml\", line 55, characters 6-13", v$1.size, 98000); b("File \"bs_hashmap_test.ml\", line 56, characters 4-11", Bs_Array.every(Array_data_util.range(2001, 100000), (function (x) { return Bs_HashMap.has(v$1, x); diff --git a/jscomp/test/bs_hashset_int_test.js b/jscomp/test/bs_hashset_int_test.js index db36ef696ab..15d61c8b6ea 100644 --- a/jscomp/test/bs_hashset_int_test.js +++ b/jscomp/test/bs_hashset_int_test.js @@ -6,6 +6,7 @@ var Bs_SetInt = require("../../lib/js/bs_SetInt.js"); var Bs_SortInt = require("../../lib/js/bs_SortInt.js"); var Bs_HashSetInt = require("../../lib/js/bs_HashSetInt.js"); var Array_data_util = require("./array_data_util.js"); +var Bs_internalBucketsType = require("../../lib/js/bs_internalBucketsType.js"); var suites = [/* [] */0]; @@ -48,7 +49,7 @@ eq("File \"bs_hashset_int_test.ml\", line 24, characters 5-12", sum2(v), 6825); var u$1 = Bs_Array.concat(Array_data_util.randomRange(0, 100000), Array_data_util.randomRange(0, 100)); -var v$1 = Bs_HashSetInt.make(40); +var v$1 = Bs_internalBucketsType.make(/* () */0, /* () */0, 40); Bs_HashSetInt.mergeMany(v$1, u$1); diff --git a/jscomp/test/bs_hashtbl_string_test.js b/jscomp/test/bs_hashtbl_string_test.js index 135ab58d83b..1185f8b23e6 100644 --- a/jscomp/test/bs_hashtbl_string_test.js +++ b/jscomp/test/bs_hashtbl_string_test.js @@ -8,7 +8,6 @@ var Bs_HashSetInt = require("../../lib/js/bs_HashSetInt.js"); var Caml_primitive = require("../../lib/js/caml_primitive.js"); var Bs_HashMapString = require("../../lib/js/bs_HashMapString.js"); var Bs_SortedMapDict = require("../../lib/js/bs_SortedMapDict.js"); -var Bs_internalBuckets = require("../../lib/js/bs_internalBuckets.js"); var Bs_internalBucketsType = require("../../lib/js/bs_internalBucketsType.js"); var Caml_builtin_exceptions = require("../../lib/js/caml_builtin_exceptions.js"); @@ -71,10 +70,7 @@ var Int = /* module */[ Int_001 ]; -var empty = { - dict: Int, - data: Bs_internalBucketsType.make(500000) -}; +var empty = Bs_HashMap.make(500000, Int); function bench() { for(var i = 0; i <= 1000000; ++i){ @@ -93,14 +89,11 @@ function bench() { } } - return Bs_internalBuckets.logStats(empty.data); + return Bs_HashMap.logStats(empty); } function bench2(m) { - var empty = { - dict: m, - data: Bs_internalBucketsType.make(1000000) - }; + var empty = Bs_HashMap.make(1000000, m); for(var i = 0; i <= 1000000; ++i){ Bs_HashMap.set(empty, "" + i, i); } @@ -120,7 +113,7 @@ function bench2(m) { for(var i$2 = 0; i$2 <= 1000000; ++i$2){ Bs_HashMap.remove(empty, "" + i$2); } - if (empty.data.size) { + if (empty.size) { throw [ Caml_builtin_exceptions.assert_failure, [ @@ -177,7 +170,7 @@ function bench3(m) { var Sx = /* module */[/* cmp */Caml_primitive.caml_string_compare]; function bench4() { - var table = Bs_HashMapString.make(1000000); + var table = Bs_internalBucketsType.make(/* () */0, /* () */0, 1000000); for(var i = 0; i <= 1000000; ++i){ Bs_HashMapString.set(table, "" + i, i); } @@ -212,10 +205,7 @@ function bench4() { } function bench5() { - var table = { - dict: Int, - data: Bs_internalBucketsType.make(1000000) - }; + var table = Bs_HashMap.make(1000000, Int); console.time("bs_hashtbl_string_test.ml 132"); for(var i = 0; i <= 1000000; ++i){ Bs_HashMap.set(table, i, i); @@ -241,7 +231,7 @@ function bench5() { Bs_HashMap.remove(table, i$2); } console.timeEnd("bs_hashtbl_string_test.ml 140"); - if (table.data.size) { + if (table.size) { throw [ Caml_builtin_exceptions.assert_failure, [ @@ -256,7 +246,7 @@ function bench5() { } function bench6() { - var table = Bs_HashMapInt.make(1000000); + var table = Bs_internalBucketsType.make(/* () */0, /* () */0, 1000000); for(var i = 0; i <= 1000000; ++i){ Bs_HashMapInt.set(table, i, i); } @@ -291,7 +281,8 @@ function bench6() { } function bench7() { - var table = Bs_HashSetInt.make(2000000); + var size = 2000000; + var table = Bs_internalBucketsType.make(/* () */0, /* () */0, size); for(var i = 0; i <= 1000000; ++i){ Bs_HashSetInt.add(table, i); } diff --git a/lib/js/bs_HashMap.js b/lib/js/bs_HashMap.js index 141ac0b767a..2e6def7352e 100644 --- a/lib/js/bs_HashMap.js +++ b/lib/js/bs_HashMap.js @@ -103,42 +103,21 @@ function setDone0(hash, eq, h, key, value) { } function make(initialize_size, dict) { - return { - dict: dict, - data: Bs_internalBucketsType.make(initialize_size) - }; + return Bs_internalBucketsType.make(dict[/* hash */0], dict[/* eq */1], initialize_size); } -function clear(h) { - return Bs_internalBucketsType.clear(h.data); -} - -function size(h) { - return h.data.size; -} - -function forEach(h, f) { - return Bs_internalBuckets.forEach(h.data, f); -} - -function reduce(h, init, f) { - return Bs_internalBuckets.reduce(h.data, init, f); -} - -function logStats(h) { - return Bs_internalBuckets.logStats(h.data); +function size(prim) { + return prim.size; } function set(h, key, info) { - var M = h.dict; - return setDone0(M[/* hash */0], M[/* eq */1], h.data, key, info); + return setDone0(h.hash, h.eq, h, key, info); } function remove(h, key) { - var M = h.dict; - var hash = M[/* hash */0]; - var eq = M[/* eq */1]; - var h$1 = h.data; + var hash = h.hash; + var eq = h.eq; + var h$1 = h; var key$1 = key; var h_buckets = h$1.buckets; var i = hash(key$1) & (h_buckets.length - 1 | 0); @@ -180,10 +159,9 @@ function remove(h, key) { } function get(h, key) { - var M = h.dict; - var hash = M[/* hash */0]; - var eq = M[/* eq */1]; - var h$1 = h.data; + var hash = h.hash; + var eq = h.eq; + var h$1 = h; var key$1 = key; var h_buckets = h$1.buckets; var nid = hash(key$1) & (h_buckets.length - 1 | 0); @@ -234,10 +212,9 @@ function get(h, key) { } function has(h, key) { - var M = h.dict; - var hash = M[/* hash */0]; - var eq = M[/* eq */1]; - var h$1 = h.data; + var hash = h.hash; + var eq = h.eq; + var h$1 = h; var key$1 = key; var h_buckets = h$1.buckets; var nid = hash(key$1) & (h_buckets.length - 1 | 0); @@ -266,37 +243,24 @@ function has(h, key) { } } -function keepMapInPlace(h, f) { - return Bs_internalBuckets.keepMapInPlace(h.data, f); -} - -function toArray(h) { - return Bs_internalBuckets.toArray(h.data); -} - -function ofArray0(arr, hash, eq) { - var len = arr.length; - var v = Bs_internalBucketsType.make(len); +function ofArray(arr, dict) { + var arr$1 = arr; + var hash = dict[/* hash */0]; + var eq = dict[/* eq */1]; + var len = arr$1.length; + var v = Bs_internalBucketsType.make(hash, eq, len); for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ - var match = arr[i]; + var match = arr$1[i]; setDone0(hash, eq, v, match[0], match[1]); } return v; } -function ofArray(arr, dict) { - return { - dict: dict, - data: ofArray0(arr, dict[/* hash */0], dict[/* eq */1]) - }; -} - function mergeMany(h, arr) { - var M = h.dict; - var h$1 = h.data; + var h$1 = h; var arr$1 = arr; - var hash = M[/* hash */0]; - var eq = M[/* eq */1]; + var hash = h.hash; + var eq = h.eq; var len = arr$1.length; for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ var match = arr$1[i]; @@ -305,28 +269,29 @@ function mergeMany(h, arr) { return /* () */0; } -function copy(h) { - return { - dict: h.dict, - data: Bs_internalBuckets.copy(h.data) - }; +function isEmpty(h) { + return +(h.size === 0); } -function keysToArray(h) { - return Bs_internalBuckets.keysToArray(h.data); -} +var clear = Bs_internalBucketsType.clear; -function valuesToArray(h) { - return Bs_internalBuckets.valuesToArray(h.data); -} +var copy = Bs_internalBuckets.copy; -function getBucketHistogram(h) { - return Bs_internalBuckets.getBucketHistogram(h.data); -} +var forEach = Bs_internalBuckets.forEach; -function isEmpty(h) { - return +(h.data.size === 0); -} +var reduce = Bs_internalBuckets.reduce; + +var keepMapInPlace = Bs_internalBuckets.keepMapInPlace; + +var logStats = Bs_internalBuckets.logStats; + +var toArray = Bs_internalBuckets.toArray; + +var keysToArray = Bs_internalBuckets.keysToArray; + +var valuesToArray = Bs_internalBuckets.valuesToArray; + +var getBucketHistogram = Bs_internalBuckets.getBucketHistogram; exports.make = make; exports.clear = clear; diff --git a/lib/js/bs_HashMapInt.js b/lib/js/bs_HashMapInt.js index 8668681c785..4e04a9d0a25 100644 --- a/lib/js/bs_HashMapInt.js +++ b/lib/js/bs_HashMapInt.js @@ -218,13 +218,17 @@ function has(h, key) { } } +function make(size) { + return Bs_internalBucketsType.make(/* () */0, /* () */0, size); +} + function size(prim) { return prim.size; } function ofArray(arr) { var len = arr.length; - var v = Bs_internalBucketsType.make(len); + var v = Bs_internalBucketsType.make(/* () */0, /* () */0, len); for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ var match = arr[i]; set(v, match[0], match[1]); @@ -245,8 +249,6 @@ function isEmpty(h) { return +(h.size === 0); } -var make = Bs_internalBucketsType.make; - var clear = Bs_internalBucketsType.clear; var copy = Bs_internalBuckets.copy; diff --git a/lib/js/bs_HashMapString.js b/lib/js/bs_HashMapString.js index c3dc104962c..4c692b39293 100644 --- a/lib/js/bs_HashMapString.js +++ b/lib/js/bs_HashMapString.js @@ -218,13 +218,17 @@ function has(h, key) { } } +function make(size) { + return Bs_internalBucketsType.make(/* () */0, /* () */0, size); +} + function size(prim) { return prim.size; } function ofArray(arr) { var len = arr.length; - var v = Bs_internalBucketsType.make(len); + var v = Bs_internalBucketsType.make(/* () */0, /* () */0, len); for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ var match = arr[i]; set(v, match[0], match[1]); @@ -245,8 +249,6 @@ function isEmpty(h) { return +(h.size === 0); } -var make = Bs_internalBucketsType.make; - var clear = Bs_internalBucketsType.clear; var copy = Bs_internalBuckets.copy; diff --git a/lib/js/bs_HashMultiMap.js b/lib/js/bs_HashMultiMap.js index e9567b6d8d3..b10d28fe708 100644 --- a/lib/js/bs_HashMultiMap.js +++ b/lib/js/bs_HashMultiMap.js @@ -67,37 +67,17 @@ function replace_bucket(eq, key, info, _buckets) { }; } -function create(dict, initialize_size) { - return { - dict: dict, - data: Bs_internalBucketsType.make(initialize_size) - }; +function make(initialize_size, dict) { + return Bs_internalBucketsType.make(dict[/* hash */0], dict[/* eq */1], initialize_size); } -function clear(h) { - return Bs_internalBucketsType.clear(h.data); -} - -function size(h) { - return h.data.size; -} - -function forEach(h, f) { - return Bs_internalBuckets.forEach(h.data, f); -} - -function reduce(h, init, f) { - return Bs_internalBuckets.reduce(h.data, init, f); -} - -function logStats(h) { - return Bs_internalBuckets.logStats(h.data); +function size(prim) { + return prim.size; } function add(h, key, info) { - var M = h.dict; - var hash = M[/* hash */0]; - var h$1 = h.data; + var hash = h.hash; + var h$1 = h; var key$1 = key; var value = info; var h_buckets = h$1.buckets; @@ -119,10 +99,9 @@ function add(h, key, info) { } function remove(h, key) { - var M = h.dict; - var hash = M[/* hash */0]; - var eq = M[/* eq */1]; - var h$1 = h.data; + var hash = h.hash; + var eq = h.eq; + var h$1 = h; var key$1 = key; var h_buckets = h$1.buckets; var i = hash(key$1) & (h_buckets.length - 1 | 0); @@ -159,10 +138,9 @@ function remove(h, key) { } function removeAll(h, key) { - var M = h.dict; - var hash = M[/* hash */0]; - var eq = M[/* eq */1]; - var h$1 = h.data; + var hash = h.hash; + var eq = h.eq; + var h$1 = h; var key$1 = key; var h_buckets = h$1.buckets; var i = hash(key$1) & (h_buckets.length - 1 | 0); @@ -197,10 +175,9 @@ function removeAll(h, key) { } function get(h, key) { - var M = h.dict; - var hash = M[/* hash */0]; - var eq = M[/* eq */1]; - var h$1 = h.data; + var hash = h.hash; + var eq = h.eq; + var h$1 = h; var key$1 = key; var h_buckets = h$1.buckets; var nid = hash(key$1) & (h_buckets.length - 1 | 0); @@ -251,10 +228,9 @@ function get(h, key) { } function getAll(h, key) { - var M = h.dict; - var hash = M[/* hash */0]; - var eq = M[/* eq */1]; - var h$1 = h.data; + var hash = h.hash; + var eq = h.eq; + var h$1 = h; var key$1 = key; var find_in_bucket = function (_buckets) { while(true) { @@ -281,10 +257,9 @@ function getAll(h, key) { } function replace(h, key, info) { - var M = h.dict; - var hash = M[/* hash */0]; - var eq = M[/* eq */1]; - var h$1 = h.data; + var hash = h.hash; + var eq = h.eq; + var h$1 = h; var key$1 = key; var info$1 = info; var h_buckets = h$1.buckets; @@ -308,10 +283,9 @@ function replace(h, key, info) { } function has(h, key) { - var M = h.dict; - var hash = M[/* hash */0]; - var eq = M[/* eq */1]; - var h$1 = h.data; + var hash = h.hash; + var eq = h.eq; + var h$1 = h; var key$1 = key; var h_buckets = h$1.buckets; var nid = hash(key$1) & (h_buckets.length - 1 | 0); @@ -340,11 +314,17 @@ function has(h, key) { } } -function keepMapInPlace(h, f) { - return Bs_internalBuckets.keepMapInPlace(h.data, f); -} +var clear = Bs_internalBucketsType.clear; + +var forEach = Bs_internalBuckets.forEach; + +var reduce = Bs_internalBuckets.reduce; + +var keepMapInPlace = Bs_internalBuckets.keepMapInPlace; + +var logStats = Bs_internalBuckets.logStats; -exports.create = create; +exports.make = make; exports.clear = clear; exports.add = add; exports.get = get; diff --git a/lib/js/bs_HashSet.js b/lib/js/bs_HashSet.js index c80cfb54ec9..779bdaf5b24 100644 --- a/lib/js/bs_HashSet.js +++ b/lib/js/bs_HashSet.js @@ -90,47 +90,22 @@ function addDone0(h, key, hash, eq) { } } -function toArray(h) { - return Bs_internalSetBuckets.toArray0(h.data); +function make(initialize_size, dict) { + return Bs_internalBucketsType.make(dict[/* hash */0], dict[/* eq */1], initialize_size); } -function make(dict, initialize_size) { - return { - dict: dict, - data: Bs_internalBucketsType.make(initialize_size) - }; -} - -function clear(h) { - return Bs_internalBucketsType.clear(h.data); -} - -function size(h) { - return h.data.size; -} - -function forEach(h, f) { - return Bs_internalSetBuckets.forEach0(h.data, f); -} - -function reduce(h, init, f) { - return Bs_internalSetBuckets.reduce0(h.data, init, f); -} - -function logStats(h) { - return Bs_internalSetBuckets.logStats0(h.data); +function size(prim) { + return prim.size; } function add(h, key) { - var M = h.dict; - return addDone0(h.data, key, M[/* hash */0], M[/* eq */1]); + return addDone0(h, key, h.hash, h.eq); } function remove(h, key) { - var M = h.dict; - var hash = M[/* hash */0]; - var eq = M[/* eq */1]; - var h$1 = h.data; + var hash = h.hash; + var eq = h.eq; + var h$1 = h; var key$1 = key; var h_buckets = h$1.buckets; var i = hash(key$1) & (h_buckets.length - 1 | 0); @@ -173,11 +148,10 @@ function remove(h, key) { } function has(h, key) { - var M = h.dict; - var h$1 = h.data; + var h$1 = h; var key$1 = key; - var hash = M[/* hash */0]; - var eq = M[/* eq */1]; + var hash = h.hash; + var eq = h.eq; var h_buckets = h$1.buckets; var nid = hash(key$1) & (h_buckets.length - 1 | 0); var bucket = h_buckets[nid]; @@ -205,27 +179,22 @@ function has(h, key) { } } -function ofArray0(hash, eq, arr) { - var len = arr.length; - var v = Bs_internalBucketsType.make(len); +function ofArray(arr, dict) { + var hash = dict[/* hash */0]; + var eq = dict[/* eq */1]; + var arr$1 = arr; + var len = arr$1.length; + var v = Bs_internalBucketsType.make(hash, eq, len); for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ - addDone0(v, arr[i], hash, eq); + addDone0(v, arr$1[i], hash, eq); } return v; } -function ofArray(arr, dict) { - return { - dict: dict, - data: ofArray0(dict[/* hash */0], dict[/* eq */1], arr) - }; -} - function mergeMany(h, arr) { - var M = h.dict; - var hash = M[/* hash */0]; - var eq = M[/* eq */1]; - var h$1 = h.data; + var hash = h.hash; + var eq = h.eq; + var h$1 = h; var arr$1 = arr; var len = arr$1.length; for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ @@ -234,14 +203,22 @@ function mergeMany(h, arr) { return /* () */0; } -function getBucketHistogram(h) { - return Bs_internalSetBuckets.getBucketHistogram(h.data); -} - function isEmpty(h) { - return +(h.data.size === 0); + return +(h.size === 0); } +var clear = Bs_internalBucketsType.clear; + +var forEach = Bs_internalSetBuckets.forEach; + +var reduce = Bs_internalSetBuckets.reduce; + +var logStats = Bs_internalSetBuckets.logStats; + +var toArray = Bs_internalSetBuckets.toArray; + +var getBucketHistogram = Bs_internalSetBuckets.getBucketHistogram; + exports.make = make; exports.clear = clear; exports.isEmpty = isEmpty; diff --git a/lib/js/bs_HashSetInt.js b/lib/js/bs_HashSetInt.js index 436e6957ba5..8ea614d2866 100644 --- a/lib/js/bs_HashSetInt.js +++ b/lib/js/bs_HashSetInt.js @@ -165,13 +165,17 @@ function has(h, key) { } } +function make(size) { + return Bs_internalBucketsType.make(/* () */0, /* () */0, size); +} + function size(prim) { return prim.size; } function ofArray(arr) { var len = arr.length; - var v = Bs_internalBucketsType.make(len); + var v = Bs_internalBucketsType.make(/* () */0, /* () */0, len); for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ add(v, arr[i]); } @@ -190,19 +194,17 @@ function isEmpty(h) { return +(h.size === 0); } -var make = Bs_internalBucketsType.make; - var clear = Bs_internalBucketsType.clear; var copy = Bs_internalSetBuckets.copy; -var forEach = Bs_internalSetBuckets.forEach0; +var forEach = Bs_internalSetBuckets.forEach; -var reduce = Bs_internalSetBuckets.reduce0; +var reduce = Bs_internalSetBuckets.reduce; -var logStats = Bs_internalSetBuckets.logStats0; +var logStats = Bs_internalSetBuckets.logStats; -var toArray = Bs_internalSetBuckets.toArray0; +var toArray = Bs_internalSetBuckets.toArray; var getBucketHistogram = Bs_internalSetBuckets.getBucketHistogram; diff --git a/lib/js/bs_HashSetString.js b/lib/js/bs_HashSetString.js index 5e9df389695..b0ab09b9950 100644 --- a/lib/js/bs_HashSetString.js +++ b/lib/js/bs_HashSetString.js @@ -165,13 +165,17 @@ function has(h, key) { } } +function make(size) { + return Bs_internalBucketsType.make(/* () */0, /* () */0, size); +} + function size(prim) { return prim.size; } function ofArray(arr) { var len = arr.length; - var v = Bs_internalBucketsType.make(len); + var v = Bs_internalBucketsType.make(/* () */0, /* () */0, len); for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ add(v, arr[i]); } @@ -190,19 +194,17 @@ function isEmpty(h) { return +(h.size === 0); } -var make = Bs_internalBucketsType.make; - var clear = Bs_internalBucketsType.clear; var copy = Bs_internalSetBuckets.copy; -var forEach = Bs_internalSetBuckets.forEach0; +var forEach = Bs_internalSetBuckets.forEach; -var reduce = Bs_internalSetBuckets.reduce0; +var reduce = Bs_internalSetBuckets.reduce; -var logStats = Bs_internalSetBuckets.logStats0; +var logStats = Bs_internalSetBuckets.logStats; -var toArray = Bs_internalSetBuckets.toArray0; +var toArray = Bs_internalSetBuckets.toArray; var getBucketHistogram = Bs_internalSetBuckets.getBucketHistogram; diff --git a/lib/js/bs_internalBuckets.js b/lib/js/bs_internalBuckets.js index 43aad9faacc..3a38cc77239 100644 --- a/lib/js/bs_internalBuckets.js +++ b/lib/js/bs_internalBuckets.js @@ -50,7 +50,9 @@ function copyBuckets(buckets) { function copy(x) { return { size: x.size, - buckets: copyBuckets(x.buckets) + buckets: copyBuckets(x.buckets), + hash: x.hash, + eq: x.eq }; } diff --git a/lib/js/bs_internalBucketsType.js b/lib/js/bs_internalBucketsType.js index 1ded15a3b49..fc838a23858 100644 --- a/lib/js/bs_internalBucketsType.js +++ b/lib/js/bs_internalBucketsType.js @@ -18,11 +18,13 @@ function power_2_above(_x, n) { }; } -function make(initialSize) { +function make(hash, eq, initialSize) { var s = power_2_above(16, initialSize); return { size: 0, - buckets: new Array(s) + buckets: new Array(s), + hash: hash, + eq: eq }; } diff --git a/lib/js/bs_internalSetBuckets.js b/lib/js/bs_internalSetBuckets.js index d1001cd9051..e38b14fddfb 100644 --- a/lib/js/bs_internalSetBuckets.js +++ b/lib/js/bs_internalSetBuckets.js @@ -48,7 +48,9 @@ function copyBuckets(buckets) { function copy(x) { return { size: x.size, - buckets: copyBuckets(x.buckets) + buckets: copyBuckets(x.buckets), + hash: x.hash, + eq: x.eq }; } @@ -81,7 +83,7 @@ function doBucketIter(f, _buckets) { }; } -function forEach0(h, f) { +function forEach(h, f) { var d = h.buckets; for(var i = 0 ,i_finish = d.length - 1 | 0; i <= i_finish; ++i){ doBucketIter(f, d[i]); @@ -106,7 +108,7 @@ function fillArray(_i, arr, _cell) { }; } -function toArray0(h) { +function toArray(h) { var d = h.buckets; var current = 0; var arr = new Array(h.size); @@ -135,7 +137,7 @@ function doBucketFold(f, _b, _accu) { }; } -function reduce0(h, init, f) { +function reduce(h, init, f) { var d = h.buckets; var accu = init; for(var i = 0 ,i_finish = d.length - 1 | 0; i <= i_finish; ++i){ @@ -168,7 +170,7 @@ function getBucketHistogram(h) { return histo; } -function logStats0(h) { +function logStats(h) { var histogram = getBucketHistogram(h); console.log({ bindings: h.size, @@ -182,10 +184,10 @@ var C = 0; exports.C = C; exports.copy = copy; -exports.forEach0 = forEach0; +exports.forEach = forEach; exports.fillArray = fillArray; -exports.toArray0 = toArray0; -exports.reduce0 = reduce0; -exports.logStats0 = logStats0; +exports.toArray = toArray; +exports.reduce = reduce; +exports.logStats = logStats; exports.getBucketHistogram = getBucketHistogram; /* No side effect */ From cfa3b2b2aaebb016ea964d17be8209038eeaaac2 Mon Sep 17 00:00:00 2001 From: Hongbo Zhang Date: Mon, 29 Jan 2018 13:36:14 +0800 Subject: [PATCH 17/17] rename sort module --- jscomp/others/.depend | 51 +++--- jscomp/others/Makefile | 16 +- jscomp/others/bs.ml | 6 +- jscomp/others/bs_SetIntM.ml | 2 +- jscomp/others/bs_SetM.ml | 2 +- jscomp/others/bs_SetStringM.ml | 2 +- jscomp/others/{bs_Sort.ml => bs_SortArray.ml} | 3 + .../others/{bs_Sort.mli => bs_SortArray.mli} | 3 + .../{bs_SortInt.ml => bs_SortArrayInt.ml} | 0 .../{bs_SortInt.mli => bs_SortArrayInt.mli} | 0 ...bs_SortString.ml => bs_SortArrayString.ml} | 0 ..._SortString.mli => bs_SortArrayString.mli} | 0 jscomp/others/bs_internalAVLset.ml | 2 +- jscomp/others/bs_internalAVLtree.ml | 2 +- jscomp/others/bs_internalMapInt.ml | 2 +- jscomp/others/bs_internalMapString.ml | 2 +- jscomp/others/bs_internalSetInt.ml | 2 +- jscomp/others/bs_internalSetString.ml | 2 +- jscomp/others/internal_map.cppo.ml | 2 +- jscomp/others/internal_set.cppo.ml | 4 +- jscomp/others/setm.cppo.ml | 4 +- jscomp/test/.depend | 4 +- jscomp/test/bs_hashmap_test.js | 14 +- jscomp/test/bs_hashmap_test.ml | 3 +- jscomp/test/bs_hashset_int_test.js | 12 +- jscomp/test/bs_hashset_int_test.ml | 4 +- jscomp/test/bs_sort_test.js | 84 ++++----- jscomp/test/bs_sort_test.ml | 4 +- lib/js/bs.js | 12 +- lib/js/bs_SetIntM.js | 10 +- lib/js/bs_SetM.js | 10 +- lib/js/bs_SetStringM.js | 10 +- lib/js/{bs_Sort.js => bs_SortArray.js} | 6 + .../{bs_SortString.js => bs_SortArrayInt.js} | 162 ++++++++++-------- .../{bs_SortInt.js => bs_SortArrayString.js} | 0 lib/js/bs_internalAVLset.js | 4 +- lib/js/bs_internalAVLtree.js | 4 +- lib/js/bs_internalMapInt.js | 4 +- lib/js/bs_internalMapString.js | 4 +- lib/js/bs_internalSetInt.js | 4 +- lib/js/bs_internalSetString.js | 4 +- 41 files changed, 249 insertions(+), 217 deletions(-) rename jscomp/others/{bs_Sort.ml => bs_SortArray.ml} (99%) rename jscomp/others/{bs_Sort.mli => bs_SortArray.mli} (97%) rename jscomp/others/{bs_SortInt.ml => bs_SortArrayInt.ml} (100%) rename jscomp/others/{bs_SortInt.mli => bs_SortArrayInt.mli} (100%) rename jscomp/others/{bs_SortString.ml => bs_SortArrayString.ml} (100%) rename jscomp/others/{bs_SortString.mli => bs_SortArrayString.mli} (100%) rename lib/js/{bs_Sort.js => bs_SortArray.js} (99%) rename lib/js/{bs_SortString.js => bs_SortArrayInt.js} (82%) rename lib/js/{bs_SortInt.js => bs_SortArrayString.js} (100%) diff --git a/jscomp/others/.depend b/jscomp/others/.depend index b55cfa97919..6cd74f15164 100644 --- a/jscomp/others/.depend +++ b/jscomp/others/.depend @@ -17,16 +17,19 @@ js_console.cmj : js_result.cmj : js_result.cmi js_mapperRt.cmj : js_mapperRt.cmi bs_Array.cmj : js_math.cmj bs_Array.cmi -bs_internalAVLset.cmj : bs_Sort.cmj bs_Cmp.cmj bs_Array.cmj \ +bs_internalAVLset.cmj : bs_SortArray.cmj bs_Cmp.cmj bs_Array.cmj \ bs_internalAVLset.cmi -bs_internalAVLtree.cmj : bs_Sort.cmj bs_Cmp.cmj bs_Array.cmj \ +bs_internalAVLtree.cmj : bs_SortArray.cmj bs_Cmp.cmj bs_Array.cmj \ bs_internalAVLtree.cmi -bs_SetIntM.cmj : bs_internalSetInt.cmj bs_internalAVLset.cmj bs_SortInt.cmj \ - bs_Array.cmj bs_SetIntM.cmi +bs_SetIntM.cmj : bs_internalSetInt.cmj bs_internalAVLset.cmj \ + bs_SortArrayInt.cmj bs_Array.cmj bs_SetIntM.cmi bs_Hash.cmj : bs_Hash.cmi bs_Queue.cmj : bs_Array.cmj bs_Queue.cmi bs_List.cmj : bs_Array.cmj bs_List.cmi -bs_Sort.cmj : bs_Array.cmj bs_Sort.cmi +bs_SortArray.cmj : bs_SortArrayString.cmj bs_SortArrayInt.cmj bs_Array.cmj \ + bs_SortArray.cmi +bs_SortArrayInt.cmj : bs_Array.cmj bs_SortArrayInt.cmi +bs_SortArrayString.cmj : bs_Array.cmj bs_SortArrayString.cmi bs_Range.cmj : bs_Range.cmi bs_internalBucketsType.cmj : bs_Array.cmj bs_internalBucketsType.cmi bs_internalSetBuckets.cmj : bs_internalBucketsType.cmj bs_Array.cmj bs.cmj \ @@ -51,33 +54,33 @@ bs_SortedMapDict.cmj : bs_internalAVLtree.cmj bs_Cmp.cmj bs_Array.cmj \ bs_SortedSetDict.cmj : bs_internalAVLset.cmj bs_Cmp.cmj bs_Array.cmj \ bs_SortedSetDict.cmi bs_Map.cmj : bs_SortedMapDict.cmj bs_Cmp.cmj bs_Array.cmj bs_Map.cmi -bs_internalMapInt.cmj : bs_internalAVLtree.cmj bs_Sort.cmj bs_Array.cmj -bs_internalMapString.cmj : bs_internalAVLtree.cmj bs_Sort.cmj bs_Array.cmj +bs_internalMapInt.cmj : bs_internalAVLtree.cmj bs_SortArray.cmj bs_Array.cmj +bs_internalMapString.cmj : bs_internalAVLtree.cmj bs_SortArray.cmj \ + bs_Array.cmj bs_MapString.cmj : bs_internalMapString.cmj bs_internalAVLtree.cmj \ - bs_Sort.cmj bs_Array.cmj bs_MapString.cmi -bs_MapInt.cmj : bs_internalMapInt.cmj bs_internalAVLtree.cmj bs_Sort.cmj \ - bs_Array.cmj bs_MapInt.cmi + bs_Array.cmj bs_MapString.cmi +bs_MapInt.cmj : bs_internalMapInt.cmj bs_internalAVLtree.cmj bs_Array.cmj \ + bs_MapInt.cmi bs_MapStringM.cmj : bs_internalMapString.cmj bs_internalAVLtree.cmj \ - bs_SortString.cmj bs_Array.cmj bs_MapStringM.cmi -bs_MapIntM.cmj : bs_internalMapInt.cmj bs_internalAVLtree.cmj bs_SortInt.cmj \ - bs_Array.cmj bs_MapIntM.cmi + bs_Array.cmj bs_MapStringM.cmi +bs_MapIntM.cmj : bs_internalMapInt.cmj bs_internalAVLtree.cmj bs_Array.cmj \ + bs_MapIntM.cmi bs_Set.cmj : bs_SortedSetDict.cmj bs_Cmp.cmj bs_Array.cmj bs_Set.cmi -bs_SetM.cmj : bs_internalAVLset.cmj bs_Sort.cmj bs_Cmp.cmj bs_Array.cmj \ +bs_SetM.cmj : bs_internalAVLset.cmj bs_SortArray.cmj bs_Cmp.cmj bs_Array.cmj \ bs_SetM.cmi bs_MapM.cmj : bs_internalAVLtree.cmj bs_Cmp.cmj bs_Array.cmj bs_MapM.cmi -bs_internalSetInt.cmj : bs_internalAVLset.cmj bs_SortInt.cmj bs_Array.cmj -bs_internalSetString.cmj : bs_internalAVLset.cmj bs_SortString.cmj \ +bs_internalSetInt.cmj : bs_internalAVLset.cmj bs_SortArrayInt.cmj \ + bs_Array.cmj +bs_internalSetString.cmj : bs_internalAVLset.cmj bs_SortArrayString.cmj \ bs_Array.cmj bs_SetInt.cmj : bs_internalSetInt.cmj bs_internalAVLset.cmj bs_Array.cmj \ bs_SetInt.cmi -bs_SetIntM.cmj : bs_internalSetInt.cmj bs_internalAVLset.cmj bs_SortInt.cmj \ - bs_Array.cmj bs_SetIntM.cmi +bs_SetIntM.cmj : bs_internalSetInt.cmj bs_internalAVLset.cmj \ + bs_SortArrayInt.cmj bs_Array.cmj bs_SetIntM.cmi bs_SetString.cmj : bs_internalSetString.cmj bs_internalAVLset.cmj \ bs_Array.cmj bs_SetString.cmi bs_SetStringM.cmj : bs_internalSetString.cmj bs_internalAVLset.cmj \ - bs_SortString.cmj bs_Array.cmj bs_SetStringM.cmi -bs_SortInt.cmj : bs_Array.cmj bs_SortInt.cmi -bs_SortString.cmj : bs_Array.cmj bs_SortString.cmi + bs_SortArrayString.cmj bs_Array.cmj bs_SetStringM.cmi bs_Stack.cmj : bs_Stack.cmi node_child_process.cmj : node.cmj js_boolean.cmj : js_boolean.cmi @@ -108,7 +111,9 @@ bs_SetIntM.cmi : bs_Hash.cmi : bs_Queue.cmi : bs_List.cmi : -bs_Sort.cmi : +bs_SortArray.cmi : bs_SortArrayString.cmi bs_SortArrayInt.cmi +bs_SortArrayInt.cmi : +bs_SortArrayString.cmi : bs_Range.cmi : bs_internalBucketsType.cmi : bs_internalSetBuckets.cmi : bs_internalBucketsType.cmi @@ -133,8 +138,6 @@ bs_SetInt.cmi : bs_SetIntM.cmi : bs_SetString.cmi : bs_SetStringM.cmi : -bs_SortInt.cmi : -bs_SortString.cmi : bs_Stack.cmi : js_boolean.cmi : js_dict.cmi : diff --git a/jscomp/others/Makefile b/jscomp/others/Makefile index dfb7ed02397..a2bd8651c39 100644 --- a/jscomp/others/Makefile +++ b/jscomp/others/Makefile @@ -18,7 +18,9 @@ SOURCE_LIST= node_path node_fs node_process dict node_module js_array js_string bs_Hash\ bs_Queue\ bs_List\ - bs_Sort\ + bs_SortArray\ + bs_SortArrayInt\ + bs_SortArrayString\ bs_Range\ bs_internalBucketsType\ bs_internalSetBuckets\ @@ -50,8 +52,6 @@ SOURCE_LIST= node_path node_fs node_process dict node_module js_array js_string bs_SetIntM\ bs_SetString\ bs_SetStringM\ - bs_SortInt\ - bs_SortString\ bs_Stack\ node_child_process \ js_boolean js_math\ @@ -93,7 +93,7 @@ clean:: bs_internalSetInt.ml bs_internalSetString.ml \ bs_SetInt.ml bs_SetInt.mli bs_SetString.ml bs_SetString.mli \ bs_SetIntM.ml bs_SetIntM.mli bs_SetStringM.ml bs_SetStringM.mli\ - bs_SortInt.ml bs_SortInt.mli bs_SortString.ml bs_SortString.mli\ + bs_SortArrayInt.ml bs_SortArrayInt.mli bs_SortArrayString.ml bs_SortArrayString.mli\ bs_internalMapInt.ml bs_internalMapInt.mli \ bs_internalMapIntM.ml bs_internalMapIntM.mli \ bs_internalMapString.ml bs_internalMapString.mli\ @@ -162,13 +162,13 @@ bs_SetIntM.mli: setm.cppo.mli bs_SetStringM.mli: setm.cppo.mli cppo -D TYPE_STRING $^ > $@ -bs_SortInt.ml : sort.cppo.ml +bs_SortArrayInt.ml : sort.cppo.ml cppo -D TYPE_INT $^ >$@ -bs_SortString.ml : sort.cppo.ml +bs_SortArrayString.ml : sort.cppo.ml cppo -D TYPE_STRING $^ >$@ -bs_SortInt.mli : sort.cppo.mli +bs_SortArrayInt.mli : sort.cppo.mli cppo -D TYPE_INT $^ > $@ -bs_SortString.mli : sort.cppo.mli +bs_SortArrayString.mli : sort.cppo.mli cppo -D TYPE_STRING $^ > $@ endif diff --git a/jscomp/others/bs.ml b/jscomp/others/bs.ml index a4f8bfe1f08..f22c755e674 100644 --- a/jscomp/others/bs.ml +++ b/jscomp/others/bs.ml @@ -36,9 +36,9 @@ module HashSetInt = Bs_HashSetInt module HashSetString = Bs_HashSetString module HashMapString = Bs_HashMapString module HashMapInt = Bs_HashMapInt -module Sort = Bs_Sort -module SortInt = Bs_SortInt -module SortString = Bs_SortString +module SortArray = Bs_SortArray +module SortArrayInt = Bs_SortArrayInt +module SortArrayString = Bs_SortArrayString module Stack = Bs_Stack module Range = Bs_Range module SortedMapDict = Bs_SortedMapDict diff --git a/jscomp/others/bs_SetIntM.ml b/jscomp/others/bs_SetIntM.ml index d4639e532a4..d1d6ba4d079 100644 --- a/jscomp/others/bs_SetIntM.ml +++ b/jscomp/others/bs_SetIntM.ml @@ -1,6 +1,6 @@ # 2 "setm.cppo.ml" module I = Bs_internalSetInt -module S = Bs_SortInt +module S = Bs_SortArrayInt # 10 module N = Bs_internalAVLset module A = Bs_Array diff --git a/jscomp/others/bs_SetM.ml b/jscomp/others/bs_SetM.ml index 803d0086fff..af471d593d6 100644 --- a/jscomp/others/bs_SetM.ml +++ b/jscomp/others/bs_SetM.ml @@ -26,7 +26,7 @@ module N = Bs_internalAVLset module A = Bs_Array -module Sort = Bs_Sort +module Sort = Bs_SortArray type ('k, 'id) dict = ('k, 'id) Bs_Cmp.t diff --git a/jscomp/others/bs_SetStringM.ml b/jscomp/others/bs_SetStringM.ml index c8110052fbe..fd0c0faeae1 100644 --- a/jscomp/others/bs_SetStringM.ml +++ b/jscomp/others/bs_SetStringM.ml @@ -1,6 +1,6 @@ # 5 "setm.cppo.ml" module I = Bs_internalSetString -module S = Bs_SortString +module S = Bs_SortArrayString # 10 module N = Bs_internalAVLset module A = Bs_Array diff --git a/jscomp/others/bs_Sort.ml b/jscomp/others/bs_SortArray.ml similarity index 99% rename from jscomp/others/bs_Sort.ml rename to jscomp/others/bs_SortArray.ml index 63184ab50fc..22c0f7f689b 100644 --- a/jscomp/others/bs_Sort.ml +++ b/jscomp/others/bs_SortArray.ml @@ -292,3 +292,6 @@ let binarySearchBy sorted key cmp : int = let c2 = cmp key hi [@bs]in if c2 > 0 then - (len + 1) else binarySearchAux sorted 0 (len - 1) key cmp + +module Int = Bs_SortArrayInt +module String = Bs_SortArrayString diff --git a/jscomp/others/bs_Sort.mli b/jscomp/others/bs_SortArray.mli similarity index 97% rename from jscomp/others/bs_Sort.mli rename to jscomp/others/bs_SortArray.mli index 2ac1be66c67..4fec34378f0 100644 --- a/jscomp/others/bs_Sort.mli +++ b/jscomp/others/bs_SortArray.mli @@ -95,3 +95,6 @@ val binarySearchBy: if [key] is largeer than all elements return [- (len + 1)] since [lnot (-(len+1)) = len] *) + +module Int = Bs_SortArrayInt +module String = Bs_SortArrayString diff --git a/jscomp/others/bs_SortInt.ml b/jscomp/others/bs_SortArrayInt.ml similarity index 100% rename from jscomp/others/bs_SortInt.ml rename to jscomp/others/bs_SortArrayInt.ml diff --git a/jscomp/others/bs_SortInt.mli b/jscomp/others/bs_SortArrayInt.mli similarity index 100% rename from jscomp/others/bs_SortInt.mli rename to jscomp/others/bs_SortArrayInt.mli diff --git a/jscomp/others/bs_SortString.ml b/jscomp/others/bs_SortArrayString.ml similarity index 100% rename from jscomp/others/bs_SortString.ml rename to jscomp/others/bs_SortArrayString.ml diff --git a/jscomp/others/bs_SortString.mli b/jscomp/others/bs_SortArrayString.mli similarity index 100% rename from jscomp/others/bs_SortString.mli rename to jscomp/others/bs_SortArrayString.mli diff --git a/jscomp/others/bs_internalAVLset.ml b/jscomp/others/bs_internalAVLset.ml index b7f99e15c12..735b51de3f2 100644 --- a/jscomp/others/bs_internalAVLset.ml +++ b/jscomp/others/bs_internalAVLset.ml @@ -34,7 +34,7 @@ and 'elt t = 'elt node Js.null [@@bs.deriving abstract] module A = Bs_Array -module S = Bs_Sort +module S = Bs_SortArray external toOpt : 'a Js.null -> 'a option = "#null_to_opt" external return : 'a -> 'a Js.null = "%identity" diff --git a/jscomp/others/bs_internalAVLtree.ml b/jscomp/others/bs_internalAVLtree.ml index d0c8a131a25..90f475bf5df 100644 --- a/jscomp/others/bs_internalAVLtree.ml +++ b/jscomp/others/bs_internalAVLtree.ml @@ -26,7 +26,7 @@ and ('key, 'a) t = ('key, 'a) node Js.null type ('k, 'id) cmp = ('k, 'id) Bs_Cmp.cmp module A = Bs_Array -module S = Bs_Sort +module S = Bs_SortArray external toOpt : 'a Js.null -> 'a option = "#null_to_opt" external return : 'a -> 'a Js.null = "%identity" external empty : 'a Js.null = "#null" diff --git a/jscomp/others/bs_internalMapInt.ml b/jscomp/others/bs_internalMapInt.ml index 51acd84ef0a..f16039516f4 100644 --- a/jscomp/others/bs_internalMapInt.ml +++ b/jscomp/others/bs_internalMapInt.ml @@ -4,7 +4,7 @@ type key = int # 9 module N = Bs_internalAVLtree module A = Bs_Array -module S = Bs_Sort +module S = Bs_SortArray diff --git a/jscomp/others/bs_internalMapString.ml b/jscomp/others/bs_internalMapString.ml index bfea467a42d..17011a07aa0 100644 --- a/jscomp/others/bs_internalMapString.ml +++ b/jscomp/others/bs_internalMapString.ml @@ -4,7 +4,7 @@ type key = string # 9 module N = Bs_internalAVLtree module A = Bs_Array -module S = Bs_Sort +module S = Bs_SortArray diff --git a/jscomp/others/bs_internalSetInt.ml b/jscomp/others/bs_internalSetInt.ml index 8d2c1aa04e9..e4c129b2fc9 100644 --- a/jscomp/others/bs_internalSetInt.ml +++ b/jscomp/others/bs_internalSetInt.ml @@ -1,6 +1,6 @@ # 5 "internal_set.cppo.ml" type elt = int -module S = Bs_SortInt +module S = Bs_SortArrayInt # 12 diff --git a/jscomp/others/bs_internalSetString.ml b/jscomp/others/bs_internalSetString.ml index dc635aed824..5d7af869c08 100644 --- a/jscomp/others/bs_internalSetString.ml +++ b/jscomp/others/bs_internalSetString.ml @@ -1,6 +1,6 @@ # 2 "internal_set.cppo.ml" type elt = string -module S = Bs_SortString +module S = Bs_SortArrayString # 12 diff --git a/jscomp/others/internal_map.cppo.ml b/jscomp/others/internal_map.cppo.ml index 50292395870..dede9f44b08 100644 --- a/jscomp/others/internal_map.cppo.ml +++ b/jscomp/others/internal_map.cppo.ml @@ -8,7 +8,7 @@ type key = int module N = Bs_internalAVLtree module A = Bs_Array -module S = Bs_Sort +module S = Bs_SortArray diff --git a/jscomp/others/internal_set.cppo.ml b/jscomp/others/internal_set.cppo.ml index 67b7e45b1b3..d5f177d3b5f 100644 --- a/jscomp/others/internal_set.cppo.ml +++ b/jscomp/others/internal_set.cppo.ml @@ -1,9 +1,9 @@ #ifdef TYPE_STRING type elt = string -module S = Bs_SortString +module S = Bs_SortArrayString #elif defined TYPE_INT type elt = int -module S = Bs_SortInt +module S = Bs_SortArrayInt #else [%error "unknown type"] #endif diff --git a/jscomp/others/setm.cppo.ml b/jscomp/others/setm.cppo.ml index 704fd08532e..9568d82b54f 100644 --- a/jscomp/others/setm.cppo.ml +++ b/jscomp/others/setm.cppo.ml @@ -1,9 +1,9 @@ #ifdef TYPE_INT module I = Bs_internalSetInt -module S = Bs_SortInt +module S = Bs_SortArrayInt #elif defined TYPE_STRING module I = Bs_internalSetString -module S = Bs_SortString +module S = Bs_SortArrayString #else [%error "unknown type"] #endif diff --git a/jscomp/test/.depend b/jscomp/test/.depend index 98ddf249402..02283afbab7 100644 --- a/jscomp/test/.depend +++ b/jscomp/test/.depend @@ -93,8 +93,8 @@ bs_auto_uncurry.cmj : ../runtime/js.cmj bs_auto_uncurry_test.cmj : mt.cmj ../others/js_array.cmj ../runtime/js.cmj bs_hashmap_test.cmj : mt.cmj ../stdlib/hashtbl.cmj ../others/bs.cmj \ array_data_util.cmj -bs_hashset_int_test.cmj : mt.cmj ../others/bs_SortInt.cmj \ - ../others/bs_Array.cmj ../others/bs.cmj array_data_util.cmj +bs_hashset_int_test.cmj : mt.cmj ../others/bs_Array.cmj ../others/bs.cmj \ + array_data_util.cmj bs_hashtbl_string_test.cmj : ../stdlib/hashtbl.cmj ../others/bs.cmj bs_ignore_effect.cmj : mt.cmj bs_ignore_test.cmj : ../runtime/js.cmj diff --git a/jscomp/test/bs_hashmap_test.js b/jscomp/test/bs_hashmap_test.js index 7068b289d25..cfca8c69d2f 100644 --- a/jscomp/test/bs_hashmap_test.js +++ b/jscomp/test/bs_hashmap_test.js @@ -1,10 +1,10 @@ 'use strict'; var Mt = require("./mt.js"); -var Bs_Sort = require("../../lib/js/bs_Sort.js"); var Hashtbl = require("../../lib/js/hashtbl.js"); var Bs_Array = require("../../lib/js/bs_Array.js"); var Bs_HashMap = require("../../lib/js/bs_HashMap.js"); +var Bs_SortArray = require("../../lib/js/bs_SortArray.js"); var Caml_primitive = require("../../lib/js/caml_primitive.js"); var Array_data_util = require("./array_data_util.js"); @@ -68,9 +68,9 @@ var v = Bs_Array.zip(u, u); var xx = Bs_HashMap.ofArray(v, Y); -eqx("File \"bs_hashmap_test.ml\", line 40, characters 6-13", xx.size, 91); +eqx("File \"bs_hashmap_test.ml\", line 41, characters 6-13", xx.size, 91); -eqx("File \"bs_hashmap_test.ml\", line 41, characters 6-13", Bs_Sort.stableSortBy(Bs_HashMap.keysToArray(xx), cmp), Array_data_util.range(30, 120)); +eqx("File \"bs_hashmap_test.ml\", line 42, characters 6-13", Bs_SortArray.stableSortBy(Bs_HashMap.keysToArray(xx), cmp), Array_data_util.range(30, 120)); var u$1 = Bs_Array.concat(Array_data_util.randomRange(0, 100000), Array_data_util.randomRange(0, 100)); @@ -78,21 +78,21 @@ var v$1 = Bs_HashMap.make(40, Y); Bs_HashMap.mergeMany(v$1, Bs_Array.zip(u$1, u$1)); -eqx("File \"bs_hashmap_test.ml\", line 47, characters 6-13", v$1.size, 100001); +eqx("File \"bs_hashmap_test.ml\", line 48, characters 6-13", v$1.size, 100001); for(var i = 0; i <= 1000; ++i){ Bs_HashMap.remove(v$1, i); } -eqx("File \"bs_hashmap_test.ml\", line 51, characters 6-13", v$1.size, 99000); +eqx("File \"bs_hashmap_test.ml\", line 52, characters 6-13", v$1.size, 99000); for(var i$1 = 0; i$1 <= 2000; ++i$1){ Bs_HashMap.remove(v$1, i$1); } -eqx("File \"bs_hashmap_test.ml\", line 55, characters 6-13", v$1.size, 98000); +eqx("File \"bs_hashmap_test.ml\", line 56, characters 6-13", v$1.size, 98000); -b("File \"bs_hashmap_test.ml\", line 56, characters 4-11", Bs_Array.every(Array_data_util.range(2001, 100000), (function (x) { +b("File \"bs_hashmap_test.ml\", line 57, characters 4-11", Bs_Array.every(Array_data_util.range(2001, 100000), (function (x) { return Bs_HashMap.has(v$1, x); }))); diff --git a/jscomp/test/bs_hashmap_test.ml b/jscomp/test/bs_hashmap_test.ml index 80f4d20928f..13679ce4768 100644 --- a/jscomp/test/bs_hashmap_test.ml +++ b/jscomp/test/bs_hashmap_test.ml @@ -32,7 +32,8 @@ let () = eqx __LOC__ (N.size empty) 3 module A = Bs.Array -module So = Bs.Sort +module So = Bs.SortArray + let () = let u = I.randomRange 30 100 ++ I.randomRange 40 120 in let v = A.zip u u in diff --git a/jscomp/test/bs_hashset_int_test.js b/jscomp/test/bs_hashset_int_test.js index 15d61c8b6ea..2e5a69ca4e5 100644 --- a/jscomp/test/bs_hashset_int_test.js +++ b/jscomp/test/bs_hashset_int_test.js @@ -3,9 +3,9 @@ var Mt = require("./mt.js"); var Bs_Array = require("../../lib/js/bs_Array.js"); var Bs_SetInt = require("../../lib/js/bs_SetInt.js"); -var Bs_SortInt = require("../../lib/js/bs_SortInt.js"); var Bs_HashSetInt = require("../../lib/js/bs_HashSetInt.js"); var Array_data_util = require("./array_data_util.js"); +var Bs_SortArrayInt = require("../../lib/js/bs_SortArrayInt.js"); var Bs_internalBucketsType = require("../../lib/js/bs_internalBucketsType.js"); var suites = [/* [] */0]; @@ -71,7 +71,7 @@ var u0 = Bs_HashSetInt.ofArray(Array_data_util.randomRange(0, 100000)); var u1 = Bs_HashSetInt.copy(u0); -eq("File \"bs_hashset_int_test.ml\", line 44, characters 5-12", Bs_HashSetInt.toArray(u0), Bs_HashSetInt.toArray(u1)); +eq("File \"bs_hashset_int_test.ml\", line 46, characters 5-12", Bs_HashSetInt.toArray(u0), Bs_HashSetInt.toArray(u1)); for(var i$2 = 0; i$2 <= 2000; ++i$2){ Bs_HashSetInt.remove(u1, i$2); @@ -85,17 +85,17 @@ var v0 = Bs_Array.concat(Array_data_util.range(0, 1000), Bs_HashSetInt.toArray(u var v1 = Bs_Array.concat(Array_data_util.range(0, 2000), Bs_HashSetInt.toArray(u1)); -Bs_SortInt.stableSortInPlace(v0); +Bs_SortArrayInt.stableSortInPlace(v0); -Bs_SortInt.stableSortInPlace(v1); +Bs_SortArrayInt.stableSortInPlace(v1); -eq("File \"bs_hashset_int_test.ml\", line 55, characters 5-12", v0, v1); +eq("File \"bs_hashset_int_test.ml\", line 57, characters 5-12", v0, v1); var h = Bs_HashSetInt.ofArray(Array_data_util.randomRange(0, 1000000)); var histo = Bs_HashSetInt.getBucketHistogram(h); -b("File \"bs_hashset_int_test.ml\", line 60, characters 4-11", +(histo.length <= 10)); +b("File \"bs_hashset_int_test.ml\", line 62, characters 4-11", +(histo.length <= 10)); Mt.from_pair_suites("bs_hashset_int_test.ml", suites[0]); diff --git a/jscomp/test/bs_hashset_int_test.ml b/jscomp/test/bs_hashset_int_test.ml index de4bf0867ae..b9a4212093d 100644 --- a/jscomp/test/bs_hashset_int_test.ml +++ b/jscomp/test/bs_hashset_int_test.ml @@ -37,7 +37,9 @@ let () = done ; eq __LOC__ (N.size v ) 98_000 module A = Bs_Array -module SI = Bs_SortInt + +module SI = Bs.SortArray.Int + let () = let u0 = N.ofArray (I.randomRange 0 100_000) in let u1 = N.copy u0 in diff --git a/jscomp/test/bs_sort_test.js b/jscomp/test/bs_sort_test.js index d0e8352703e..ca2aa5b8a10 100644 --- a/jscomp/test/bs_sort_test.js +++ b/jscomp/test/bs_sort_test.js @@ -1,11 +1,11 @@ 'use strict'; var Mt = require("./mt.js"); -var Bs_Sort = require("../../lib/js/bs_Sort.js"); var Bs_Array = require("../../lib/js/bs_Array.js"); var Bs_Range = require("../../lib/js/bs_Range.js"); -var Bs_SortInt = require("../../lib/js/bs_SortInt.js"); +var Bs_SortArray = require("../../lib/js/bs_SortArray.js"); var Array_data_util = require("./array_data_util.js"); +var Bs_SortArrayInt = require("../../lib/js/bs_SortArrayInt.js"); var suites = [/* [] */0]; @@ -27,7 +27,7 @@ function unions(xs, ys) { var lenX = xs.length; var lenY = ys.length; var o = new Array(lenX + lenY | 0); - var v = Bs_Sort.union(xs, 0, lenX, ys, 0, lenY, o, 0, cmp); + var v = Bs_SortArray.union(xs, 0, lenX, ys, 0, lenY, o, 0, cmp); o.length = v; return o; } @@ -36,7 +36,7 @@ function inters(xs, ys) { var lenX = xs.length; var lenY = ys.length; var o = new Array(lenX); - var v = Bs_Sort.intersect(xs, 0, lenX, ys, 0, lenY, o, 0, cmp); + var v = Bs_SortArray.intersect(xs, 0, lenX, ys, 0, lenY, o, 0, cmp); o.length = v; return o; } @@ -45,7 +45,7 @@ function diffs(xs, ys) { var lenX = xs.length; var lenY = ys.length; var o = new Array(lenX); - var v = Bs_Sort.diff(xs, 0, lenX, ys, 0, lenY, o, 0, cmp); + var v = Bs_SortArray.diff(xs, 0, lenX, ys, 0, lenY, o, 0, cmp); o.length = v; return o; } @@ -88,26 +88,26 @@ eq("File \"bs_sort_test.ml\", line 48, characters 5-12", diffs(Array_data_util.r b("File \"bs_sort_test.ml\", line 50, characters 4-11", Bs_Range.every(0, 200, (function (i) { var v = Array_data_util.randomRange(0, i); - Bs_Sort.stableSortInPlaceBy(v, cmp); - return Bs_Sort.isSorted(v, cmp); + Bs_SortArray.stableSortInPlaceBy(v, cmp); + return Bs_SortArray.isSorted(v, cmp); }))); b("File \"bs_sort_test.ml\", line 56, characters 4-11", Bs_Range.every(0, 200, (function (i) { var v = Array_data_util.randomRange(0, i); - Bs_Sort.stableSortInPlaceBy(v, cmp); - return Bs_Sort.isSorted(v, cmp); + Bs_SortArray.stableSortInPlaceBy(v, cmp); + return Bs_SortArray.isSorted(v, cmp); }))); -b("File \"bs_sort_test.ml\", line 62, characters 4-11", Bs_Sort.isSorted(/* int array */[], cmp)); +b("File \"bs_sort_test.ml\", line 62, characters 4-11", Bs_SortArray.isSorted(/* int array */[], cmp)); -b("File \"bs_sort_test.ml\", line 65, characters 4-11", Bs_Sort.isSorted(/* int array */[0], cmp)); +b("File \"bs_sort_test.ml\", line 65, characters 4-11", Bs_SortArray.isSorted(/* int array */[0], cmp)); -b("File \"bs_sort_test.ml\", line 68, characters 4-11", Bs_Sort.isSorted(/* int array */[ +b("File \"bs_sort_test.ml\", line 68, characters 4-11", Bs_SortArray.isSorted(/* int array */[ 0, 1 ], cmp)); -b("File \"bs_sort_test.ml\", line 70, characters 4-11", 1 - Bs_Sort.isSorted(/* int array */[ +b("File \"bs_sort_test.ml\", line 70, characters 4-11", 1 - Bs_SortArray.isSorted(/* int array */[ 1, 0 ], cmp)); @@ -120,27 +120,27 @@ var u2 = Bs_Array.copy(u); console.time("bs_sort_test.ml 80"); -Bs_Sort.stableSortInPlaceBy(u, cmp); +Bs_SortArray.stableSortInPlaceBy(u, cmp); console.timeEnd("bs_sort_test.ml 80"); -b("File \"bs_sort_test.ml\", line 81, characters 4-11", Bs_Sort.isSorted(u, cmp)); +b("File \"bs_sort_test.ml\", line 81, characters 4-11", Bs_SortArray.isSorted(u, cmp)); console.time("bs_sort_test.ml 82"); -Bs_SortInt.stableSortInPlace(u2); +Bs_SortArrayInt.stableSortInPlace(u2); console.timeEnd("bs_sort_test.ml 82"); -b("File \"bs_sort_test.ml\", line 83, characters 4-11", Bs_Sort.isSorted(u2, cmp)); +b("File \"bs_sort_test.ml\", line 83, characters 4-11", Bs_SortArray.isSorted(u2, cmp)); console.time("bs_sort_test.ml 84"); -Bs_Sort.stableSortInPlaceBy(u1, cmp); +Bs_SortArray.stableSortInPlaceBy(u1, cmp); console.timeEnd("bs_sort_test.ml 84"); -b("File \"bs_sort_test.ml\", line 85, characters 4-11", Bs_Sort.isSorted(u1, cmp)); +b("File \"bs_sort_test.ml\", line 85, characters 4-11", Bs_SortArray.isSorted(u1, cmp)); var u$1 = /* array */[ /* tuple */[ @@ -157,7 +157,7 @@ var u$1 = /* array */[ ] ]; -eq("File \"bs_sort_test.ml\", line 90, characters 5-12", Bs_Sort.stableSortBy(u$1, (function (param, param$1) { +eq("File \"bs_sort_test.ml\", line 90, characters 5-12", Bs_SortArray.stableSortBy(u$1, (function (param, param$1) { return param[0] - param$1[0] | 0; })), /* array */[ /* tuple */[ @@ -193,7 +193,7 @@ var u$2 = /* array */[ ] ]; -eq("File \"bs_sort_test.ml\", line 96, characters 5-12", Bs_Sort.stableSortBy(u$2, (function (param, param$1) { +eq("File \"bs_sort_test.ml\", line 96, characters 5-12", Bs_SortArray.stableSortBy(u$2, (function (param, param$1) { return param[0] - param$1[0] | 0; })), /* array */[ /* tuple */[ @@ -241,7 +241,7 @@ var u$3 = /* array */[ ] ]; -eq("File \"bs_sort_test.ml\", line 102, characters 5-12", Bs_Sort.stableSortBy(u$3, (function (param, param$1) { +eq("File \"bs_sort_test.ml\", line 102, characters 5-12", Bs_SortArray.stableSortBy(u$3, (function (param, param$1) { return param[0] - param$1[0] | 0; })), /* array */[ /* tuple */[ @@ -270,7 +270,7 @@ eq("File \"bs_sort_test.ml\", line 102, characters 5-12", Bs_Sort.stableSortBy(u ] ]); -eq("File \"bs_sort_test.ml\", line 111, characters 5-12", Bs_Sort.binarySearchBy(/* array */[ +eq("File \"bs_sort_test.ml\", line 111, characters 5-12", Bs_SortArray.binarySearchBy(/* array */[ 1, 2, 3, @@ -280,7 +280,7 @@ eq("File \"bs_sort_test.ml\", line 111, characters 5-12", Bs_Sort.binarySearchBy 36 ], 33, cmp), 4); -eq("File \"bs_sort_test.ml\", line 112, characters 5-12", Bs_Sort.binarySearchBy(/* array */[ +eq("File \"bs_sort_test.ml\", line 112, characters 5-12", Bs_SortArray.binarySearchBy(/* array */[ 1, 2, 3, @@ -290,7 +290,7 @@ eq("File \"bs_sort_test.ml\", line 112, characters 5-12", Bs_Sort.binarySearchBy 36 ], 1, cmp), 0); -eq("File \"bs_sort_test.ml\", line 113, characters 5-12", Bs_Sort.binarySearchBy(/* array */[ +eq("File \"bs_sort_test.ml\", line 113, characters 5-12", Bs_SortArray.binarySearchBy(/* array */[ 1, 2, 3, @@ -300,7 +300,7 @@ eq("File \"bs_sort_test.ml\", line 113, characters 5-12", Bs_Sort.binarySearchBy 36 ], 2, cmp), 1); -eq("File \"bs_sort_test.ml\", line 114, characters 5-12", Bs_Sort.binarySearchBy(/* array */[ +eq("File \"bs_sort_test.ml\", line 114, characters 5-12", Bs_SortArray.binarySearchBy(/* array */[ 1, 2, 3, @@ -310,7 +310,7 @@ eq("File \"bs_sort_test.ml\", line 114, characters 5-12", Bs_Sort.binarySearchBy 36 ], 3, cmp), 2); -eq("File \"bs_sort_test.ml\", line 115, characters 5-12", Bs_Sort.binarySearchBy(/* array */[ +eq("File \"bs_sort_test.ml\", line 115, characters 5-12", Bs_SortArray.binarySearchBy(/* array */[ 1, 2, 3, @@ -323,50 +323,50 @@ eq("File \"bs_sort_test.ml\", line 115, characters 5-12", Bs_Sort.binarySearchBy var aa = Array_data_util.range(0, 1000); b("File \"bs_sort_test.ml\", line 117, characters 4-11", Bs_Range.every(0, 1000, (function (i) { - return +(Bs_Sort.binarySearchBy(aa, i, cmp) === i); + return +(Bs_SortArray.binarySearchBy(aa, i, cmp) === i); }))); var cc = Bs_Array.map(Array_data_util.range(0, 2000), (function (x) { return (x << 1); })); -eq("File \"bs_sort_test.ml\", line 122, characters 5-12", Bs_Sort.binarySearchBy(cc, 5000, cmp) ^ -1, 2001); +eq("File \"bs_sort_test.ml\", line 122, characters 5-12", Bs_SortArray.binarySearchBy(cc, 5000, cmp) ^ -1, 2001); -eq("File \"bs_sort_test.ml\", line 123, characters 5-12", Bs_Sort.binarySearchBy(cc, -1, cmp) ^ -1, 0); +eq("File \"bs_sort_test.ml\", line 123, characters 5-12", Bs_SortArray.binarySearchBy(cc, -1, cmp) ^ -1, 0); -eq("File \"bs_sort_test.ml\", line 124, characters 5-12", Bs_Sort.binarySearchBy(cc, 0, cmp), 0); +eq("File \"bs_sort_test.ml\", line 124, characters 5-12", Bs_SortArray.binarySearchBy(cc, 0, cmp), 0); -eq("File \"bs_sort_test.ml\", line 126, characters 5-12", Bs_Sort.binarySearchBy(cc, 1, cmp) ^ -1, 1); +eq("File \"bs_sort_test.ml\", line 126, characters 5-12", Bs_SortArray.binarySearchBy(cc, 1, cmp) ^ -1, 1); b("File \"bs_sort_test.ml\", line 127, characters 4-11", Bs_Range.every(0, 1999, (function (i) { - return +((Bs_Sort.binarySearchBy(cc, (i << 1) + 1 | 0, cmp) ^ -1) === (i + 1 | 0)); + return +((Bs_SortArray.binarySearchBy(cc, (i << 1) + 1 | 0, cmp) ^ -1) === (i + 1 | 0)); }))); function lt(x, y) { return +(x < y); } -eq("File \"bs_sort_test.ml\", line 134, characters 5-12", Bs_Sort.strictlySortedLength(/* int array */[], lt), 0); +eq("File \"bs_sort_test.ml\", line 134, characters 5-12", Bs_SortArray.strictlySortedLength(/* int array */[], lt), 0); -eq("File \"bs_sort_test.ml\", line 135, characters 5-12", Bs_Sort.strictlySortedLength(/* int array */[1], lt), 1); +eq("File \"bs_sort_test.ml\", line 135, characters 5-12", Bs_SortArray.strictlySortedLength(/* int array */[1], lt), 1); -eq("File \"bs_sort_test.ml\", line 136, characters 5-12", Bs_Sort.strictlySortedLength(/* int array */[ +eq("File \"bs_sort_test.ml\", line 136, characters 5-12", Bs_SortArray.strictlySortedLength(/* int array */[ 1, 1 ], lt), 1); -eq("File \"bs_sort_test.ml\", line 137, characters 5-12", Bs_Sort.strictlySortedLength(/* int array */[ +eq("File \"bs_sort_test.ml\", line 137, characters 5-12", Bs_SortArray.strictlySortedLength(/* int array */[ 1, 1, 2 ], lt), 1); -eq("File \"bs_sort_test.ml\", line 138, characters 5-12", Bs_Sort.strictlySortedLength(/* int array */[ +eq("File \"bs_sort_test.ml\", line 138, characters 5-12", Bs_SortArray.strictlySortedLength(/* int array */[ 1, 2 ], lt), 2); -eq("File \"bs_sort_test.ml\", line 139, characters 5-12", Bs_Sort.strictlySortedLength(/* array */[ +eq("File \"bs_sort_test.ml\", line 139, characters 5-12", Bs_SortArray.strictlySortedLength(/* array */[ 1, 2, 3, @@ -374,7 +374,7 @@ eq("File \"bs_sort_test.ml\", line 139, characters 5-12", Bs_Sort.strictlySorted 3 ], lt), 4); -eq("File \"bs_sort_test.ml\", line 140, characters 5-12", Bs_Sort.strictlySortedLength(/* array */[ +eq("File \"bs_sort_test.ml\", line 140, characters 5-12", Bs_SortArray.strictlySortedLength(/* array */[ 4, 4, 3, @@ -382,14 +382,14 @@ eq("File \"bs_sort_test.ml\", line 140, characters 5-12", Bs_Sort.strictlySorted 1 ], lt), 1); -eq("File \"bs_sort_test.ml\", line 141, characters 5-12", Bs_Sort.strictlySortedLength(/* int array */[ +eq("File \"bs_sort_test.ml\", line 141, characters 5-12", Bs_SortArray.strictlySortedLength(/* int array */[ 4, 3, 2, 1 ], lt), -4); -eq("File \"bs_sort_test.ml\", line 142, characters 5-12", Bs_Sort.strictlySortedLength(/* array */[ +eq("File \"bs_sort_test.ml\", line 142, characters 5-12", Bs_SortArray.strictlySortedLength(/* array */[ 4, 3, 2, diff --git a/jscomp/test/bs_sort_test.ml b/jscomp/test/bs_sort_test.ml index c999f45d1d2..817ad6df389 100644 --- a/jscomp/test/bs_sort_test.ml +++ b/jscomp/test/bs_sort_test.ml @@ -4,7 +4,7 @@ let eq loc x y = Mt.eq_suites ~test_id ~suites loc x y let b loc x = Mt.bool_suites ~test_id ~suites loc x module I = Array_data_util -module S = Bs.Sort +module S = Bs.SortArray module R = Bs_Range let cmp = fun[@bs] x y -> x - y module A = Bs.Array @@ -71,7 +71,7 @@ let () = (not @@ S.isSorted [|1;0|] cmp) -module SI = Bs.SortInt +module SI = Bs.SortArray.Int let () = let u = I.randomRange 0 1_000_000 in let u1 = A.copy u in diff --git a/lib/js/bs.js b/lib/js/bs.js index 549440b4b3b..ad2e9597d29 100644 --- a/lib/js/bs.js +++ b/lib/js/bs.js @@ -21,11 +21,11 @@ var HashMapString = 0; var HashMapInt = 0; -var Sort = 0; +var SortArray = 0; -var SortInt = 0; +var SortArrayInt = 0; -var SortString = 0; +var SortArrayString = 0; var Stack = 0; @@ -65,9 +65,9 @@ exports.HashSetInt = HashSetInt; exports.HashSetString = HashSetString; exports.HashMapString = HashMapString; exports.HashMapInt = HashMapInt; -exports.Sort = Sort; -exports.SortInt = SortInt; -exports.SortString = SortString; +exports.SortArray = SortArray; +exports.SortArrayInt = SortArrayInt; +exports.SortArrayString = SortArrayString; exports.Stack = Stack; exports.Range = Range; exports.SortedMapDict = SortedMapDict; diff --git a/lib/js/bs_SetIntM.js b/lib/js/bs_SetIntM.js index 36b4ee5bdb3..2e44e44976f 100644 --- a/lib/js/bs_SetIntM.js +++ b/lib/js/bs_SetIntM.js @@ -1,6 +1,6 @@ 'use strict'; -var Bs_SortInt = require("./bs_SortInt.js"); +var Bs_SortArrayInt = require("./bs_SortArrayInt.js"); var Bs_internalAVLset = require("./bs_internalAVLset.js"); var Bs_internalSetInt = require("./bs_internalSetInt.js"); @@ -320,7 +320,7 @@ function getExn(d, x) { function split(d, key) { var s = d.data; var arr = Bs_internalAVLset.toArray(s); - var i = Bs_SortInt.binarySearch(arr, key); + var i = Bs_SortArrayInt.binarySearch(arr, key); var len = arr.length; if (i < 0) { var next = (-i | 0) - 1 | 0; @@ -371,7 +371,7 @@ function intersect(dataa, datab) { }; } else { var tmp2 = new Array(sizea < sizeb ? sizea : sizeb); - var k = Bs_SortInt.intersect(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0); + var k = Bs_SortArrayInt.intersect(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0); return { data: Bs_internalAVLset.ofSortedArrayAux(tmp2, 0, k) }; @@ -405,7 +405,7 @@ function diff(dataa, datab) { }; } else { var tmp2 = new Array(sizea); - var k = Bs_SortInt.diff(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0); + var k = Bs_SortArrayInt.diff(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0); return { data: Bs_internalAVLset.ofSortedArrayAux(tmp2, 0, k) }; @@ -439,7 +439,7 @@ function union(dataa, datab) { }; } else { var tmp2 = new Array(totalSize); - var k = Bs_SortInt.union(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0); + var k = Bs_SortArrayInt.union(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0); return { data: Bs_internalAVLset.ofSortedArrayAux(tmp2, 0, k) }; diff --git a/lib/js/bs_SetM.js b/lib/js/bs_SetM.js index 9602b0a4edc..f57f0e5a03e 100644 --- a/lib/js/bs_SetM.js +++ b/lib/js/bs_SetM.js @@ -1,6 +1,6 @@ 'use strict'; -var Bs_Sort = require("./bs_Sort.js"); +var Bs_SortArray = require("./bs_SortArray.js"); var Bs_internalAVLset = require("./bs_internalAVLset.js"); function removeMutateAux(nt, x, cmp) { @@ -184,7 +184,7 @@ function addCheck(m, e) { function split(d, key) { var arr = Bs_internalAVLset.toArray(d.data); var cmp = d.cmp; - var i = Bs_Sort.binarySearchBy(arr, key, cmp); + var i = Bs_SortArray.binarySearchBy(arr, key, cmp); var len = arr.length; if (i < 0) { var next = (-i | 0) - 1 | 0; @@ -385,7 +385,7 @@ function intersect(a, b) { }; } else { var tmp2 = new Array(sizea < sizeb ? sizea : sizeb); - var k = Bs_Sort.intersect(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0, cmp); + var k = Bs_SortArray.intersect(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0, cmp); return { cmp: cmp, data: Bs_internalAVLset.ofSortedArrayAux(tmp2, 0, k) @@ -424,7 +424,7 @@ function diff(a, b) { }; } else { var tmp2 = new Array(sizea); - var k = Bs_Sort.diff(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0, cmp); + var k = Bs_SortArray.diff(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0, cmp); return { cmp: cmp, data: Bs_internalAVLset.ofSortedArrayAux(tmp2, 0, k) @@ -463,7 +463,7 @@ function union(a, b) { }; } else { var tmp2 = new Array(totalSize); - var k = Bs_Sort.union(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0, cmp); + var k = Bs_SortArray.union(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0, cmp); return { cmp: cmp, data: Bs_internalAVLset.ofSortedArrayAux(tmp2, 0, k) diff --git a/lib/js/bs_SetStringM.js b/lib/js/bs_SetStringM.js index 109d3935740..37331fc8ce8 100644 --- a/lib/js/bs_SetStringM.js +++ b/lib/js/bs_SetStringM.js @@ -1,7 +1,7 @@ 'use strict'; -var Bs_SortString = require("./bs_SortString.js"); var Bs_internalAVLset = require("./bs_internalAVLset.js"); +var Bs_SortArrayString = require("./bs_SortArrayString.js"); var Bs_internalSetString = require("./bs_internalSetString.js"); function removeMutateAux(nt, x) { @@ -320,7 +320,7 @@ function getExn(d, x) { function split(d, key) { var s = d.data; var arr = Bs_internalAVLset.toArray(s); - var i = Bs_SortString.binarySearch(arr, key); + var i = Bs_SortArrayString.binarySearch(arr, key); var len = arr.length; if (i < 0) { var next = (-i | 0) - 1 | 0; @@ -371,7 +371,7 @@ function intersect(dataa, datab) { }; } else { var tmp2 = new Array(sizea < sizeb ? sizea : sizeb); - var k = Bs_SortString.intersect(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0); + var k = Bs_SortArrayString.intersect(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0); return { data: Bs_internalAVLset.ofSortedArrayAux(tmp2, 0, k) }; @@ -405,7 +405,7 @@ function diff(dataa, datab) { }; } else { var tmp2 = new Array(sizea); - var k = Bs_SortString.diff(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0); + var k = Bs_SortArrayString.diff(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0); return { data: Bs_internalAVLset.ofSortedArrayAux(tmp2, 0, k) }; @@ -439,7 +439,7 @@ function union(dataa, datab) { }; } else { var tmp2 = new Array(totalSize); - var k = Bs_SortString.union(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0); + var k = Bs_SortArrayString.union(tmp, 0, sizea, tmp, sizea, sizeb, tmp2, 0); return { data: Bs_internalAVLset.ofSortedArrayAux(tmp2, 0, k) }; diff --git a/lib/js/bs_Sort.js b/lib/js/bs_SortArray.js similarity index 99% rename from lib/js/bs_Sort.js rename to lib/js/bs_SortArray.js index 10586b2c49a..020a44188a7 100644 --- a/lib/js/bs_Sort.js +++ b/lib/js/bs_SortArray.js @@ -411,6 +411,10 @@ function binarySearchBy(sorted, key, cmp) { } } +var Int = 0; + +var $$String = 0; + exports.strictlySortedLength = strictlySortedLength; exports.isSorted = isSorted; exports.stableSortInPlaceBy = stableSortInPlaceBy; @@ -419,4 +423,6 @@ exports.union = union; exports.intersect = intersect; exports.diff = diff; exports.binarySearchBy = binarySearchBy; +exports.Int = Int; +exports.$$String = $$String; /* No side effect */ diff --git a/lib/js/bs_SortString.js b/lib/js/bs_SortArrayInt.js similarity index 82% rename from lib/js/bs_SortString.js rename to lib/js/bs_SortArrayInt.js index 4d98f5c4d0b..d29139d438c 100644 --- a/lib/js/bs_SortString.js +++ b/lib/js/bs_SortArrayInt.js @@ -22,6 +22,26 @@ function sortedLengthAuxMore(xs, _prec, _acc, len) { }; } +function sortedLengthAuxLess(xs, _prec, _acc, len) { + while(true) { + var acc = _acc; + var prec = _prec; + if (acc >= len) { + return acc; + } else { + var v = xs[acc]; + if (prec < v) { + _acc = acc + 1 | 0; + _prec = v; + continue ; + + } else { + return acc; + } + } + }; +} + function strictlySortedLength(xs) { var len = xs.length; if (len === 0 || len === 1) { @@ -30,27 +50,7 @@ function strictlySortedLength(xs) { var x0 = xs[0]; var x1 = xs[1]; if (x0 < x1) { - var xs$1 = xs; - var _prec = x1; - var _acc = 2; - var len$1 = len; - while(true) { - var acc = _acc; - var prec = _prec; - if (acc >= len$1) { - return acc; - } else { - var v = xs$1[acc]; - if (prec < v) { - _acc = acc + 1 | 0; - _prec = v; - continue ; - - } else { - return acc; - } - } - }; + return sortedLengthAuxLess(xs, x1, 2, len); } else if (x0 > x1) { return -sortedLengthAuxMore(xs, x1, 2, len) | 0; } else { @@ -59,24 +59,25 @@ function strictlySortedLength(xs) { } } +function isSortedAux(a, _i, last_bound) { + while(true) { + var i = _i; + if (i === last_bound) { + return /* true */1; + } else if (a[i] <= a[i + 1 | 0]) { + _i = i + 1 | 0; + continue ; + + } else { + return /* false */0; + } + }; +} + function isSorted(a) { var len = a.length; if (len) { - var a$1 = a; - var _i = 0; - var last_bound = len - 1 | 0; - while(true) { - var i = _i; - if (i === last_bound) { - return /* true */1; - } else if (a$1[i] <= a$1[i + 1 | 0]) { - _i = i + 1 | 0; - continue ; - - } else { - return /* false */0; - } - }; + return isSortedAux(a, 0, len - 1 | 0); } else { return /* true */1; } @@ -347,6 +348,40 @@ function stableSort(a) { return b; } +function binarySearchAux(arr, _lo, _hi, key) { + while(true) { + var hi = _hi; + var lo = _lo; + var mid = (lo + hi | 0) / 2 | 0; + var midVal = arr[mid]; + if (key === midVal) { + return mid; + } else if (key < midVal) { + if (hi === mid) { + if (arr[lo] === key) { + return lo; + } else { + return -(hi + 1 | 0) | 0; + } + } else { + _hi = mid; + continue ; + + } + } else if (lo === mid) { + if (arr[hi] === key) { + return hi; + } else { + return -(hi + 1 | 0) | 0; + } + } else { + _lo = mid; + continue ; + + } + }; +} + function binarySearch(sorted, key) { var len = sorted.length; if (len) { @@ -358,41 +393,7 @@ function binarySearch(sorted, key) { if (key > hi) { return -(len + 1 | 0) | 0; } else { - var arr = sorted; - var _lo = 0; - var _hi = len - 1 | 0; - var key$1 = key; - while(true) { - var hi$1 = _hi; - var lo$1 = _lo; - var mid = (lo$1 + hi$1 | 0) / 2 | 0; - var midVal = arr[mid]; - if (key$1 === midVal) { - return mid; - } else if (key$1 < midVal) { - if (hi$1 === mid) { - if (arr[lo$1] === key$1) { - return lo$1; - } else { - return -(hi$1 + 1 | 0) | 0; - } - } else { - _hi = mid; - continue ; - - } - } else if (lo$1 === mid) { - if (arr[hi$1] === key$1) { - return hi$1; - } else { - return -(hi$1 + 1 | 0) | 0; - } - } else { - _lo = mid; - continue ; - - } - }; + return binarySearchAux(sorted, 0, len - 1 | 0, key); } } } else { @@ -400,12 +401,25 @@ function binarySearch(sorted, key) { } } +var A = 0; + +var cutoff = 5; + +exports.A = A; +exports.sortedLengthAuxMore = sortedLengthAuxMore; +exports.sortedLengthAuxLess = sortedLengthAuxLess; exports.strictlySortedLength = strictlySortedLength; +exports.isSortedAux = isSortedAux; exports.isSorted = isSorted; -exports.stableSortInPlace = stableSortInPlace; -exports.stableSort = stableSort; -exports.binarySearch = binarySearch; +exports.cutoff = cutoff; +exports.merge = merge; exports.union = union; exports.intersect = intersect; exports.diff = diff; +exports.insertionSort = insertionSort; +exports.sortTo = sortTo; +exports.stableSortInPlace = stableSortInPlace; +exports.stableSort = stableSort; +exports.binarySearchAux = binarySearchAux; +exports.binarySearch = binarySearch; /* No side effect */ diff --git a/lib/js/bs_SortInt.js b/lib/js/bs_SortArrayString.js similarity index 100% rename from lib/js/bs_SortInt.js rename to lib/js/bs_SortArrayString.js diff --git a/lib/js/bs_internalAVLset.js b/lib/js/bs_internalAVLset.js index 3d0102988e6..0cc66d7d507 100644 --- a/lib/js/bs_internalAVLset.js +++ b/lib/js/bs_internalAVLset.js @@ -1,6 +1,6 @@ 'use strict'; -var Bs_Sort = require("./bs_Sort.js"); +var Bs_SortArray = require("./bs_SortArray.js"); function height(n) { if (n !== null) { @@ -896,7 +896,7 @@ function addMutate(cmp, t, x) { function ofArray(xs, cmp) { var len = xs.length; if (len) { - var next = Bs_Sort.strictlySortedLength(xs, (function (x, y) { + var next = Bs_SortArray.strictlySortedLength(xs, (function (x, y) { return +(cmp(x, y) < 0); })); var result; diff --git a/lib/js/bs_internalAVLtree.js b/lib/js/bs_internalAVLtree.js index 60bcb8d731c..320a9dabd5f 100644 --- a/lib/js/bs_internalAVLtree.js +++ b/lib/js/bs_internalAVLtree.js @@ -1,6 +1,6 @@ 'use strict'; -var Bs_Sort = require("./bs_Sort.js"); +var Bs_SortArray = require("./bs_SortArray.js"); function height(n) { if (n !== null) { @@ -1066,7 +1066,7 @@ function updateMutate(t, x, data, cmp) { function ofArray(xs, cmp) { var len = xs.length; if (len) { - var next = Bs_Sort.strictlySortedLength(xs, (function (param, param$1) { + var next = Bs_SortArray.strictlySortedLength(xs, (function (param, param$1) { return +(cmp(param[0], param$1[0]) < 0); })); var result; diff --git a/lib/js/bs_internalMapInt.js b/lib/js/bs_internalMapInt.js index 29b6afad0a7..321cec67a3a 100644 --- a/lib/js/bs_internalMapInt.js +++ b/lib/js/bs_internalMapInt.js @@ -1,6 +1,6 @@ 'use strict'; -var Bs_Sort = require("./bs_Sort.js"); +var Bs_SortArray = require("./bs_SortArray.js"); var Caml_primitive = require("./caml_primitive.js"); var Bs_internalAVLtree = require("./bs_internalAVLtree.js"); @@ -333,7 +333,7 @@ function addMutate(t, x, data) { function ofArray(xs) { var len = xs.length; if (len) { - var next = Bs_Sort.strictlySortedLength(xs, (function (param, param$1) { + var next = Bs_SortArray.strictlySortedLength(xs, (function (param, param$1) { return +(param[0] < param$1[0]); })); var result; diff --git a/lib/js/bs_internalMapString.js b/lib/js/bs_internalMapString.js index c34a677e3d0..2d30f2828f7 100644 --- a/lib/js/bs_internalMapString.js +++ b/lib/js/bs_internalMapString.js @@ -1,6 +1,6 @@ 'use strict'; -var Bs_Sort = require("./bs_Sort.js"); +var Bs_SortArray = require("./bs_SortArray.js"); var Caml_primitive = require("./caml_primitive.js"); var Bs_internalAVLtree = require("./bs_internalAVLtree.js"); @@ -333,7 +333,7 @@ function addMutate(t, x, data) { function ofArray(xs) { var len = xs.length; if (len) { - var next = Bs_Sort.strictlySortedLength(xs, (function (param, param$1) { + var next = Bs_SortArray.strictlySortedLength(xs, (function (param, param$1) { return +(param[0] < param$1[0]); })); var result; diff --git a/lib/js/bs_internalSetInt.js b/lib/js/bs_internalSetInt.js index 345801afc5b..20ec9be03e1 100644 --- a/lib/js/bs_internalSetInt.js +++ b/lib/js/bs_internalSetInt.js @@ -1,6 +1,6 @@ 'use strict'; -var Bs_SortInt = require("./bs_SortInt.js"); +var Bs_SortArrayInt = require("./bs_SortArrayInt.js"); var Bs_internalAVLset = require("./bs_internalAVLset.js"); function has(_t, x) { @@ -188,7 +188,7 @@ function addMutate(t, x) { function ofArray(xs) { var len = xs.length; if (len) { - var next = Bs_SortInt.strictlySortedLength(xs); + var next = Bs_SortArrayInt.strictlySortedLength(xs); var result; if (next >= 0) { result = Bs_internalAVLset.ofSortedArrayAux(xs, 0, next); diff --git a/lib/js/bs_internalSetString.js b/lib/js/bs_internalSetString.js index 41cf34377f8..f8737d11af0 100644 --- a/lib/js/bs_internalSetString.js +++ b/lib/js/bs_internalSetString.js @@ -1,7 +1,7 @@ 'use strict'; -var Bs_SortString = require("./bs_SortString.js"); var Bs_internalAVLset = require("./bs_internalAVLset.js"); +var Bs_SortArrayString = require("./bs_SortArrayString.js"); function has(_t, x) { while(true) { @@ -188,7 +188,7 @@ function addMutate(t, x) { function ofArray(xs) { var len = xs.length; if (len) { - var next = Bs_SortString.strictlySortedLength(xs); + var next = Bs_SortArrayString.strictlySortedLength(xs); var result; if (next >= 0) { result = Bs_internalAVLset.ofSortedArrayAux(xs, 0, next);