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
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.