39 std::stringstream result;
42 .map([&](
const block_linest::value_type &file_entry) {
45 .map([&](
const function_linest::value_type &pair) {
46 std::vector<mp_integer> line_numbers(
47 pair.second.begin(), pair.second.end());
48 return file_entry.first +
':' + pair.first +
':' +
54 join_strings(result, full_map.begin(), full_map.end(),
"; ");
65 for(
const auto &lines_entry : file_entry.second)
67 std::vector<mp_integer> line_numbers(
68 lines_entry.second.begin(), lines_entry.second.end());
71 result.
add(file_entry.first, std::move(file_result));
There are a large number of kinds of tree structured or tree-like data in CPROVER.
void set(const irep_idt &name, const irep_idt &value)
irept & add(const irep_idt &name)
void insert(const source_locationt &loc)
Insert a line (a source location) into the set of lines.
irept to_irep() const
Construct an irept representing the set of lines.
std::string to_string() const
Construct a string representing the set of lines.
const irep_idt & get_function() const
const irep_idt & get_line() const
const irep_idt & get_file() const
static bool is_built_in(const std::string &s)
const std::string & id2string(const irep_idt &d)
const mp_integer string2integer(const std::string &n, unsigned base)
Ranges: pair of begin and end iterators, which can be initialized from containers,...
ranget< iteratort > make_range(iteratort begin, iteratort end)
Set of source code lines contributing to a basic block.
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.