X-Git-Url: http://git.annexia.org/?p=virt-mem.git;a=blobdiff_plain;f=lib%2Fvirt_mem_utils.ml;h=a1eab8ffc11366d6ffe4e6a717b2df173b09cdba;hp=8eb312abe1b98815fef58891faead64d22f2f127;hb=97808a0bc435d73a5e1e08bfa94aba6aa2508841;hpb=c67e17c4ca67b1a53d16394b8f3218665c19642c diff --git a/lib/virt_mem_utils.ml b/lib/virt_mem_utils.ml index 8eb312a..a1eab8f 100644 --- a/lib/virt_mem_utils.ml +++ b/lib/virt_mem_utils.ml @@ -1,3 +1,4 @@ +(** Common and utility functions. *) (* Memory info command for virtual domains. (C) Copyright 2008 Richard W.M. Jones, Red Hat Inc. http://libvirt.org/ @@ -78,9 +79,8 @@ let bits_of_wordsize = function 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 @@ -96,6 +96,7 @@ let frequency xs = 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] @@ -104,25 +105,35 @@ let rec uniq ?(cmp = Pervasives.compare) = function | 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 =