let values m = fold (fun _ v vs -> v :: vs) m []
end
+module BigIntMap = struct
+ include Map.Make (struct type t = big_int let compare = compare_big_int end)
+ let keys m = fold (fun k _ ks -> k :: ks) m []
+ let values m = fold (fun _ v vs -> v :: vs) m []
+end
+
module StringSet = Set.Make (String)
let (//) = Filename.concat
match f x with
| Some y -> y :: filter_map f xs
| None -> filter_map f xs
+
+let string_of_time_t ?(localtime = false) t =
+ let tm = (if localtime then Unix.localtime else gmtime) t in
+ sprintf "%04d-%02d-%02d %02d:%02d:%02d%s"
+ (1900+tm.tm_year) (1+tm.tm_mon) tm.tm_mday
+ tm.tm_hour tm.tm_min tm.tm_sec
+ (if localtime then "" else " UTC")
+
+let string_startswith str prefix =
+ let len = String.length str in
+ let plen = String.length prefix in
+ len >= plen && String.sub str 0 plen = prefix
+
+let string_endswith str suffix =
+ let len = String.length str in
+ let slen = String.length suffix in
+ len >= slen && String.sub str (len-slen) slen = suffix