cprover
source_lines.cpp
Go to the documentation of this file.
1
/*******************************************************************\
2
3
Module: Source Lines
4
5
Author: Mark R. Tuttle
6
7
\*******************************************************************/
8
11
12
#include "
source_lines.h
"
13
14
#include <
util/format_number_range.h
>
15
#include <
util/range.h
>
16
#include <
util/source_location.h
>
17
#include <
util/string2int.h
>
18
#include <
util/string_utils.h
>
19
20
#include <sstream>
21
22
void
source_linest::insert
(
const
source_locationt
&
loc
)
23
{
24
if
(
loc
.get_file().empty() ||
loc
.is_built_in())
25
return
;
26
const
std::string &
file
=
id2string
(
loc
.get_file());
27
28
// the function of a source location can fail to be set
29
const
std::string &func =
id2string
(
loc
.get_function());
30
31
if
(
loc
.get_line().empty())
32
return
;
33
std::size_t line =
safe_string2size_t
(
id2string
(
loc
.get_line()));
34
35
block_lines
[
file
+
":"
+ func].insert(line);
36
}
37
38
std::string
source_linest::to_string
()
const
39
{
40
std::stringstream ss;
41
const
auto
map =
42
make_range
(
block_lines
).map([&](
const
block_linest::value_type &pair) {
43
std::vector<unsigned> line_numbers(
44
pair.second.begin(), pair.second.end());
45
return
pair.first +
':'
+
format_number_range
(line_numbers);
46
});
47
join_strings
(ss, map.begin(), map.end(),
"; "
);
48
return
ss.str();
49
}
string_utils.h
file
Definition:
kdev_t.h:19
source_linest::to_string
std::string to_string() const
Construct a string representing the set of lines.
Definition:
source_lines.cpp:38
safe_string2size_t
std::size_t safe_string2size_t(const std::string &str, int base)
Definition:
string2int.cpp:26
source_linest::insert
void insert(const source_locationt &loc)
Insert a line (a source location) into the set of lines.
Definition:
source_lines.cpp:22
string2int.h
id2string
const std::string & id2string(const irep_idt &d)
Definition:
irep.h:44
source_lines.h
join_strings
Stream & join_strings(Stream &&os, const It b, const It e, const Delimiter &delimiter, TransformFunc &&transform_func)
Prints items to an stream, separated by a constant delimiter.
Definition:
string_utils.h:75
source_location.h
range.h
format_number_range
std::string format_number_range(const std::vector< unsigned > &input_numbers)
create shorter representation for output
Definition:
format_number_range.cpp:25
source_locationt
Definition:
source_location.h:20
loc
#define loc()
Definition:
ansi_c_lex.yy.cpp:4684
source_linest::block_lines
block_linest block_lines
Definition:
source_lines.h:58
format_number_range.h
make_range
ranget< iteratort > make_range(iteratort begin, iteratort end)
Definition:
range.h:524
goto-instrument
source_lines.cpp
Generated by
1.8.18