Skip to content

Commit

Permalink
Stdlib functional iterators (#1002)
Browse files Browse the repository at this point in the history
* add `Seq` module, expose iterator conversions in most containers

* small typo

* typo

* change order of arguments for `{Map,Set}.add_seq`

* watch for max string length in `Bytes.of_seq`

* wip: make it build again

* Fix dependency

Sys needs to be linked before Bytes in stdlib.

* Update threads/stdlib.ml

* Update stdlib_no_prefixed/.depend

* fix inconsistencies with label modules

* update testsuite to work with seq

* update change file

* small change in `Hashtbl.to_seq`, capturing only the underlying array

* add some documentation to seq.mli

* revert to good ol' module type names for hashtables

* fix test

* change style of comments in seq.mli

* follow some demands in review of GPR #1002

* some fixes for #1002

* add Seq-related functions to Ephemeron

* add some comments on `Hashtbl.of_seq`

* add more tests for `Hashtbl.{to,of}_seq`

* fix bug in `Ephemeron.to_seq`

* Update Changes
  • Loading branch information
c-cube authored and alainfrisch committed Mar 16, 2018
1 parent fab457a commit df80f34
Show file tree
Hide file tree
Showing 46 changed files with 940 additions and 68 deletions.
4 changes: 4 additions & 0 deletions Changes
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@ Working version

### Standard library:

- GPR#1002: add a new `Seq` module defining a list-of-thunks style iterator.
Also add `{to,of}_seq` to several standard modules.
(Simon Cruanes, review by Alain Frisch and François Bobot)

- MPR#7690, GPR#1528: fix the float_of_string function for hexadecimal floats
with very large values of the exponent.
(Olivier Andrieu)
Expand Down
23 changes: 12 additions & 11 deletions ocamldoc/stdlib_non_prefixed/.depend
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
annot.cmi : location.cmi
arg.cmi :
arg_helper.cmi : map.cmi
array.cmi :
array.cmi : seq.cmi
arrayLabels.cmi :
ast_helper.cmi : parsetree.cmi longident.cmi location.cmi docstrings.cmi \
asttypes.cmi
Expand All @@ -13,13 +13,13 @@ attr_helper.cmi : parsetree.cmi location.cmi format.cmi asttypes.cmi
bigarray.cmi : unix.cmi complex.cmi camlinternalBigarray.cmi
btype.cmi : types.cmi set.cmi path.cmi map.cmi hashtbl.cmi format.cmi \
asttypes.cmi
buffer.cmi : uchar.cmi
buffer.cmi : uchar.cmi seq.cmi
builtin_attributes.cmi : parsetree.cmi location.cmi
bytegen.cmi : lambda.cmi instruct.cmi
bytelibrarian.cmi : format.cmi
bytelink.cmi : symtable.cmi format.cmi digest.cmi cmo_format.cmi
bytepackager.cmi : ident.cmi format.cmi env.cmi
bytes.cmi :
bytes.cmi : seq.cmi
bytesLabels.cmi :
bytesections.cmi :
callback.cmi :
Expand Down Expand Up @@ -61,7 +61,7 @@ gc.cmi :
genlex.cmi : stream.cmi
graphics.cmi :
graphicsX11.cmi :
hashtbl.cmi :
hashtbl.cmi : seq.cmi
ident.cmi : identifiable.cmi
identifiable.cmi : set.cmi map.cmi hashtbl.cmi format.cmi
includeclass.cmi : types.cmi location.cmi format.cmi env.cmi ctype.cmi
Expand All @@ -77,16 +77,16 @@ lambda.cmi : types.cmi primitive.cmi path.cmi location.cmi ident.cmi env.cmi \
lazy.cmi :
lexer.cmi : parser.cmi location.cmi lexing.cmi format.cmi
lexing.cmi :
list.cmi :
list.cmi : seq.cmi
listLabels.cmi :
location.cmi : warnings.cmi lexing.cmi format.cmi
longident.cmi :
map.cmi :
map.cmi : seq.cmi
marshal.cmi :
matching.cmi : typedtree.cmi location.cmi lambda.cmi ident.cmi
meta.cmi : obj.cmi instruct.cmi
misc.cmi : set.cmi map.cmi hashtbl.cmi format.cmi
moreLabels.cmi : set.cmi map.cmi hashtbl.cmi
moreLabels.cmi : set.cmi seq.cmi map.cmi hashtbl.cmi
mtype.cmi : types.cmi path.cmi ident.cmi env.cmi
mutex.cmi :
nativeint.cmi :
Expand Down Expand Up @@ -117,21 +117,22 @@ printtyp.cmi : types.cmi path.cmi outcometree.cmi longident.cmi ident.cmi \
format.cmi env.cmi asttypes.cmi
printtyped.cmi : typedtree.cmi format.cmi
profile.cmi : format.cmi
queue.cmi :
queue.cmi : seq.cmi
random.cmi : nativeint.cmi int64.cmi int32.cmi
runtimedef.cmi :
scanf.cmi : pervasives.cmi
semantics_of_primitives.cmi : lambda.cmi
set.cmi :
seq.cmi :
set.cmi : seq.cmi
simplif.cmi : misc.cmi location.cmi lambda.cmi ident.cmi
sort.cmi :
spacetime.cmi :
stack.cmi :
stack.cmi : seq.cmi
stdLabels.cmi : stringLabels.cmi listLabels.cmi bytesLabels.cmi \
arrayLabels.cmi
str.cmi :
stream.cmi :
string.cmi :
string.cmi : seq.cmi
stringLabels.cmi :
strongly_connected_components.cmi : identifiable.cmi
stypes.cmi : typedtree.cmi location.cmi annot.cmi
Expand Down
2 changes: 1 addition & 1 deletion otherlibs/threads/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ LIB=../../stdlib
P=stdlib__

LIB_OBJS=$(LIB)/camlinternalFormatBasics.cmo stdlib.cmo \
$(LIB)/$(P)array.cmo $(LIB)/$(P)list.cmo $(LIB)/$(P)char.cmo $(LIB)/$(P)bytes.cmo \
$(LIB)/$(P)seq.cmo $(LIB)/$(P)array.cmo $(LIB)/$(P)list.cmo $(LIB)/$(P)char.cmo $(LIB)/$(P)bytes.cmo \
$(LIB)/$(P)string.cmo $(LIB)/$(P)sys.cmo $(LIB)/$(P)sort.cmo marshal.cmo \
$(LIB)/$(P)obj.cmo $(LIB)/$(P)int32.cmo $(LIB)/$(P)int64.cmo \
$(LIB)/$(P)nativeint.cmo $(LIB)/$(P)lexing.cmo $(LIB)/$(P)parsing.cmo \
Expand Down
1 change: 1 addition & 0 deletions otherlibs/threads/stdlib.ml
Original file line number Diff line number Diff line change
Expand Up @@ -675,6 +675,7 @@ module Printf = Printf
module Queue = Queue
module Random = Random
module Scanf = Scanf
module Seq = Seq
module Set = Set
module Sort = Sort
module Spacetime = Spacetime
Expand Down
111 changes: 60 additions & 51 deletions stdlib/.depend
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,20 @@ stdlib__arg.cmo : stdlib__sys.cmi stdlib__string.cmi stdlib__printf.cmi stdlib__
stdlib__arg.cmx : stdlib__sys.cmx stdlib__string.cmx stdlib__printf.cmx stdlib__list.cmx stdlib__buffer.cmx stdlib__array.cmx \
stdlib__arg.cmi
stdlib__arg.cmi :
stdlib__array.cmo : stdlib__array.cmi
stdlib__array.cmx : stdlib__array.cmi
stdlib__array.cmi :
stdlib__array.cmo : stdlib__seq.cmi stdlib__array.cmi
stdlib__array.cmx : stdlib__seq.cmx stdlib__array.cmi
stdlib__array.cmi : stdlib__seq.cmi
stdlib__arrayLabels.cmo : stdlib__array.cmi stdlib__arrayLabels.cmi
stdlib__arrayLabels.cmx : stdlib__array.cmx stdlib__arrayLabels.cmi
stdlib__arrayLabels.cmi :
stdlib__buffer.cmo : stdlib__uchar.cmi stdlib__sys.cmi stdlib__string.cmi stdlib__char.cmi stdlib__bytes.cmi stdlib__buffer.cmi
stdlib__buffer.cmx : stdlib__uchar.cmx stdlib__sys.cmx stdlib__string.cmx stdlib__char.cmx stdlib__bytes.cmx stdlib__buffer.cmi
stdlib__buffer.cmi : stdlib__uchar.cmi
stdlib__bytes.cmo : stdlib__char.cmi stdlib__bytes.cmi
stdlib__bytes.cmx : stdlib__char.cmx stdlib__bytes.cmi
stdlib__bytes.cmi :
stdlib__buffer.cmo : stdlib__uchar.cmi stdlib__sys.cmi stdlib__string.cmi stdlib__seq.cmi stdlib__char.cmi stdlib__bytes.cmi \
stdlib__buffer.cmi
stdlib__buffer.cmx : stdlib__uchar.cmx stdlib__sys.cmx stdlib__string.cmx stdlib__seq.cmx stdlib__char.cmx stdlib__bytes.cmx \
stdlib__buffer.cmi
stdlib__buffer.cmi : stdlib__uchar.cmi stdlib__seq.cmi
stdlib__bytes.cmo : stdlib__sys.cmi stdlib__seq.cmi stdlib__char.cmi stdlib__bytes.cmi
stdlib__bytes.cmx : stdlib__sys.cmx stdlib__seq.cmx stdlib__char.cmx stdlib__bytes.cmi
stdlib__bytes.cmi : stdlib__seq.cmi
stdlib__bytesLabels.cmo : stdlib__bytes.cmi stdlib__bytesLabels.cmi
stdlib__bytesLabels.cmx : stdlib__bytes.cmx stdlib__bytesLabels.cmi
stdlib__bytesLabels.cmi :
Expand Down Expand Up @@ -79,11 +81,11 @@ stdlib__genlex.cmo : stdlib__string.cmi stdlib__stream.cmi stdlib__list.cmi stdl
stdlib__genlex.cmx : stdlib__string.cmx stdlib__stream.cmx stdlib__list.cmx stdlib__hashtbl.cmx stdlib__char.cmx stdlib__bytes.cmx \
stdlib__genlex.cmi
stdlib__genlex.cmi : stdlib__stream.cmi
stdlib__hashtbl.cmo : stdlib__sys.cmi stdlib__string.cmi stdlib__random.cmi stdlib__obj.cmi stdlib__lazy.cmi stdlib__array.cmi \
stdlib__hashtbl.cmi
stdlib__hashtbl.cmx : stdlib__sys.cmx stdlib__string.cmx stdlib__random.cmx stdlib__obj.cmx stdlib__lazy.cmx stdlib__array.cmx \
stdlib__hashtbl.cmi
stdlib__hashtbl.cmi :
stdlib__hashtbl.cmo : stdlib__sys.cmi stdlib__string.cmi stdlib__seq.cmi stdlib__random.cmi stdlib__obj.cmi stdlib__lazy.cmi \
stdlib__array.cmi stdlib__hashtbl.cmi
stdlib__hashtbl.cmx : stdlib__sys.cmx stdlib__string.cmx stdlib__seq.cmx stdlib__random.cmx stdlib__obj.cmx stdlib__lazy.cmx \
stdlib__array.cmx stdlib__hashtbl.cmi
stdlib__hashtbl.cmi : stdlib__seq.cmi
stdlib__int32.cmo : stdlib__int32.cmi
stdlib__int32.cmx : stdlib__int32.cmi
stdlib__int32.cmi :
Expand All @@ -96,21 +98,21 @@ stdlib__lazy.cmi :
stdlib__lexing.cmo : stdlib__sys.cmi stdlib__string.cmi stdlib__bytes.cmi stdlib__array.cmi stdlib__lexing.cmi
stdlib__lexing.cmx : stdlib__sys.cmx stdlib__string.cmx stdlib__bytes.cmx stdlib__array.cmx stdlib__lexing.cmi
stdlib__lexing.cmi :
stdlib__list.cmo : stdlib__list.cmi
stdlib__list.cmx : stdlib__list.cmi
stdlib__list.cmi :
stdlib__list.cmo : stdlib__seq.cmi stdlib__list.cmi
stdlib__list.cmx : stdlib__seq.cmx stdlib__list.cmi
stdlib__list.cmi : stdlib__seq.cmi
stdlib__listLabels.cmo : stdlib__list.cmi stdlib__listLabels.cmi
stdlib__listLabels.cmx : stdlib__list.cmx stdlib__listLabels.cmi
stdlib__listLabels.cmi :
stdlib__map.cmo : stdlib__map.cmi
stdlib__map.cmx : stdlib__map.cmi
stdlib__map.cmi :
stdlib__map.cmo : stdlib__seq.cmi stdlib__map.cmi
stdlib__map.cmx : stdlib__seq.cmx stdlib__map.cmi
stdlib__map.cmi : stdlib__seq.cmi
stdlib__marshal.cmo : stdlib__bytes.cmi stdlib__marshal.cmi
stdlib__marshal.cmx : stdlib__bytes.cmx stdlib__marshal.cmi
stdlib__marshal.cmi :
stdlib__moreLabels.cmo : stdlib__set.cmi stdlib__map.cmi stdlib__hashtbl.cmi stdlib__moreLabels.cmi
stdlib__moreLabels.cmx : stdlib__set.cmx stdlib__map.cmx stdlib__hashtbl.cmx stdlib__moreLabels.cmi
stdlib__moreLabels.cmi : stdlib__set.cmi stdlib__map.cmi stdlib__hashtbl.cmi
stdlib__moreLabels.cmi : stdlib__set.cmi stdlib__seq.cmi stdlib__map.cmi stdlib__hashtbl.cmi
stdlib__nativeint.cmo : stdlib__sys.cmi stdlib__nativeint.cmi
stdlib__nativeint.cmx : stdlib__sys.cmx stdlib__nativeint.cmi
stdlib__nativeint.cmi :
Expand All @@ -131,9 +133,9 @@ stdlib__printf.cmo : camlinternalFormatBasics.cmi camlinternalFormat.cmi stdlib_
stdlib__printf.cmx : camlinternalFormatBasics.cmx camlinternalFormat.cmx stdlib__buffer.cmx \
stdlib__printf.cmi
stdlib__printf.cmi : stdlib__buffer.cmi
stdlib__queue.cmo : stdlib__queue.cmi
stdlib__queue.cmx : stdlib__queue.cmi
stdlib__queue.cmi :
stdlib__queue.cmo : stdlib__seq.cmi stdlib__queue.cmi
stdlib__queue.cmx : stdlib__seq.cmx stdlib__queue.cmi
stdlib__queue.cmi : stdlib__seq.cmi
stdlib__random.cmo : stdlib__string.cmi stdlib__nativeint.cmi stdlib__int64.cmi stdlib__int32.cmi stdlib__digest.cmi \
stdlib__char.cmi stdlib__array.cmi stdlib__random.cmi
stdlib__random.cmx : stdlib__string.cmx stdlib__nativeint.cmx stdlib__int64.cmx stdlib__int32.cmx stdlib__digest.cmx \
Expand All @@ -144,18 +146,21 @@ stdlib__scanf.cmo : stdlib__string.cmi stdlib__printf.cmi stdlib__list.cmi camli
stdlib__scanf.cmx : stdlib__string.cmx stdlib__printf.cmx stdlib__list.cmx camlinternalFormatBasics.cmx \
camlinternalFormat.cmx stdlib__bytes.cmx stdlib__buffer.cmx stdlib__scanf.cmi
stdlib__scanf.cmi :
stdlib__set.cmo : stdlib__list.cmi stdlib__set.cmi
stdlib__set.cmx : stdlib__list.cmx stdlib__set.cmi
stdlib__set.cmi :
stdlib__seq.cmo : stdlib__seq.cmi
stdlib__seq.cmx : stdlib__seq.cmi
stdlib__seq.cmi :
stdlib__set.cmo : stdlib__seq.cmi stdlib__list.cmi stdlib__set.cmi
stdlib__set.cmx : stdlib__seq.cmx stdlib__list.cmx stdlib__set.cmi
stdlib__set.cmi : stdlib__seq.cmi
stdlib__sort.cmo : stdlib__array.cmi stdlib__sort.cmi
stdlib__sort.cmx : stdlib__array.cmx stdlib__sort.cmi
stdlib__sort.cmi :
stdlib__spacetime.cmo : stdlib__gc.cmi stdlib__spacetime.cmi
stdlib__spacetime.cmx : stdlib__gc.cmx stdlib__spacetime.cmi
stdlib__spacetime.cmi :
stdlib__stack.cmo : stdlib__list.cmi stdlib__stack.cmi
stdlib__stack.cmx : stdlib__list.cmx stdlib__stack.cmi
stdlib__stack.cmi :
stdlib__stack.cmo : stdlib__seq.cmi stdlib__list.cmi stdlib__stack.cmi
stdlib__stack.cmx : stdlib__seq.cmx stdlib__list.cmx stdlib__stack.cmi
stdlib__stack.cmi : stdlib__seq.cmi
stdlib__stdLabels.cmo : stdlib__stringLabels.cmi stdlib__listLabels.cmi stdlib__bytesLabels.cmi \
stdlib__arrayLabels.cmi stdlib__stdLabels.cmi
stdlib__stdLabels.cmx : stdlib__stringLabels.cmx stdlib__listLabels.cmx stdlib__bytesLabels.cmx \
Expand All @@ -169,7 +174,7 @@ stdlib__stream.cmx : stdlib__string.cmx stdlib__list.cmx stdlib__lazy.cmx stdlib
stdlib__stream.cmi :
stdlib__string.cmo : stdlib__bytes.cmi stdlib__string.cmi
stdlib__string.cmx : stdlib__bytes.cmx stdlib__string.cmi
stdlib__string.cmi :
stdlib__string.cmi : stdlib__seq.cmi
stdlib__stringLabels.cmo : stdlib__string.cmi stdlib__stringLabels.cmi
stdlib__stringLabels.cmx : stdlib__string.cmx stdlib__stringLabels.cmi
stdlib__stringLabels.cmi :
Expand All @@ -189,14 +194,16 @@ stdlib__arg.cmo : stdlib__sys.cmi stdlib__string.cmi stdlib__printf.cmi stdlib__
stdlib__arg.cmi
stdlib__arg.p.cmx : stdlib__sys.cmx stdlib__string.cmx stdlib__printf.cmx stdlib__list.cmx stdlib__buffer.cmx stdlib__array.cmx \
stdlib__arg.cmi
stdlib__array.cmo : stdlib__array.cmi
stdlib__array.p.cmx : stdlib__array.cmi
stdlib__array.cmo : stdlib__seq.cmi stdlib__array.cmi
stdlib__array.p.cmx : stdlib__seq.cmx stdlib__array.cmi
stdlib__arrayLabels.cmo : stdlib__array.cmi stdlib__arrayLabels.cmi
stdlib__arrayLabels.p.cmx : stdlib__array.cmx stdlib__arrayLabels.cmi
stdlib__buffer.cmo : stdlib__uchar.cmi stdlib__sys.cmi stdlib__string.cmi stdlib__char.cmi stdlib__bytes.cmi stdlib__buffer.cmi
stdlib__buffer.p.cmx : stdlib__uchar.cmx stdlib__sys.cmx stdlib__string.cmx stdlib__char.cmx stdlib__bytes.cmx stdlib__buffer.cmi
stdlib__bytes.cmo : stdlib__char.cmi stdlib__bytes.cmi
stdlib__bytes.p.cmx : stdlib__char.cmx stdlib__bytes.cmi
stdlib__buffer.cmo : stdlib__uchar.cmi stdlib__sys.cmi stdlib__string.cmi stdlib__seq.cmi stdlib__char.cmi stdlib__bytes.cmi \
stdlib__buffer.cmi
stdlib__buffer.p.cmx : stdlib__uchar.cmx stdlib__sys.cmx stdlib__string.cmx stdlib__seq.cmx stdlib__char.cmx stdlib__bytes.cmx \
stdlib__buffer.cmi
stdlib__bytes.cmo : stdlib__sys.cmi stdlib__seq.cmi stdlib__char.cmi stdlib__bytes.cmi
stdlib__bytes.p.cmx : stdlib__sys.cmx stdlib__seq.cmx stdlib__char.cmx stdlib__bytes.cmi
stdlib__bytesLabels.cmo : stdlib__bytes.cmi stdlib__bytesLabels.cmi
stdlib__bytesLabels.p.cmx : stdlib__bytes.cmx stdlib__bytesLabels.cmi
stdlib__callback.cmo : stdlib__obj.cmi stdlib__callback.cmi
Expand Down Expand Up @@ -245,10 +252,10 @@ stdlib__genlex.cmo : stdlib__string.cmi stdlib__stream.cmi stdlib__list.cmi stdl
stdlib__genlex.cmi
stdlib__genlex.p.cmx : stdlib__string.cmx stdlib__stream.cmx stdlib__list.cmx stdlib__hashtbl.cmx stdlib__char.cmx stdlib__bytes.cmx \
stdlib__genlex.cmi
stdlib__hashtbl.cmo : stdlib__sys.cmi stdlib__string.cmi stdlib__random.cmi stdlib__obj.cmi stdlib__lazy.cmi stdlib__array.cmi \
stdlib__hashtbl.cmi
stdlib__hashtbl.p.cmx : stdlib__sys.cmx stdlib__string.cmx stdlib__random.cmx stdlib__obj.cmx stdlib__lazy.cmx stdlib__array.cmx \
stdlib__hashtbl.cmi
stdlib__hashtbl.cmo : stdlib__sys.cmi stdlib__string.cmi stdlib__seq.cmi stdlib__random.cmi stdlib__obj.cmi stdlib__lazy.cmi \
stdlib__array.cmi stdlib__hashtbl.cmi
stdlib__hashtbl.p.cmx : stdlib__sys.cmx stdlib__string.cmx stdlib__seq.cmx stdlib__random.cmx stdlib__obj.cmx stdlib__lazy.cmx \
stdlib__array.cmx stdlib__hashtbl.cmi
stdlib__int32.cmo : stdlib__int32.cmi
stdlib__int32.p.cmx : stdlib__int32.cmi
stdlib__int64.cmo : stdlib__int64.cmi
Expand All @@ -257,12 +264,12 @@ stdlib__lazy.cmo : stdlib__obj.cmi camlinternalLazy.cmi stdlib__lazy.cmi
stdlib__lazy.p.cmx : stdlib__obj.cmx camlinternalLazy.cmx stdlib__lazy.cmi
stdlib__lexing.cmo : stdlib__sys.cmi stdlib__string.cmi stdlib__bytes.cmi stdlib__array.cmi stdlib__lexing.cmi
stdlib__lexing.p.cmx : stdlib__sys.cmx stdlib__string.cmx stdlib__bytes.cmx stdlib__array.cmx stdlib__lexing.cmi
stdlib__list.cmo : stdlib__list.cmi
stdlib__list.p.cmx : stdlib__list.cmi
stdlib__list.cmo : stdlib__seq.cmi stdlib__list.cmi
stdlib__list.p.cmx : stdlib__seq.cmx stdlib__list.cmi
stdlib__listLabels.cmo : stdlib__list.cmi stdlib__listLabels.cmi
stdlib__listLabels.p.cmx : stdlib__list.cmx stdlib__listLabels.cmi
stdlib__map.cmo : stdlib__map.cmi
stdlib__map.p.cmx : stdlib__map.cmi
stdlib__map.cmo : stdlib__seq.cmi stdlib__map.cmi
stdlib__map.p.cmx : stdlib__seq.cmx stdlib__map.cmi
stdlib__marshal.cmo : stdlib__bytes.cmi stdlib__marshal.cmi
stdlib__marshal.p.cmx : stdlib__bytes.cmx stdlib__marshal.cmi
stdlib__moreLabels.cmo : stdlib__set.cmi stdlib__map.cmi stdlib__hashtbl.cmi stdlib__moreLabels.cmi
Expand All @@ -281,8 +288,8 @@ stdlib__printf.cmo : camlinternalFormatBasics.cmi camlinternalFormat.cmi stdlib_
stdlib__printf.cmi
stdlib__printf.p.cmx : camlinternalFormatBasics.cmx camlinternalFormat.cmx stdlib__buffer.cmx \
stdlib__printf.cmi
stdlib__queue.cmo : stdlib__queue.cmi
stdlib__queue.p.cmx : stdlib__queue.cmi
stdlib__queue.cmo : stdlib__seq.cmi stdlib__queue.cmi
stdlib__queue.p.cmx : stdlib__seq.cmx stdlib__queue.cmi
stdlib__random.cmo : stdlib__string.cmi stdlib__nativeint.cmi stdlib__int64.cmi stdlib__int32.cmi stdlib__digest.cmi \
stdlib__char.cmi stdlib__array.cmi stdlib__random.cmi
stdlib__random.p.cmx : stdlib__string.cmx stdlib__nativeint.cmx stdlib__int64.cmx stdlib__int32.cmx stdlib__digest.cmx \
Expand All @@ -291,14 +298,16 @@ stdlib__scanf.cmo : stdlib__string.cmi stdlib__printf.cmi stdlib__list.cmi camli
camlinternalFormat.cmi stdlib__bytes.cmi stdlib__buffer.cmi stdlib__scanf.cmi
stdlib__scanf.p.cmx : stdlib__string.cmx stdlib__printf.cmx stdlib__list.cmx camlinternalFormatBasics.cmx \
camlinternalFormat.cmx stdlib__bytes.cmx stdlib__buffer.cmx stdlib__scanf.cmi
stdlib__set.cmo : stdlib__list.cmi stdlib__set.cmi
stdlib__set.p.cmx : stdlib__list.cmx stdlib__set.cmi
stdlib__seq.cmo : stdlib__seq.cmi
stdlib__seq.p.cmx : stdlib__seq.cmi
stdlib__set.cmo : stdlib__seq.cmi stdlib__list.cmi stdlib__set.cmi
stdlib__set.p.cmx : stdlib__seq.cmx stdlib__list.cmx stdlib__set.cmi
stdlib__sort.cmo : stdlib__array.cmi stdlib__sort.cmi
stdlib__sort.p.cmx : stdlib__array.cmx stdlib__sort.cmi
stdlib__spacetime.cmo : stdlib__gc.cmi stdlib__spacetime.cmi
stdlib__spacetime.p.cmx : stdlib__gc.cmx stdlib__spacetime.cmi
stdlib__stack.cmo : stdlib__list.cmi stdlib__stack.cmi
stdlib__stack.p.cmx : stdlib__list.cmx stdlib__stack.cmi
stdlib__stack.cmo : stdlib__seq.cmi stdlib__list.cmi stdlib__stack.cmi
stdlib__stack.p.cmx : stdlib__seq.cmx stdlib__list.cmx stdlib__stack.cmi
stdlib__stdLabels.cmo : stdlib__stringLabels.cmi stdlib__listLabels.cmi stdlib__bytesLabels.cmi \
stdlib__arrayLabels.cmi stdlib__stdLabels.cmi
stdlib__stdLabels.p.cmx : stdlib__stringLabels.cmx stdlib__listLabels.cmx stdlib__bytesLabels.cmx \
Expand Down
5 changes: 3 additions & 2 deletions stdlib/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,9 @@ CAMLDEP=$(CAMLRUN) ../tools/ocamldep
P=stdlib__

OBJS=camlinternalFormatBasics.cmo stdlib.cmo $(OTHERS)
OTHERS=$(P)list.cmo $(P)char.cmo $(P)uchar.cmo $(P)bytes.cmo $(P)string.cmo \
$(P)sys.cmo $(P)sort.cmo $(P)marshal.cmo $(P)obj.cmo $(P)float.cmo $(P)array.cmo \
OTHERS=$(P)seq.cmo $(P)list.cmo $(P)char.cmo $(P)uchar.cmo $(P)sys.cmo \
$(P)bytes.cmo $(P)string.cmo \
$(P)sort.cmo $(P)marshal.cmo $(P)obj.cmo $(P)float.cmo $(P)array.cmo \
$(P)int32.cmo $(P)int64.cmo $(P)nativeint.cmo \
$(P)lexing.cmo $(P)parsing.cmo \
$(P)set.cmo $(P)map.cmo $(P)stack.cmo $(P)queue.cmo \
Expand Down
1 change: 1 addition & 0 deletions stdlib/StdlibModules
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ STDLIB_MODULES=\
$(P)queue \
$(P)random \
$(P)scanf \
$(P)seq \
$(P)set \
$(P)sort \
$(P)stack \
Expand Down
37 changes: 37 additions & 0 deletions stdlib/array.ml
Original file line number Diff line number Diff line change
Expand Up @@ -302,3 +302,40 @@ let stable_sort cmp a =


let fast_sort = stable_sort

(** {6 Iterators} *)

let to_seq a =
let rec aux i () =
if i < length a
then
let x = unsafe_get a i in
Seq.Cons (x, aux (i+1))
else Seq.Nil
in
aux 0

let to_seqi a =
let rec aux i () =
if i < length a
then
let x = unsafe_get a i in
Seq.Cons ((i,x), aux (i+1))
else Seq.Nil
in
aux 0

let of_rev_list = function
[] -> [||]
| hd::tl as l ->
let len = list_length 0 l in
let a = create len hd in
let rec fill i = function
[] -> a
| hd::tl -> unsafe_set a i hd; fill (i-1) tl
in
fill (len-1) tl

let of_seq i =
let l = Seq.fold_left (fun acc x -> x::acc) [] i in
of_rev_list l
Loading

0 comments on commit df80f34

Please sign in to comment.