sig
  exception TooManyFields
  exception Frozen
  module type EMPTY = sig  end
  val max_width : int
  module type S =
    sig
      type t = private int
      val empty : CCBitField.S.t
      type _ field_kind =
          Bool : bool CCBitField.S.field_kind
        | Int : int CCBitField.S.field_kind
      module type FIELD =
        sig
          type value
          val get : CCBitField.S.t -> CCBitField.S.FIELD.value
          val set :
            CCBitField.S.FIELD.value -> CCBitField.S.t -> CCBitField.S.t
          val width : int
          val name : string
          val kind : CCBitField.S.FIELD.value CCBitField.S.field_kind
        end
      type 'a field = (module CCBitField.S.FIELD with type value = 'a)
      val bool : ?name:string -> unit -> bool CCBitField.S.field
      val int2 : ?name:string -> unit -> int CCBitField.S.field
      val int3 : ?name:string -> unit -> int CCBitField.S.field
      val int : ?name:string -> width:int -> unit -> int CCBitField.S.field
      val freeze : unit -> unit
      val total_width : unit -> int
      type any_field =
          AnyField : (module CCBitField.S.FIELD with type value = 'a) *
            'CCBitField.S.field_kind -> CCBitField.S.any_field
      val iter_fields : (CCBitField.S.any_field -> unit) -> unit
      val pp : Format.formatter -> CCBitField.S.t -> unit
    end
  module Make : functor (X : EMPTY-> S
  val all_bits_ : int -> int -> int
end