package containers
A modular, clean and powerful extension of the OCaml standard library
Install
Dune Dependency
Authors
Maintainers
Sources
v2.8.1.tar.gz
md5=d84e09c5d0abc501aa17cd502e31a038
sha512=8b832f4ada6035e80d81be0cfb7bdffb695ec67d465ed6097a144019e2b8a8f909095e78019c3da2d8181cc3cd730cd48f7519e87d3162442562103b7f36aabb
doc/src/containers.data/CCImmutArray.ml.html
Source file CCImmutArray.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
(* This file is free software, part of containers. See file "license" for more details. *) (** {1 Immutable Arrays} *) (* TODO: tests *) (* TODO: transient API? for batch modifications *) type 'a t = 'a array let empty = [| |] let length = Array.length let singleton x = [| x |] let doubleton x y = [| x; y |] let make n x = Array.make n x let init n f = Array.init n f let get = Array.get let set a n x = let a' = Array.copy a in a'.(n) <- x; a' let sub = Array.sub (* Would this not be better implemented with CCArray_slice *) let map = Array.map let mapi = Array.mapi let append a b = let na = length a in Array.init (na + length b) (fun i -> if i < na then a.(i) else b.(i-na)) let iter = Array.iter let iteri = Array.iteri let fold = Array.fold_left let foldi f acc a = let n = ref 0 in Array.fold_left (fun acc x -> let acc = f acc !n x in incr n; acc) acc a exception ExitNow let for_all p a = try Array.iter (fun x -> if not (p x) then raise ExitNow) a; true with ExitNow -> false let exists p a = try Array.iter (fun x -> if p x then raise ExitNow) a; false with ExitNow -> true (** {2 Conversions} *) type 'a sequence = ('a -> unit) -> unit type 'a gen = unit -> 'a option let of_list = Array.of_list let to_list = Array.to_list let of_array_unsafe a = a (* careful with that axe, Eugene *) let to_seq a k = iter k a let of_seq s = let l = ref [] in s (fun x -> l := x :: !l); Array.of_list (List.rev !l) (*$Q Q.(list int) (fun l -> \ let g = Iter.of_list l in \ of_seq g |> to_seq |> Iter.to_list = l) *) let rec gen_to_list_ acc g = match g() with | None -> List.rev acc | Some x -> gen_to_list_ (x::acc) g let of_gen g = let l = gen_to_list_ [] g in Array.of_list l let to_gen a = let i = ref 0 in fun () -> if !i < Array.length a then ( let x = a.(!i) in incr i; Some x ) else None (*$Q Q.(list int) (fun l -> \ let g = Gen.of_list l in \ of_gen g |> to_gen |> Gen.to_list = l) *) (** {2 IO} *) type 'a printer = Format.formatter -> 'a -> unit let pp ?(start="") ?(stop="") ?(sep=", ") pp_item out a = Format.pp_print_string out start; for k = 0 to Array.length a - 1 do if k > 0 then ( Format.pp_print_string out sep; Format.pp_print_cut out () ); pp_item out a.(k) done; Format.pp_print_string out stop; ()
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>