123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149open!BasemoduleParallel=Parallel_kernelmoduleDefinitions=struct(** Parallel operations over maps.
Most of these implement parallel versions of [Map.*i] traversals. That is, we pass
[~key ~data] to all [~f] arguments. We leave off the [i] suffix, which is redundant
here. Providing both [i] and non-[i] versions seems like unnecessary bloat to this
interface. *)moduletypeS=sigtype('key,'data,'cmp)maptype('key,'cmp,'fn)with_comparator(** Parallel version of [Map.fold]. *)valfold:('key:valuemodcontendedportable)('data:valuemodcontendedportable)'res.Parallel.t@local->('key,'data,'cmp)map->init:(unit->'res)@portable->f:(Parallel.t@local->key:'key->data:'data->'res->'res)@shareable->combine:(Parallel.t@local->'res->'res->'res)@shareable->'res(** Parallel version of [Map.iteri]. *)valiter:('key:valuemodcontendedportable)('data:valuemodcontendedportable).Parallel.t@local->('key,'data,'cmp)map->f:(Parallel.t@local->key:'key->data:'data->unit)@shareable->unit(** Parallel version of [Map.mapi]. *)valmap:('key:valuemodcontendedportable)('data1:valuemodcontendedportable)('data2:valuemodcontendedportable).Parallel.t@local->('key,'data1,'cmp)map->f:(Parallel.t@local->key:'key->data:'data1->'data2)@shareable->('key,'data2,'cmp)map(** Parallel version of [Map.filteri]. *)valfilter:('key:valuemodcontendedportable)('data:valuemodcontendedportable).Parallel.t@local->('key,'data,'cmp)map->f:(Parallel.t@local->key:'key->data:'data->bool)@shareable->('key,'data,'cmp)map(** Parallel version of [Map.filter_mapi]. *)valfilter_map:('key:valuemodcontendedportable)('data1:valuemodcontendedportable)('data2:valuemodcontendedportable).Parallel.t@local->('key,'data1,'cmp)map->f:(Parallel.t@local->key:'key->data:'data1->'data2option)@shareable->('key,'data2,'cmp)map(** Parallel version of [Map.partitioni_tf]. *)valpartition_tf:('key:valuemodcontendedportable)('data:valuemodcontendedportable).Parallel.t@local->('key,'data,'cmp)map->f:(Parallel.t@local->key:'key->data:'data->bool)@shareable->('key,'data,'cmp)map*('key,'data,'cmp)map(** Parallel version of [Map.partition_mapi]. *)valpartition_map:('key:valuemodcontendedportable)('data1:valuemodcontendedportable)('data2:valuemodcontendedportable)('data3:valuemodcontendedportable).Parallel.t@local->('key,'data1,'cmp)map->f:(Parallel.t@local->key:'key->data:'data1->('data2,'data3)Either.t)@shareable->('key,'data2,'cmp)map*('key,'data3,'cmp)map(** Parallel version of [Map.merge]. *)valmerge_filter_map:('key:valuemodcontendedportable)('data1:valuemodcontendedportable)('data2:valuemodcontendedportable)('data3:valuemodcontendedportable)('cmp:valuemodportable).('key,'cmp,Parallel.t@local->('key,'data1,'cmp)map->('key,'data2,'cmp)map->f:(Parallel.t@local->key:'key->('data1,'data2)Map.Merge_element.t->'data3option)@shareable->('key,'data3,'cmp)map)with_comparator(** Constructs a parallel sequence from a map. *)valto_sequence:('key:valuemodcontendedportable)('data:valuemodcontendedportable).('key,'data,'cmp)map->('key*'data)Parallel_sequence.With_length.t@local(** Constructs a parallel sequence from a pair of maps sharing a key type. *)valto_sequence2:('key:valuemodcontendedportable)('data1:valuemodcontendedportable)('data2:valuemodcontendedportable)('cmp:valuemodportable).('key,'cmp,('key,'data1,'cmp)map->('key,'data2,'cmp)map->('key*('data1,'data2)Map.Merge_element.t)Parallel_sequence.t@local)with_comparator(** Parallel computation following the tree structure of a map. *)valtraverse:('key:valuemodcontendedportable)('data:valuemodcontendedportable).Parallel.t@local->('key,'data,'cmp)map->on_empty:(unit->'res)@shareable->on_data:(Parallel.t@local->key:'key->data:'data->'v)@shareable->on_leaf:(Parallel.t@local->key:'key->'v->'res)@shareable->on_node:(Parallel.t@local->key:'key->'v->'res->'res->'res)@shareable->'resendendmoduletypeParallel_map=sig@@portableincludemoduletypeofstructincludeDefinitionsendmoduleTree:sig(** Parallel operations on [_ Map.Tree.t]. *)(** @inline *)includeSwithtype('key,'data,'cmp)map:=('key,'data,'cmp)Map.Tree.tandtype('key,'cmp,'fn)with_comparator:=comparator:('key,'cmp)Comparator.t->'fnend(** Parallel operations on [_ Map.t]. *)(** @inline *)includeSwithtype('key,'data,'cmp)map:=('key,'data,'cmp)Map.tandtype('key,'cmp,'fn)with_comparator:='fnend