package capnp-rpc

  1. Overview
  2. Docs
Cap'n Proto is a capability-based RPC system with bindings for many languages

Install

dune-project
 Dependency

Authors

Maintainers

Sources

capnp-rpc-2.1.2.tbz
sha256=ef3f64b22d90bfe87f96e751bc61d29646c970032803c4135bec8626aecf704d
sha512=41731da19a0ec67ae8d519f70ba95bae143493df64133965e9dfd9eb7ca33c745efa6047f8784689be6230a2fefd77649b61635e9b713366e42fd8e89ee07512

doc/src/capnp-rpc.proto/rC.ml.html

Source file rC.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
type t = int

let leaked  = -1
let zero    =  0
let one     =  1

let pp f = function
  | -1 -> Fmt.pf f "rc=%a" Fmt.(styled `Red string) "LEAKED"
  | 0  -> Fmt.pf f "rc=%a" Fmt.(styled `Red int) 0
  | t  -> Fmt.pf f "rc=%d" t

let sum ~pp:pp_obj t d =
  if t > 0 then (
    let t' = t + d in
    if t' < 0 then (
      if d > 0 then Fmt.failwith "Ref-count %a + %d would wrap!" pp t d pp_obj
      else Fmt.failwith "Ref-count %a - %d would go negative!" pp t (-d) pp_obj
    );
    t'
  ) else if d >= 0 then (
    Fmt.failwith "Attempt to change ref-count (to %a+%d) on freed resource %t" pp t d pp_obj
  ) else (
    Fmt.failwith "Attempt to change ref-count (to %a%d) on freed resource %t" pp t d pp_obj
  )

let succ ~pp t = sum ~pp t 1
let pred ~pp t = sum ~pp t (-1)

let is_zero = function
  | 0 -> true
  | _ -> false

let check ~pp t =
  if t < 1 then
    Debug.invariant_broken (fun f -> Fmt.pf f "Already unref'd! %t" pp)

let to_int t =
  if t >= 0 then Some t
  else None