sig
  val update_val : int -> '-> ('a, int) Hashtbl.t -> unit
  val update_val_incr : '-> ('a, int) Hashtbl.t -> unit
  type operand_tbl = {
    var_tbl : (string, int) Hashtbl.t;
    cst_tbl : (Cabs.constant, int) Hashtbl.t;
  }
  type operator_tbl = {
    knownop_tbl : (string, int) Hashtbl.t;
    otherop_tbl : (string, int) Hashtbl.t;
    reserved_tbl : (string, int) Hashtbl.t;
    tspec_tbl : (Cabs.typeSpecifier, int) Hashtbl.t;
  }
  val id_from_init : ('a * 'b * 'c * 'd) * '-> 'a
  class halsteadCabsVisitor :
    object
      val operand_tbl : Metrics_cabs.Halstead.operand_tbl
      val operator_tbl : Metrics_cabs.Halstead.operator_tbl
      method add_paren : unit -> unit
      method get_operand_tbl : unit -> Metrics_cabs.Halstead.operand_tbl
      method get_operator_tbl : unit -> Metrics_cabs.Halstead.operator_tbl
      method vEnterScope : unit -> unit
      method vExitScope : unit -> unit
      method vattr : Cabs.attribute -> Cabs.attribute list Cil.visitAction
      method vblock : Cabs.block -> Cabs.block Cil.visitAction
      method vdecltype : Cabs.decl_type -> Cabs.decl_type Cil.visitAction
      method vdef : Cabs.definition -> Cabs.definition list Cil.visitAction
      method vexpr : Cabs.expression -> Cabs.expression Cil.visitAction
      method vinitexpr :
        Cabs.init_expression -> Cabs.init_expression Cil.visitAction
      method vname :
        Cabsvisit.nameKind ->
        Cabs.specifier -> Cabs.name -> Cabs.name Cil.visitAction
      method vspec : Cabs.specifier -> Cabs.specifier Cil.visitAction
      method vstmt : Cabs.statement -> Cabs.statement list Cil.visitAction
      method vtypespec :
        Cabs.typeSpecifier -> Cabs.typeSpecifier Cil.visitAction
      method vvar : string -> string
    end
  val compose : '-> int -> int * int -> int * int
  val fold : ('a, int) Hashtbl.t -> int * int -> int * int
  val compute_operators : Metrics_cabs.Halstead.operator_tbl -> float * float
  val compute_operands : Metrics_cabs.Halstead.operand_tbl -> float * float
  type halstead_metrics = {
    distinct_operators : float;
    total_operators : float;
    distinct_operands : float;
    total_operands : float;
    program_length : float;
    program_volume : float;
    program_level : float;
    vocabulary_size : float;
    difficulty_level : float;
    effort_to_implement : float;
    time_to_implement : float;
    bugs_delivered : float;
  }
  val to_list : Metrics_cabs.Halstead.halstead_metrics -> string list list
  val pp_metrics :
    Format.formatter ->
    < get_operand_tbl : unit -> Metrics_cabs.Halstead.operand_tbl;
      get_operator_tbl : unit -> Metrics_cabs.Halstead.operator_tbl; .. > ->
    unit
  val compute_metrics : unit -> unit
  val get_metrics : unit -> Metrics_cabs.Halstead.halstead_metrics
end