+(** Common and utility functions. *)
(* Memory info command for virtual domains.
(C) Copyright 2008 Richard W.M. Jones, Red Hat Inc.
http://libvirt.org/
let bytes_of_wordsize = function
| W32 -> 4 | W64 -> 8
-(* Returns (count, value) in order of highest frequency occurring in the
- * list.
- *)
+(** Returns (count, value) in order of highest frequency occurring in the
+ list. *)
let frequency xs =
let xs = List.sort compare xs in
let rec loop = function
let xs = loop xs in
List.rev (List.sort compare xs)
+(** Like the Unix uniq(1) command. *)
let rec uniq ?(cmp = Pervasives.compare) = function
| [] -> []
| [x] -> [x]
| x :: y :: xs ->
x :: uniq (y :: xs)
+(** Like the Unix pipeline 'sort|uniq'. *)
let sort_uniq ?cmp xs =
let xs = ExtList.List.sort ?cmp xs in
let xs = uniq ?cmp xs in
xs
-(* Pad a string to a fixed width (from virt-top, but don't truncate). *)
+(** Pad a string to a fixed width (from virt-top, but don't truncate). *)
let pad width str =
let n = String.length str in
if n >= width then str
else (* if n < width then *) str ^ String.make (width-n) ' '
-(* General binary tree type. Data 'a is stored in the leaves and 'b
- * is stored in the nodes.
+(* Truncate an OCaml string at the first ASCII NUL character, ie. as
+ * if it were a C string.
*)
+let truncate_c_string str =
+ try
+ let i = String.index str '\000' in
+ String.sub str 0 i
+ with
+ Not_found -> str
+
+(** General binary tree type. Data 'a is stored in the leaves and 'b
+ is stored in the nodes. *)
type ('a,'b) binary_tree =
| Leaf of 'a
| Node of ('a,'b) binary_tree * 'b * ('a,'b) binary_tree
-(* This prints out the binary tree in graphviz dot format. *)
+(** Print out the binary tree in graphviz dot format. *)
let print_binary_tree leaf_printer node_printer tree =
(* Assign a unique, fixed label to each node. *)
let label =