package capnp-rpc

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file dyn_array.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
type 'a t = {
  unused : 'a;
  mutable items : 'a array;
  mutable len : int;
}

let create ~unused size =
  let size = if size < 1 then 1 else size in
  let items = Array.make size unused in
  { unused; items; len = 0 }

let add t item =
  if t.len = Array.length t.items then (
    let new_cap = Array.length t.items * 2 in
    t.items <- Array.init new_cap (fun i ->
        if i < t.len then t.items.(i)
        else t.unused
      );
  );
  t.items.(t.len) <- item;
  t.len <- t.len + 1

let get_exn t i =
  if i < 0 || i >= t.len then failwith "Dyn_array: out of bounds array access";
  Array.get t.items i

let get ~oob t i =
  if i < 0 || i >= t.len then oob
  else Array.get t.items i

let replace t i v =
  if i < 0 || i >= t.len then failwith "Dyn_array: out of bounds array access";
  let old = t.items.(i) in
  Array.set t.items i v;
  old

let reset t =
  for i = 0 to t.len - 1 do
    t.items.(i) <- t.unused;
  done;
  t.len <- 0

let iter f t =
  let items = t.items in
  for i = 0 to t.len - 1 do
    f items.(i);
  done

let snapshot t =
  let items = t.items in
  RO_array.init t.len (Array.get items)

let length t = t.len

let pp pp f t =
  for i = 0 to t.len - 1 do
    if i > 0 then Fmt.pf f ",@ ";
    pp f t.items.(i)
  done
OCaml

Innovation. Community. Security.