sig
  module StmtSetRef :
    functor (Info : Signature.NAME_DPDS->
      sig
        val self : Project.Computation.t
        val select :
          Kind.how ->
          Project.Computation.selection -> Project.Computation.selection
        val depend : Project.Computation.t -> unit
        val mark_as_computed : ?project:Project.project -> unit -> unit
        val is_computed : ?project:Project.project -> unit -> bool
        val do_not_save : unit -> unit
        module Datatype : Project.Datatype.S
        val name : string
        type elt = Cil_types.stmt
        val add : elt -> unit
        val mem : elt -> bool
        val is_empty : unit -> bool
        val fold : (elt -> '-> 'a) -> '-> 'a
        val iter : (elt -> unit) -> unit
      end
  module IntHashtbl :
    functor (Data : Project.Datatype.S->
      functor (Info : Signature.NAME_SIZE_DPDS->
        sig
          val self : Project.Computation.t
          val select :
            Kind.how ->
            Project.Computation.selection -> Project.Computation.selection
          val depend : Project.Computation.t -> unit
          val mark_as_computed : ?project:Project.project -> unit -> unit
          val is_computed : ?project:Project.project -> unit -> bool
          val do_not_save : unit -> unit
          module Datatype : Project.Datatype.S
          val name : string
          type key = int
          type data = Data.t
          val replace : key -> data -> unit
          val add : key -> data -> unit
          val clear : unit -> unit
          val length : unit -> int
          val iter : (key -> data -> unit) -> unit
          val fold : (key -> data -> '-> 'a) -> '-> 'a
          val memo : ?change:(data -> data) -> (key -> data) -> key -> data
          val find : key -> data
          val find_all : key -> data list
          val unsafe_find : key -> data
          val mem : key -> bool
          val remove : key -> unit
        end
  module InstrHashtbl :
    functor (Data : Project.Datatype.S->
      functor (Info : Signature.NAME_SIZE_DPDS->
        sig
          val self : Project.Computation.t
          val select :
            Kind.how ->
            Project.Computation.selection -> Project.Computation.selection
          val depend : Project.Computation.t -> unit
          val mark_as_computed : ?project:Project.project -> unit -> unit
          val is_computed : ?project:Project.project -> unit -> bool
          val do_not_save : unit -> unit
          module Datatype : Project.Datatype.S
          val name : string
          type key = Cil_types.kinstr
          type data = Data.t
          val replace : key -> data -> unit
          val add : key -> data -> unit
          val clear : unit -> unit
          val length : unit -> int
          val iter : (key -> data -> unit) -> unit
          val fold : (key -> data -> '-> 'a) -> '-> 'a
          val memo : ?change:(data -> data) -> (key -> data) -> key -> data
          val find : key -> data
          val find_all : key -> data list
          val unsafe_find : key -> data
          val mem : key -> bool
          val remove : key -> unit
        end
  module StmtHashtbl :
    functor (Data : Project.Datatype.S->
      functor (Info : Signature.NAME_SIZE_DPDS->
        sig
          val self : Project.Computation.t
          val select :
            Kind.how ->
            Project.Computation.selection -> Project.Computation.selection
          val depend : Project.Computation.t -> unit
          val mark_as_computed : ?project:Project.project -> unit -> unit
          val is_computed : ?project:Project.project -> unit -> bool
          val do_not_save : unit -> unit
          module Datatype : Project.Datatype.S
          val name : string
          type key = Cil_types.stmt
          type data = Data.t
          val replace : key -> data -> unit
          val add : key -> data -> unit
          val clear : unit -> unit
          val length : unit -> int
          val iter : (key -> data -> unit) -> unit
          val fold : (key -> data -> '-> 'a) -> '-> 'a
          val memo : ?change:(data -> data) -> (key -> data) -> key -> data
          val find : key -> data
          val find_all : key -> data list
          val unsafe_find : key -> data
          val mem : key -> bool
          val remove : key -> unit
        end
  module VarinfoHashtbl :
    functor (Data : Project.Datatype.S->
      functor (Info : Signature.NAME_SIZE_DPDS->
        sig
          val self : Project.Computation.t
          val select :
            Kind.how ->
            Project.Computation.selection -> Project.Computation.selection
          val depend : Project.Computation.t -> unit
          val mark_as_computed : ?project:Project.project -> unit -> unit
          val is_computed : ?project:Project.project -> unit -> bool
          val do_not_save : unit -> unit
          module Datatype : Project.Datatype.S
          val name : string
          type key = Cil_types.varinfo
          type data = Data.t
          val replace : key -> data -> unit
          val add : key -> data -> unit
          val clear : unit -> unit
          val length : unit -> int
          val iter : (key -> data -> unit) -> unit
          val fold : (key -> data -> '-> 'a) -> '-> 'a
          val memo : ?change:(data -> data) -> (key -> data) -> key -> data
          val find : key -> data
          val find_all : key -> data list
          val unsafe_find : key -> data
          val mem : key -> bool
          val remove : key -> unit
        end
  module CodeAnnotationHashtbl :
    functor (Data : Project.Datatype.S->
      functor (Info : Signature.NAME_SIZE_DPDS->
        sig
          val self : Project.Computation.t
          val select :
            Kind.how ->
            Project.Computation.selection -> Project.Computation.selection
          val depend : Project.Computation.t -> unit
          val mark_as_computed : ?project:Project.project -> unit -> unit
          val is_computed : ?project:Project.project -> unit -> bool
          val do_not_save : unit -> unit
          module Datatype : Project.Datatype.S
          val name : string
          type key = Cil_types.code_annotation
          type data = Data.t
          val replace : key -> data -> unit
          val add : key -> data -> unit
          val clear : unit -> unit
          val length : unit -> int
          val iter : (key -> data -> unit) -> unit
          val fold : (key -> data -> '-> 'a) -> '-> 'a
          val memo : ?change:(data -> data) -> (key -> data) -> key -> data
          val find : key -> data
          val find_all : key -> data list
          val unsafe_find : key -> data
          val mem : key -> bool
          val remove : key -> unit
        end
end