This file is indexed.

/usr/lib/ocaml/batteries/batRef.mli is in libbatteries-ocaml-dev 2.6.0-1build1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
132
133
134
135
136
137
138
139
140
(*
 * Ref - Operations on references
 * Copyright (C) 2008 David Teller
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version,
 * with the special exception on linking described in file LICENSE.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *)

(** Operations on references.

    References are mutable values, i.e. "variables" which may actually
    change value during their life-time, as variables in imperative
    languages. References can be understood as 1-cell arrays and
    are typically used to implement imperative algorithms in OCaml.

    References are useful but don't abuse them.

    @author Xavier Leroy (base module)
    @author David Teller
*)

type 'a t = 'a ref
(** The type of references.*)

external ref : 'a -> 'a ref = "%makemutable"
(** Return a fresh reference containing the given value. *)

external ( ! ) : 'a ref -> 'a = "%field0"
(** [!r] returns the current contents of reference [r].
    Equivalent to [fun r -> r.contents]. *)

external ( := ) : 'a ref -> 'a -> unit = "%setfield0"
(** [r := a] stores the value of [a] in reference [r].
    Equivalent to [fun r v -> r.contents <- v]. *)

external set : 'a ref -> 'a -> unit = "%setfield0"
(** As [ := ] *)

external get : 'a ref -> 'a = "%field0"
(** As [ ! ]*)

val copy: 'a ref -> 'a ref
(** [copy r] returns a new reference with the same initial
    content as [r].*)

val pre : 'a ref -> ( 'a -> 'a ) -> 'a
(** Perform an operation on a reference and return the
    new value of that reference.

    For instance, if [x] is a reference to [1],
    [pre x ( ( + ) 1) ] returns [2] and sets [x] to [2].*)

val post: 'a ref -> ('a -> 'a) -> 'a
(** Perform an operation on a reference and return the
    previous value of that reference.

    For instance, if [x] is a reference to [1],
    [post x ( ( + ) 1)] returns [1] and sets [x] to [2].*)


val swap: 'a ref -> 'a ref -> unit
(**[swap a b] puts [!b] in [a] and [!a] in [b]*)

val post_incr : int ref -> int
(**Increment an integer, return the old value.

   Comparable to C or Java's [i++].*)

val post_decr : int ref -> int
(**Decrement an integer, return the old value.


   Comparable to C or Java 's [i--].*)

val pre_incr: int ref -> int
(**Increment an integer, return the new value.

   Comparable to C or Java's [++i]. *)

val pre_decr: int ref -> int
(**Increment an integer, return the new value.

   Comparable to C or Java's [--i]. *)

val protect : 'a ref -> 'a -> (unit -> 'b) -> 'b
(**Assign a reference temporarily.

   [protect r v body] sets the value of [r] to [v] and executes
   [body]. Once body has been executed, whether termination happens
   as a consequence of regular evaluation or exception, the previous
   value of [r] is restored. *)

val toggle : bool ref -> unit
(** Invert the boolean stored in the reference*)

val oset : 'a option ref -> 'a -> unit
(** Set the given option ref to [Some x] *)

val oget_exn : 'a option ref -> 'a
(** Get a value from an option ref;
    @raise Not_found on [oget_exn (ref None)] *)

(** {6 Boilerplate code}*)

val print: ('b BatInnerIO.output -> 'a -> unit) -> 'b BatInnerIO.output -> 'a t -> unit

(** Given a printing function for the value in the ref, produce a
    printing function for the ref.

    Example: [IO.to_string (Ref.print Int.print) (ref 20) = "20"]
*)

val compare : 'a BatOrd.comp -> 'a ref BatOrd.comp
(** Given a comparison function, produce a comparison function for refs
    of that type.

    Example: [let a = ref 10 and b = ref 20 in Ref.compare Int.compare a b = -1]
*)

val ord : 'a BatOrd.ord -> 'a ref BatOrd.ord

(** Given an ordering function, produce an ordering function for refs
    of that type.

    Example: [let a = ref 10 and b = ref 20 in Ref.ord Int.ord a b = Ord.Lt]
*)

val eq : 'a BatOrd.eq -> 'a ref BatOrd.eq