Constify language_enum
[deliverable/binutils-gdb.git] / gdb / cli / cli-utils.h
CommitLineData
e9cafbcc
TT
1/* CLI utilities.
2
61baf725 3 Copyright (C) 2011-2017 Free Software Foundation, Inc.
e9cafbcc
TT
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20#ifndef CLI_UTILS_H
21#define CLI_UTILS_H
22
5d5658a1
PA
23/* *PP is a string denoting a number. Get the number. Advance *PP
24 after the string and any trailing whitespace.
e9cafbcc 25
5d5658a1
PA
26 The string can either be a number, or "$" followed by the name of a
27 convenience variable, or ("$" or "$$") followed by digits.
28
29 TRAILER is a character which can be found after the number; most
30 commonly this is `-'. If you don't want a trailer, use \0. */
31
32extern int get_number_trailer (const char **pp, int trailer);
33
34/* Convenience. Like get_number_trailer, but with no TRAILER. */
e9cafbcc 35
f1735a53 36extern int get_number (const char **);
e799154c 37
f1735a53 38/* Like the above, but takes a non-const "char **". */
e799154c 39
e9cafbcc
TT
40extern int get_number (char **);
41
bfd28288
PA
42/* Parse a number or a range.
43 A number will be of the form handled by get_number.
44 A range will be of the form <number1> - <number2>, and
45 will represent all the integers between number1 and number2,
46 inclusive. */
197f0a60 47
bfd28288 48class number_or_range_parser
197f0a60 49{
bfd28288
PA
50public:
51 /* Default construction. Must call init before calling
52 get_next. */
53 number_or_range_parser () {}
54
55 /* Calls init automatically. */
56 number_or_range_parser (const char *string);
57
58 /* STRING is the string to be parsed. */
59 void init (const char *string);
60
61 /* While processing a range, this fuction is called iteratively; At
62 each call it will return the next value in the range.
63
64 At the beginning of parsing a range, the char pointer
65 STATE->m_cur_tok will be advanced past <number1> and left
66 pointing at the '-' token. Subsequent calls will not advance the
67 pointer until the range is completed. The call that completes
68 the range will advance the pointer past <number2>. */
69 int get_number ();
70
71 /* Setup internal state such that get_next() returns numbers in the
72 START_VALUE to END_VALUE range. END_PTR is where the string is
73 advanced to when get_next() returns END_VALUE. */
74 void setup_range (int start_value, int end_value,
75 const char *end_ptr);
76
77 /* Returns true if parsing has completed. */
78 bool finished () const
79 { return m_finished; }
80
81 /* Return the string being parsed. When parsing has finished, this
82 points past the last parsed token. */
83 const char *cur_tok () const
84 { return m_cur_tok; }
85
86 /* True when parsing a range. */
87 bool in_range () const
88 { return m_in_range; }
89
90 /* When parsing a range, the final value in the range. */
91 int end_value () const
92 { return m_end_value; }
93
94 /* When parsing a range, skip past the final token in the range. */
95 void skip_range ()
96 {
97 gdb_assert (m_in_range);
98 m_cur_tok = m_end_ptr;
99 }
100
101private:
102 /* No need for these. They are intentionally not defined anywhere. */
103 number_or_range_parser (const number_or_range_parser &);
104 number_or_range_parser &operator= (const number_or_range_parser &);
105
106 /* True if parsing has completed. */
107 bool m_finished;
197f0a60
TT
108
109 /* The string being parsed. When parsing has finished, this points
110 past the last parsed token. */
bfd28288 111 const char *m_cur_tok;
197f0a60
TT
112
113 /* Last value returned. */
bfd28288 114 int m_last_retval;
197f0a60
TT
115
116 /* When parsing a range, the final value in the range. */
bfd28288 117 int m_end_value;
197f0a60
TT
118
119 /* When parsing a range, a pointer past the final token in the
120 range. */
bfd28288 121 const char *m_end_ptr;
197f0a60 122
bfd28288
PA
123 /* True when parsing a range. */
124 bool m_in_range;
197f0a60
TT
125};
126
aea5b279
MS
127/* Accept a number and a string-form list of numbers such as is
128 accepted by get_number_or_range. Return TRUE if the number is
129 in the list.
130
131 By definition, an empty list includes all numbers. This is to
132 be interpreted as typing a command such as "delete break" with
133 no arguments. */
134
e799154c 135extern int number_is_in_list (const char *list, int number);
aea5b279 136
c00f8484
KS
137/* Reverse S to the last non-whitespace character without skipping past
138 START. */
139
63160a43
PA
140extern const char *remove_trailing_whitespace (const char *start,
141 const char *s);
142
143/* Same, for non-const S. */
144
145static inline char *
146remove_trailing_whitespace (const char *start, char *s)
147{
148 return (char *) remove_trailing_whitespace (start, (const char *) s);
149}
55aa24fb
SDJ
150
151/* A helper function to extract an argument from *ARG. An argument is
152 delimited by whitespace. The return value is either NULL if no
153 argument was found, or an xmalloc'd string. */
154
155extern char *extract_arg (char **arg);
156
f1735a53 157/* A const-correct version of the above.
b5be8ce0
JB
158
159 Since the returned value is xmalloc'd, it eventually needs to be
160 xfree'ed, which prevents us from making it const as well. */
161
f1735a53 162extern char *extract_arg (const char **arg);
b5be8ce0 163
e6f0bce7
HZ
164/* A helper function that looks for an argument at the start of a
165 string. The argument must also either be at the end of the string,
166 or be followed by whitespace. Returns 1 if it finds the argument,
167 0 otherwise. If the argument is found, it updates *STR. */
63160a43
PA
168extern int check_for_argument (const char **str, const char *arg, int arg_len);
169
170/* Same, for non-const STR. */
171
172static inline int
173check_for_argument (char **str, const char *arg, int arg_len)
174{
175 return check_for_argument (const_cast<const char **> (str),
176 arg, arg_len);
177}
e6f0bce7 178
e9cafbcc 179#endif /* CLI_UTILS_H */
This page took 1.036893 seconds and 4 git commands to generate.