summaryrefslogtreecommitdiffstats
path: root/generator/utils.mli
blob: 6581d572b9e0196ca5f92506dae1ceec91fa1af2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
(* libguestfs
 * Copyright (C) 2009-2012 Red Hat Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 *)

(* Please read generator/README first. *)

(** Useful utility functions. *)

val errcode_of_ret : Types.ret -> Types.errcode
(** Map [ret] type to the error indication that the action returns,
    eg. [errcode_of_ret RErr] => [`ErrorIsMinusOne] (meaning that
    these actions return [-1]).

    Note that [RConstOptString] cannot return an error indication, and
    this returns [`CannotReturnError].  Callers must deal with it. *)

val string_of_errcode : [`ErrorIsMinusOne|`ErrorIsNULL] -> string
(** Return errcode as a string.  Untyped for [`CannotReturnError]. *)

val uuidgen : unit -> string
(** Generate a random UUID (used in tests). *)

type rstructs_used_t = RStructOnly | RStructListOnly | RStructAndList
(** Return type of {!rstructs_used_by}. *)

val rstructs_used_by : Types.action list -> (string * rstructs_used_t) list
(** Returns a list of RStruct/RStructList structs that are returned
    by any function. *)

val failwithf : ('a, unit, string, 'b) format4 -> 'a
(** Like [failwith] but supports printf-like arguments. *)

val unique : unit -> int
(** Returns a unique number each time called. *)

val replace_char : string -> char -> char -> string
(** Replace character in string. *)

val isspace : char -> bool
(** Return true if char is a whitespace character. *)

val triml : ?test:(char -> bool) -> string -> string
(** Trim left. *)

val trimr : ?test:(char -> bool) -> string -> string
(** Trim right. *)

val trim : ?test:(char -> bool) -> string -> string
(** Trim left and right. *)

val find : string -> string -> int
(** [find str sub] searches for [sub] in [str], returning the index
    or -1 if not found. *)

val replace_str : string -> string -> string -> string
(** [replace_str str s1 s2] replaces [s1] with [s2] throughout [str]. *)

val string_split : string -> string -> string list
(** [string_split sep str] splits [str] at [sep]. *)

val files_equal : string -> string -> bool
(** [files_equal filename1 filename2] returns true if the files contain
    the same content. *)

val filter_map : ('a -> 'b option) -> 'a list -> 'b list

val find_map : ('a -> 'b option) -> 'a list -> 'b

val iteri : (int -> 'a -> unit) -> 'a list -> unit

val mapi : (int -> 'a -> 'b) -> 'a list -> 'b list

val count_chars : char -> string -> int
(** Count number of times the character occurs in string. *)

val explode : string -> char list
(** Explode a string into a list of characters. *)

val map_chars : (char -> 'a) -> string -> 'a list
(** Explode string, then map function over the characters. *)

val name_of_argt : Types.argt -> string
(** Extract argument name. *)

val name_of_optargt : Types.optargt -> string
(** Extract optional argument name. *)

val seq_of_test : Types.test -> Types.seq
(** Extract test sequence from a test. *)

val c_quote : string -> string
(** Perform quoting on a string so it is safe to include in a C source file. *)

val pod2text : ?width:int -> ?trim:bool -> ?discard:bool -> string -> string -> string list
  (** [pod2text ?width ?trim ?discard name longdesc] converts the POD in
      [longdesc] to plain ASCII lines of text.

      [width] is the width in characters.  If not specified, then
      use the pod2text default.

      [trim] means trim the left margin (useful when including the
      output inside comments, as in Java generator).

      [discard] means discard the first heading.

      This is the slowest part of autogeneration, so the results are
      memoized into a temporary file. *)

val action_compare : Types.action -> Types.action -> int
  (** Compare the names of two actions, for sorting. *)

val chars : char -> int -> string
(** [chars c n] creates a string containing character c repeated n times. *)

val spaces : int -> string
(** [spaces n] creates a string of n spaces. *)

val args_of_optargs : Types.optargs -> Types.args
(** Convert a list of optargs into an equivalent list of args *)