Use tables of callbacks for the functions.
[virt-df.git] / lib / diskimage_utils.mli
index 6f813fe..07179d8 100644 (file)
@@ -136,6 +136,24 @@ and parts_plugin_id = string
 and fs_plugin_id = string
 and lvm_plugin_id = string
 
+(** {2 Table of callbacks from each type of plug-in} *)
+
+type parts_cb = {
+  parts_cb_probe : device -> partitions;
+  parts_cb_offset_is_free : partitions -> Int63.t -> bool;
+}
+
+type fs_cb = {
+  fs_cb_probe : device -> filesystem;
+  fs_cb_offset_is_free : filesystem -> Int63.t -> bool;
+}
+
+type lvm_cb = {
+  lvm_cb_probe : lvm_plugin_id -> device -> pv;
+  lvm_cb_list_lvs : device list -> lv list;
+  lvm_cb_offset_is_free : pv -> Int63.t -> bool;
+}
+
 (** {2 Internal functions used by the plug-ins} *)
 
 val canonical_uuid : string -> string
@@ -144,6 +162,14 @@ val canonical_uuid : string -> string
 val group_by : ?cmp:('a -> 'a -> int) -> ('a * 'b) list -> ('a * 'b list) list
 (** Group a sorted list of pairs by the first element of the pair. *)
 
+val sort_uniq : ?cmp:('a -> 'a -> int) -> 'a list -> 'a list
+(** [sort_uniq xs] returns the list [xs], sorted and with all duplicate
+    elements removed. *)
+
+val uniq : ?cmp:('a -> 'a -> int) -> 'a list -> 'a list
+(** [uniq xs] removes adjacent duplicate elements from a list, like
+    the Unix uniq(1) command. *)
+
 val range : int -> int -> int list
 (** [range a b] returns the list of integers [a <= i < b].
     If [a >= b] then the empty list is returned.