--- /dev/null
+(* 'diskzip' command for intelligently compressing disk images.
+ (C) Copyright 2007 Richard W.M. Jones, Red Hat Inc.
+ http://libvirt.org/
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*)
+
+(**
+ Unlimited-length fixed-size bitmap type.
+
+ The only reason we need this is because strings are limited to 16
+ MBytes on 32 bit platforms (which would limit the size of a disk
+ image we could process to around 64 GB, assuming 512 byte sectors).
+ This module hides multiple strings on 32 bit, or a single long
+ string on 64 bit but is very efficient in either case.
+
+ Also it uses the 'int63' type which makes arithmetic convenient.
+*)
+
+type t
+
+val create : Int63.t -> t
+ (** Create a bitmap of the given length in bits. *)
+
+val set : t -> Int63.t -> unit
+
+val clear : t -> Int63.t -> unit
+
+val set_bool : t -> Int63.t -> bool -> unit
+
+val set_int : t -> Int63.t -> int -> unit
+ (** Treats the integer as a C-like boolean. *)
+
+val get : t -> Int63.t -> bool
+
+val iter : (Int63.t -> bool -> unit) -> t -> unit
+ (** [iter f bitmap] iterates over the bitmap, calling [f] for each bit. *)
+
+val iter_set : (Int63.t -> bool -> bool) -> t -> unit
+ (** [iter_set f bitmap] iterates over the bitmap, calling [f] for each
+ bit. The return value of [f] is used to set or clear the bit
+ in the bitmap. *)