cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
format_specifier.h
Go to the documentation of this file.
1
/*******************************************************************\
2
3
Module: Format specifiers for String.format
4
5
Author: Romain Brenguier, Joel Allred
6
7
\*******************************************************************/
8
11
12
#ifndef CPROVER_SOLVERS_STRINGS_FORMAT_SPECIFIER_H
13
#define CPROVER_SOLVERS_STRINGS_FORMAT_SPECIFIER_H
14
15
#include <string>
16
#include <
util/invariant.h
>
17
#include <vector>
18
19
// Format specifier describes how a value should be printed.
22
class
format_specifiert
23
{
24
public
:
25
// Constants describing the meaning of characters in format specifiers.
26
static
const
char
DECIMAL_INTEGER
=
'd'
;
27
static
const
char
OCTAL_INTEGER
=
'o'
;
28
static
const
char
HEXADECIMAL_INTEGER
=
'x'
;
29
static
const
char
HEXADECIMAL_INTEGER_UPPER
=
'X'
;
30
static
const
char
SCIENTIFIC
=
'e'
;
31
static
const
char
SCIENTIFIC_UPPER
=
'E'
;
32
static
const
char
GENERAL
=
'g'
;
33
static
const
char
GENERAL_UPPER
=
'G'
;
34
static
const
char
DECIMAL_FLOAT
=
'f'
;
35
static
const
char
HEXADECIMAL_FLOAT
=
'a'
;
36
static
const
char
HEXADECIMAL_FLOAT_UPPER
=
'A'
;
37
static
const
char
CHARACTER
=
'c'
;
38
static
const
char
CHARACTER_UPPER
=
'C'
;
39
static
const
char
DATE_TIME
=
't'
;
40
static
const
char
DATE_TIME_UPPER
=
'T'
;
41
static
const
char
BOOLEAN
=
'b'
;
42
static
const
char
BOOLEAN_UPPER
=
'B'
;
43
static
const
char
STRING
=
's'
;
44
static
const
char
STRING_UPPER
=
'S'
;
45
static
const
char
HASHCODE
=
'h'
;
46
static
const
char
HASHCODE_UPPER
=
'H'
;
47
static
const
char
LINE_SEPARATOR
=
'n'
;
48
static
const
char
PERCENT_SIGN
=
'%'
;
49
50
int
index
= -1;
51
std::string
flag
;
52
int
width
;
53
int
precision
;
54
// date/time
55
bool
dt
=
false
;
56
char
conversion
;
57
58
format_specifiert
(
59
int
_index,
60
std::string _flag,
61
int
_width,
62
int
_precision,
63
bool
_dt,
64
char
conversion
)
65
:
index
(_index),
66
flag
(_flag),
67
width
(_width),
68
precision
(_precision),
69
dt
(_dt),
70
conversion
(
conversion
)
71
{
72
}
73
};
74
75
// Format text represent a constant part of a format string.
76
class
format_textt
77
{
78
public
:
79
format_textt
() =
default
;
80
81
explicit
format_textt
(std::string _content) :
content
(_content)
82
{
83
}
84
85
format_textt
(
const
format_textt
&fs) :
content
(fs.
content
)
86
{
87
}
88
89
std::string
get_content
()
const
90
{
91
return
content
;
92
}
93
94
private
:
95
std::string
content
;
96
};
97
98
// A format element is either a specifier or text.
99
class
format_elementt
100
{
101
public
:
102
typedef
enum
103
{
104
SPECIFIER
,
105
TEXT
106
}
format_typet
;
107
108
explicit
format_elementt
(
format_typet
_type) :
type
(_type)
109
{
110
}
111
112
explicit
format_elementt
(std::string s) :
type
(
TEXT
),
fstring
(s)
113
{
114
}
115
116
explicit
format_elementt
(
format_specifiert
fs) :
type
(
SPECIFIER
)
117
{
118
fspec
.push_back(fs);
119
}
120
121
bool
is_format_specifier
()
const
122
{
123
return
type
==
SPECIFIER
;
124
}
125
126
bool
is_format_text
()
const
127
{
128
return
type
==
TEXT
;
129
}
130
131
format_specifiert
get_format_specifier
()
const
132
{
133
PRECONDITION
(
is_format_specifier
());
134
return
fspec
.back();
135
}
136
137
format_textt
&
get_format_text
()
138
{
139
PRECONDITION
(
is_format_text
());
140
return
fstring
;
141
}
142
143
const
format_textt
&
get_format_text
()
const
144
{
145
PRECONDITION
(
is_format_text
());
146
return
fstring
;
147
}
148
149
private
:
150
format_typet
type
;
151
format_textt
fstring
;
152
std::vector<format_specifiert>
fspec
;
153
};
154
160
std::vector<format_elementt>
parse_format_string
(std::string s);
161
162
#endif
// CPROVER_SOLVERS_STRINGS_FORMAT_SPECIFIER_H
format_elementt::type
format_typet type
Definition
format_specifier.h:150
format_elementt::format_typet
format_typet
Definition
format_specifier.h:103
format_elementt::SPECIFIER
@ SPECIFIER
Definition
format_specifier.h:104
format_elementt::TEXT
@ TEXT
Definition
format_specifier.h:105
format_elementt::format_elementt
format_elementt(std::string s)
Definition
format_specifier.h:112
format_elementt::format_elementt
format_elementt(format_typet _type)
Definition
format_specifier.h:108
format_elementt::fstring
format_textt fstring
Definition
format_specifier.h:151
format_elementt::format_elementt
format_elementt(format_specifiert fs)
Definition
format_specifier.h:116
format_elementt::get_format_text
format_textt & get_format_text()
Definition
format_specifier.h:137
format_elementt::is_format_text
bool is_format_text() const
Definition
format_specifier.h:126
format_elementt::get_format_specifier
format_specifiert get_format_specifier() const
Definition
format_specifier.h:131
format_elementt::get_format_text
const format_textt & get_format_text() const
Definition
format_specifier.h:143
format_elementt::fspec
std::vector< format_specifiert > fspec
Definition
format_specifier.h:152
format_elementt::is_format_specifier
bool is_format_specifier() const
Definition
format_specifier.h:121
format_specifiert
Field names follow the OpenJDK implementation: http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/9b8c96f9...
Definition
format_specifier.h:23
format_specifiert::STRING_UPPER
static const char STRING_UPPER
Definition
format_specifier.h:44
format_specifiert::OCTAL_INTEGER
static const char OCTAL_INTEGER
Definition
format_specifier.h:27
format_specifiert::conversion
char conversion
Definition
format_specifier.h:56
format_specifiert::SCIENTIFIC
static const char SCIENTIFIC
Definition
format_specifier.h:30
format_specifiert::PERCENT_SIGN
static const char PERCENT_SIGN
Definition
format_specifier.h:48
format_specifiert::DATE_TIME_UPPER
static const char DATE_TIME_UPPER
Definition
format_specifier.h:40
format_specifiert::SCIENTIFIC_UPPER
static const char SCIENTIFIC_UPPER
Definition
format_specifier.h:31
format_specifiert::HEXADECIMAL_INTEGER
static const char HEXADECIMAL_INTEGER
Definition
format_specifier.h:28
format_specifiert::precision
int precision
Definition
format_specifier.h:53
format_specifiert::DATE_TIME
static const char DATE_TIME
Definition
format_specifier.h:39
format_specifiert::BOOLEAN_UPPER
static const char BOOLEAN_UPPER
Definition
format_specifier.h:42
format_specifiert::format_specifiert
format_specifiert(int _index, std::string _flag, int _width, int _precision, bool _dt, char conversion)
Definition
format_specifier.h:58
format_specifiert::STRING
static const char STRING
Definition
format_specifier.h:43
format_specifiert::width
int width
Definition
format_specifier.h:52
format_specifiert::dt
bool dt
Definition
format_specifier.h:55
format_specifiert::CHARACTER
static const char CHARACTER
Definition
format_specifier.h:37
format_specifiert::HASHCODE
static const char HASHCODE
Definition
format_specifier.h:45
format_specifiert::flag
std::string flag
Definition
format_specifier.h:51
format_specifiert::GENERAL
static const char GENERAL
Definition
format_specifier.h:32
format_specifiert::HEXADECIMAL_INTEGER_UPPER
static const char HEXADECIMAL_INTEGER_UPPER
Definition
format_specifier.h:29
format_specifiert::HASHCODE_UPPER
static const char HASHCODE_UPPER
Definition
format_specifier.h:46
format_specifiert::HEXADECIMAL_FLOAT_UPPER
static const char HEXADECIMAL_FLOAT_UPPER
Definition
format_specifier.h:36
format_specifiert::index
int index
Definition
format_specifier.h:50
format_specifiert::BOOLEAN
static const char BOOLEAN
Definition
format_specifier.h:41
format_specifiert::DECIMAL_FLOAT
static const char DECIMAL_FLOAT
Definition
format_specifier.h:34
format_specifiert::CHARACTER_UPPER
static const char CHARACTER_UPPER
Definition
format_specifier.h:38
format_specifiert::GENERAL_UPPER
static const char GENERAL_UPPER
Definition
format_specifier.h:33
format_specifiert::DECIMAL_INTEGER
static const char DECIMAL_INTEGER
Definition
format_specifier.h:26
format_specifiert::HEXADECIMAL_FLOAT
static const char HEXADECIMAL_FLOAT
Definition
format_specifier.h:35
format_specifiert::LINE_SEPARATOR
static const char LINE_SEPARATOR
Definition
format_specifier.h:47
format_textt
Definition
format_specifier.h:77
format_textt::get_content
std::string get_content() const
Definition
format_specifier.h:89
format_textt::format_textt
format_textt()=default
format_textt::content
std::string content
Definition
format_specifier.h:95
format_textt::format_textt
format_textt(std::string _content)
Definition
format_specifier.h:81
format_textt::format_textt
format_textt(const format_textt &fs)
Definition
format_specifier.h:85
parse_format_string
std::vector< format_elementt > parse_format_string(std::string s)
Parse the given string into format specifiers and text.
Definition
format_specifier.cpp:48
invariant.h
PRECONDITION
#define PRECONDITION(CONDITION)
Definition
invariant.h:463
solvers
strings
format_specifier.h
Generated by
1.17.0