/usr/lib/ocaml/apron/oct.idl is in libapron-ocaml-dev 0.9.10-7.
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 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 | /* -*- mode: c -*- */
/*
* oct.idl
*
* OCaml interface specification for camlidl
*
* APRON Library / Octagonal Domain
*
* Copyright (C) Antoine Mine' 2006
*
*/
/* This file is part of the APRON Library, released under LGPL license.
Please read the COPYING file packaged in the distribution.
*/
quote(C,"/*\n This file is part of the APRON Library, released under LGPL license.\n Please read the COPYING file packaged in the distribution.\n*/")
quote(MLMLI,"(*\n This file is part of the APRON Library, released under LGPL license.\n Please read the COPYING file packaged in the distribution.\n*)")
quote(MLI,"\n \n(** Octagon abstract domain. *)\n \n")
quote(C,"#include \"oct.h\"")
quote(C,"#include \"apron_caml.h\"")
quote(C,"#define I0_CHECK_EXC(man) if (man->result.exn!=AP_EXC_NONE){ value v = camlidl_c2ml_manager_struct_ap_exclog_t(man->result.exclog,_ctx); caml_raise_with_arg(*caml_named_value(\"apron exception\"),v); } ")
quote(C,"typedef struct oct_internal_t* internal_ptr;")
import "generator0.idl";
import "abstract0.idl";
import "scalar.idl";
import "manager.idl";
typedef [abstract] struct oct_internal_t* internal_ptr;
quote(MLMLI,"\n \n\
type t\n\
(** Type of octagons.\n\n\
Octagons are defined by conjunctions of inequalities of the form\n\
[+/-x_i +/- x_j >= 0].\n\n\
Abstract values which are octagons have the type [t Apron.AbstractX.t].\n\n\
Managers allocated for octagons have the type [t Apron.manager.t].\n\
*)\n\n \
")
quote(MLI,"(** Allocate a new manager to manipulate octagons. *)")
ap_manager_ptr oct_manager_alloc(void);
quote(MLI,"(** No internal parameters for now... *)")
internal_ptr manager_get_internal(ap_manager_ptr man)
quote(call,"_res = (internal_ptr)man->internal;");
quote(MLI,"(** Approximate a set of generators to an abstract value, with best precision. *)")
ap_abstract0_ptr ap_abstract0_oct_of_generator_array(ap_manager_ptr man, int v1, int v2, [ref]struct ap_generator0_array_t* v3)
quote(dealloc,"I0_CHECK_EXC(man)");
quote(MLI,"(** Widening with scalar thresholds. *)")
ap_abstract0_ptr ap_abstract0_oct_widening_thresholds(ap_manager_ptr man,ap_abstract0_ptr a1,ap_abstract0_ptr a2,struct ap_scalar_array_t array)
quote(call,"_res = ap_abstract0_oct_widening_thresholds(man,a1,a2,(const ap_scalar_t**)array.p,array.size);")
quote(dealloc,"I0_CHECK_EXC(man)");
quote(MLI,"(** Standard narrowing. *)")
ap_abstract0_ptr ap_abstract0_oct_narrowing(ap_manager_ptr man, ap_abstract0_ptr a1,ap_abstract0_ptr a2)
quote(dealloc,"I0_CHECK_EXC(man)");
quote(MLI,"(** Perturbation. *)")
ap_abstract0_ptr ap_abstract0_oct_add_epsilon(ap_manager_ptr man,ap_abstract0_ptr a,ap_scalar_ptr epsilon)
quote(dealloc,"I0_CHECK_EXC(man)");
quote(MLI,"(** Perturbation. *)")
ap_abstract0_ptr ap_abstract0_oct_add_epsilon_bin(ap_manager_ptr man,ap_abstract0_ptr a1,ap_abstract0_ptr a2,ap_scalar_ptr epsilon)
quote(dealloc,"I0_CHECK_EXC(man)");
quote(MLI,"(** Algorithms. *)")
const int pre_widening = 99;
quote(MLI,"\n(** {2 Type conversions} *)
val manager_is_oct : 'a Apron.Manager.t -> bool
(** Return [true] iff the argument manager is an octagon manager *)
val manager_of_oct : t Apron.Manager.t -> 'a Apron.Manager.t
(** Make an octagon manager generic *)
val manager_to_oct : 'a Apron.Manager.t -> t Apron.Manager.t
(** Instanciate the type of an octagon manager.
Raises [Failure] if the argument manager is not an octagon manager *)
module Abstract0 : sig
val is_oct : 'a Apron.Abstract0.t -> bool
(** Return [true] iff the argument value is an oct value *)
val of_oct : t Apron.Abstract0.t -> 'a Apron.Abstract0.t
(** Make an oct value generic *)
val to_oct : 'a Apron.Abstract0.t -> t Apron.Abstract0.t
(** Instanciate the type of an oct value.
Raises [Failure] if the argument value is not an oct value *)
end
module Abstract1 : sig
val is_oct : 'a Apron.Abstract1.t -> bool
(** Return [true] iff the argument value is an oct value *)
val of_oct : t Apron.Abstract1.t -> 'a Apron.Abstract1.t
(** Make an oct value generic *)
val to_oct : 'a Apron.Abstract1.t -> t Apron.Abstract1.t
(** Instanciate the type of an oct value.
Raises [Failure] if the argument value is not an oct value *)
end
")
quote(ML,"
let manager_is_oct man =
let str = Apron.Manager.get_library man in
(String.compare str \"oct\")==0
let manager_of_oct (man:t Apron.Manager.t) : 'a Apron.Manager.t = Obj.magic man
let manager_to_oct (man:'a Apron.Manager.t) : t Apron.Manager.t =
if manager_is_oct man then
Obj.magic man
else
failwith \"Oct.manager_to_oct: the argument manager is not an Oct manager\"
module Abstract0 = struct
let is_oct abs =
manager_is_oct (Apron.Abstract0.manager abs)
let of_oct (abs: t Apron.Abstract0.t) : 'a Apron.Abstract0.t = Obj.magic abs
let to_oct (abs:'a Apron.Abstract0.t) : t Apron.Abstract0.t =
if is_oct abs then
Obj.magic abs
else
failwith \"Oct.Abstract0.to_oct: the argument value is not an oct value\"
end
module Abstract1 = struct
let is_oct abs =
manager_is_oct (Apron.Abstract1.manager abs)
let of_oct (abs: t Apron.Abstract1.t) : 'a Apron.Abstract1.t = Obj.magic abs
let to_oct (abs:'a Apron.Abstract1.t) : t Apron.Abstract1.t =
if is_oct abs then
Obj.magic abs
else
failwith \"Oct.Abstract1.to_oct: the argument value is not an oct value\"
end
")
quote(MLI,"\n(**
{2 Compilation information}
See {!Introduction.compilation} for complete explanations.
We just show examples with the file [mlexample.ml].
{3 Bytecode compilation}
{[ocamlc -I $MLGMPIDL_PREFIX/lib -I $APRON_PREFIX/lib -o mlexample.byte \\
bigarray.cma gmp.cma apron.cma octD.cma mlexample.ml]}
{[ocamlc -I $MLGMPIDL_PREFIX/lib -I $APRON_PREFIX/lib -make-runtime -o myrun \\
bigarray.cma gmp.cma apron.cma octD.cma
ocamlc -I $MLGMPIDL_PREFIX/lib -I $APRON_PREFIX/lib -use-runtime myrun -o mlexample.byte \\
bigarray.cma gmp.cma apron.cma octD.cma mlexample.ml ]}
{3 Native-code compilation}
{[ocamlopt -I $MLGMPIDL_PREFIX/lib -I $APRON_PREFIX/lib -o mlexample.opt \\
bigarray.cmxa gmp.cmxa apron.cmxa octD.cmxa mlexample.ml ]}
{3 Without auto-linking feature}
{[ocamlopt -I $MLGMPIDL_PREFIX/lib -I $APRON_PREFIX/lib -noautolink -o mlexample.opt \\
bigarray.cmxa gmp.cmxa apron.cmxa octD.cmxa mlexample.ml \\
-cclib \"-L$MLGMPIDL_PREFIX/lib -L$APRON_PREFIX/lib \\
-loctD_caml_debug -loctD_debug \\
-lapron_caml_debug -lapron_debug \\
-lgmp_caml -L$MPFR_PREFIX/lib -lmpfr -L$GMP_PREFIX/lib -lgmp \\
-L$CAMLIDL_PREFIX/lib/ocaml -lcamlidl \\
-lbigarray\" ]}
*)")
|