mirror of
https://github.com/c-cube/iter.git
synced 2025-12-11 05:28:31 -05:00
Compare commits
No commits in common. "a525d4902c9fb71e6acd84ee1f2ab8e1f3eefb10" and "fc69ce4c919cdd04fb5041410fd61d5a3f742702" have entirely different histories.
a525d4902c
...
fc69ce4c91
8 changed files with 33 additions and 28 deletions
9
.github/workflows/gh-pages.yml
vendored
9
.github/workflows/gh-pages.yml
vendored
|
|
@ -11,7 +11,14 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@main
|
- uses: actions/checkout@main
|
||||||
|
|
||||||
- uses: ocaml/setup-ocaml@v3
|
- name: Cache opam
|
||||||
|
id: cache-opam
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ~/.opam
|
||||||
|
key: opam-ubuntu-latest-4.12.0
|
||||||
|
|
||||||
|
- uses: ocaml/setup-ocaml@v2
|
||||||
with:
|
with:
|
||||||
ocaml-compiler: '4.14.x'
|
ocaml-compiler: '4.14.x'
|
||||||
allow-prerelease-opam: true
|
allow-prerelease-opam: true
|
||||||
|
|
|
||||||
2
.github/workflows/main.yml
vendored
2
.github/workflows/main.yml
vendored
|
|
@ -21,7 +21,7 @@ jobs:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- uses: ocaml/setup-ocaml@v3
|
- uses: ocaml/setup-ocaml@v2
|
||||||
with:
|
with:
|
||||||
ocaml-compiler: ${{ matrix.ocaml-compiler }}
|
ocaml-compiler: ${{ matrix.ocaml-compiler }}
|
||||||
allow-prerelease-opam: true
|
allow-prerelease-opam: true
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
version = 0.26.2
|
version = 0.24.1
|
||||||
profile=conventional
|
profile=conventional
|
||||||
margin=80
|
margin=80
|
||||||
if-then-else=k-r
|
if-then-else=k-r
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,4 @@
|
||||||
|
|
||||||
# 1.9
|
|
||||||
|
|
||||||
|
|
||||||
- Switch exceptions used for control flow from global to local
|
|
||||||
- Update Iter.ml to use mutable fields instead of refs (#44)
|
|
||||||
|
|
||||||
# 1.8
|
# 1.8
|
||||||
|
|
||||||
- add `Iter.map_while`
|
- add `Iter.map_while`
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
opam-version: "2.0"
|
opam-version: "2.0"
|
||||||
name: "iter"
|
name: "iter"
|
||||||
version: "1.9"
|
version: "1.8"
|
||||||
authors: ["Simon Cruanes" "Gabriel Radanne"]
|
authors: ["Simon Cruanes" "Gabriel Radanne"]
|
||||||
maintainer: "simon.cruanes.2007@m4x.org"
|
maintainer: "simon.cruanes.2007@m4x.org"
|
||||||
license: "BSD-2-clause"
|
license: "BSD-2-clause"
|
||||||
|
|
|
||||||
36
src/Iter.ml
36
src/Iter.ml
|
|
@ -330,8 +330,9 @@ let sort ?(cmp = Stdlib.compare) seq =
|
||||||
let l = List.fast_sort cmp l in
|
let l = List.fast_sort cmp l in
|
||||||
fun k -> List.iter k l
|
fun k -> List.iter k l
|
||||||
|
|
||||||
|
exception Exit_sorted
|
||||||
|
|
||||||
let sorted ?(cmp = Stdlib.compare) seq =
|
let sorted ?(cmp = Stdlib.compare) seq =
|
||||||
let exception Exit_sorted in
|
|
||||||
let prev = ref None in
|
let prev = ref None in
|
||||||
try
|
try
|
||||||
seq (fun x ->
|
seq (fun x ->
|
||||||
|
|
@ -555,8 +556,9 @@ let diff (type a) ?(eq = ( = )) ?(hash = Hashtbl.hash) c1 c2 =
|
||||||
c2 (fun x -> Tbl.replace tbl x ());
|
c2 (fun x -> Tbl.replace tbl x ());
|
||||||
fun yield -> c1 (fun x -> if not (Tbl.mem tbl x) then yield x)
|
fun yield -> c1 (fun x -> if not (Tbl.mem tbl x) then yield x)
|
||||||
|
|
||||||
|
exception Subset_exit
|
||||||
|
|
||||||
let subset (type a) ?(eq = ( = )) ?(hash = Hashtbl.hash) c1 c2 =
|
let subset (type a) ?(eq = ( = )) ?(hash = Hashtbl.hash) c1 c2 =
|
||||||
let exception Subset_exit in
|
|
||||||
let module Tbl = Hashtbl.Make (struct
|
let module Tbl = Hashtbl.Make (struct
|
||||||
type t = a
|
type t = a
|
||||||
|
|
||||||
|
|
@ -628,8 +630,9 @@ let sumf seq : float =
|
||||||
sum := t);
|
sum := t);
|
||||||
!sum
|
!sum
|
||||||
|
|
||||||
|
exception ExitHead
|
||||||
|
|
||||||
let head seq =
|
let head seq =
|
||||||
let exception ExitHead in
|
|
||||||
let r = ref None in
|
let r = ref None in
|
||||||
try
|
try
|
||||||
seq (fun x ->
|
seq (fun x ->
|
||||||
|
|
@ -643,8 +646,9 @@ let head_exn seq =
|
||||||
| None -> invalid_arg "Iter.head_exn"
|
| None -> invalid_arg "Iter.head_exn"
|
||||||
| Some x -> x
|
| Some x -> x
|
||||||
|
|
||||||
|
exception ExitTake
|
||||||
|
|
||||||
let take n seq k =
|
let take n seq k =
|
||||||
let exception ExitTake in
|
|
||||||
let count = ref 0 in
|
let count = ref 0 in
|
||||||
try
|
try
|
||||||
seq (fun x ->
|
seq (fun x ->
|
||||||
|
|
@ -653,8 +657,9 @@ let take n seq k =
|
||||||
k x)
|
k x)
|
||||||
with ExitTake -> ()
|
with ExitTake -> ()
|
||||||
|
|
||||||
|
exception ExitTakeWhile
|
||||||
|
|
||||||
let take_while p seq k =
|
let take_while p seq k =
|
||||||
let exception ExitTakeWhile in
|
|
||||||
try
|
try
|
||||||
seq (fun x ->
|
seq (fun x ->
|
||||||
if p x then
|
if p x then
|
||||||
|
|
@ -663,6 +668,8 @@ let take_while p seq k =
|
||||||
raise_notrace ExitTakeWhile)
|
raise_notrace ExitTakeWhile)
|
||||||
with ExitTakeWhile -> ()
|
with ExitTakeWhile -> ()
|
||||||
|
|
||||||
|
exception ExitFoldWhile
|
||||||
|
|
||||||
let map_while f seq k =
|
let map_while f seq k =
|
||||||
let exception ExitMapWhile in
|
let exception ExitMapWhile in
|
||||||
let consume x =
|
let consume x =
|
||||||
|
|
@ -676,7 +683,6 @@ let map_while f seq k =
|
||||||
try seq consume with ExitMapWhile -> ()
|
try seq consume with ExitMapWhile -> ()
|
||||||
|
|
||||||
let fold_while f s seq =
|
let fold_while f s seq =
|
||||||
let exception ExitFoldWhile in
|
|
||||||
let state = ref s in
|
let state = ref s in
|
||||||
let consume x =
|
let consume x =
|
||||||
let acc, cont = f !state x in
|
let acc, cont = f !state x in
|
||||||
|
|
@ -715,16 +721,18 @@ let rev seq =
|
||||||
let l = MList.of_iter seq in
|
let l = MList.of_iter seq in
|
||||||
fun k -> MList.iter_rev k l
|
fun k -> MList.iter_rev k l
|
||||||
|
|
||||||
|
exception ExitForall
|
||||||
|
|
||||||
let for_all p seq =
|
let for_all p seq =
|
||||||
let exception ExitForall in
|
|
||||||
try
|
try
|
||||||
seq (fun x -> if not (p x) then raise_notrace ExitForall);
|
seq (fun x -> if not (p x) then raise_notrace ExitForall);
|
||||||
true
|
true
|
||||||
with ExitForall -> false
|
with ExitForall -> false
|
||||||
|
|
||||||
|
exception ExitExists
|
||||||
|
|
||||||
(** Exists there some element satisfying the predicate? *)
|
(** Exists there some element satisfying the predicate? *)
|
||||||
let exists p seq =
|
let exists p seq =
|
||||||
let exception ExitExists in
|
|
||||||
try
|
try
|
||||||
seq (fun x -> if p x then raise_notrace ExitExists);
|
seq (fun x -> if p x then raise_notrace ExitExists);
|
||||||
false
|
false
|
||||||
|
|
@ -732,8 +740,9 @@ let exists p seq =
|
||||||
|
|
||||||
let mem ?(eq = ( = )) x seq = exists (eq x) seq
|
let mem ?(eq = ( = )) x seq = exists (eq x) seq
|
||||||
|
|
||||||
|
exception ExitFind
|
||||||
|
|
||||||
let find_map f seq =
|
let find_map f seq =
|
||||||
let exception ExitFind in
|
|
||||||
let r = ref None in
|
let r = ref None in
|
||||||
(try
|
(try
|
||||||
seq (fun x ->
|
seq (fun x ->
|
||||||
|
|
@ -748,7 +757,6 @@ let find_map f seq =
|
||||||
let find = find_map
|
let find = find_map
|
||||||
|
|
||||||
let find_mapi f seq =
|
let find_mapi f seq =
|
||||||
let exception ExitFind in
|
|
||||||
let i = ref 0 in
|
let i = ref 0 in
|
||||||
let r = ref None in
|
let r = ref None in
|
||||||
(try
|
(try
|
||||||
|
|
@ -782,8 +790,9 @@ let[@inline] length seq =
|
||||||
seq (fun _ -> incr r);
|
seq (fun _ -> incr r);
|
||||||
!r
|
!r
|
||||||
|
|
||||||
|
exception ExitIsEmpty
|
||||||
|
|
||||||
let is_empty seq =
|
let is_empty seq =
|
||||||
let exception ExitIsEmpty in
|
|
||||||
try
|
try
|
||||||
seq (fun _ -> raise_notrace ExitIsEmpty);
|
seq (fun _ -> raise_notrace ExitIsEmpty);
|
||||||
true
|
true
|
||||||
|
|
@ -1031,14 +1040,9 @@ module Map = struct
|
||||||
let of_iter_ seq = fold (fun m (k, v) -> M.add k v m) M.empty seq
|
let of_iter_ seq = fold (fun m (k, v) -> M.add k v m) M.empty seq
|
||||||
let keys m = from_iter (fun k -> M.iter (fun x _ -> k x) m)
|
let keys m = from_iter (fun k -> M.iter (fun x _ -> k x) m)
|
||||||
let values m = from_iter (fun k -> M.iter (fun _ y -> k y) m)
|
let values m = from_iter (fun k -> M.iter (fun _ y -> k y) m)
|
||||||
|
|
||||||
[@@@ocaml.warning "-32"]
|
|
||||||
|
|
||||||
let of_list l = of_iter_ (of_list l)
|
let of_list l = of_iter_ (of_list l)
|
||||||
let to_list x = to_list (to_iter_ x)
|
let to_list x = to_list (to_iter_ x)
|
||||||
|
|
||||||
[@@@ocaml.warning "+32"]
|
|
||||||
|
|
||||||
include M
|
include M
|
||||||
|
|
||||||
let to_iter = to_iter_
|
let to_iter = to_iter_
|
||||||
|
|
|
||||||
|
|
@ -22,4 +22,4 @@ let mmap filename yield =
|
||||||
with e ->
|
with e ->
|
||||||
Unix.close fd;
|
Unix.close fd;
|
||||||
raise e
|
raise e
|
||||||
[@@ocaml.warning "-3"]
|
[@@ocaml.warning "-3"]
|
||||||
|
|
|
||||||
2
src/dune
2
src/dune
|
|
@ -3,7 +3,7 @@
|
||||||
(public_name iter)
|
(public_name iter)
|
||||||
(wrapped false)
|
(wrapped false)
|
||||||
(modules Iter IterLabels)
|
(modules Iter IterLabels)
|
||||||
(flags :standard -w +a-4 -warn-error -a+8 -nolabels))
|
(flags :standard -w +a -warn-error -a+8 -nolabels))
|
||||||
|
|
||||||
(env
|
(env
|
||||||
(_
|
(_
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue