cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
string_container.cpp
Go to the documentation of this file.
1
/*******************************************************************\
2
3
Module: Container for C-Strings
4
5
Author: Daniel Kroening, kroening@kroening.com
6
7
\*******************************************************************/
8
11
12
#include "
string_container.h
"
13
14
#include <iostream>
15
#include <numeric>
16
#include <string_view>
17
18
string_containert::~string_containert
()
19
{
20
}
21
22
unsigned
string_containert::get
(std::string_view s)
23
{
24
hash_tablet::iterator it =
hash_table
.find(s);
25
26
if
(it!=
hash_table
.end())
27
return
it->second;
28
29
size_t
r
=
hash_table
.size();
30
31
// these are stable
32
string_list
.push_back(std::string(s));
33
34
// the key is a view into the stable, interned copy -- not the (possibly
35
// transient) argument
36
hash_table
[std::string_view{
string_list
.back()}] =
r
;
37
38
// these are not
39
string_vector
.push_back(&
string_list
.back());
40
41
return
r
;
42
}
43
44
void
string_container_statisticst::dump_on_stream
(std::ostream &out)
const
45
{
46
auto
total_memory_usage =
strings_memory_usage
+
vector_memory_usage
+
47
map_memory_usage
+
list_memory_usage
;
48
out <<
"String container statistics:"
49
<<
"\n string count: "
<<
string_count
50
<<
"\n string memory usage: "
<<
strings_memory_usage
.to_string()
51
<<
"\n vector memory usage: "
<<
vector_memory_usage
.to_string()
52
<<
"\n map memory usage: "
<<
map_memory_usage
.to_string()
53
<<
"\n list memory usage: "
<<
list_memory_usage
.to_string()
54
<<
"\n total memory usage: "
<< total_memory_usage.to_string() <<
'\n'
;
55
}
56
57
string_container_statisticst
string_containert::compute_statistics
()
const
58
{
59
string_container_statisticst
result;
60
result.
string_count
=
string_vector
.size();
61
result.
vector_memory_usage
=
memory_sizet::from_bytes
(
62
sizeof
(
string_vector
) +
63
sizeof
(string_vectort::value_type) *
string_vector
.capacity());
64
result.
strings_memory_usage
=
memory_sizet::from_bytes
(std::accumulate(
65
begin(
string_vector
),
66
end(
string_vector
),
67
std::size_t(0),
68
[](std::size_t sz,
const
std::string *s) {
return
sz + s->capacity(); }));
69
result.
map_memory_usage
=
memory_sizet::from_bytes
(
70
sizeof
(
hash_table
) +
hash_table
.size() *
sizeof
(hash_tablet::value_type));
71
72
result.
list_memory_usage
=
memory_sizet::from_bytes
(
73
sizeof
(
string_list
) + 2 *
sizeof
(
void
*) *
string_list
.size());
74
return
result;
75
}
memory_sizet::from_bytes
static memory_sizet from_bytes(std::size_t bytes)
Definition
memory_units.cpp:38
string_containert::get
unsigned get(std::string_view)
Definition
string_container.cpp:22
string_containert::string_vector
string_vectort string_vector
Definition
string_container.h:90
string_containert::hash_table
hash_tablet hash_table
Definition
string_container.h:82
string_containert::string_list
string_listt string_list
Definition
string_container.h:87
string_containert::~string_containert
~string_containert()
Definition
string_container.cpp:18
string_containert::compute_statistics
string_container_statisticst compute_statistics() const
Definition
string_container.cpp:57
r
static int8_t r
Definition
irep_hash.h:60
string_container.h
Container for C-Strings.
string_container_statisticst
Has estimated statistics about string container (estimated because this only uses public information,...
Definition
string_container.h:38
string_container_statisticst::vector_memory_usage
memory_sizet vector_memory_usage
Definition
string_container.h:41
string_container_statisticst::string_count
std::size_t string_count
Definition
string_container.h:39
string_container_statisticst::dump_on_stream
void dump_on_stream(std::ostream &out) const
Definition
string_container.cpp:44
string_container_statisticst::strings_memory_usage
memory_sizet strings_memory_usage
Definition
string_container.h:40
string_container_statisticst::list_memory_usage
memory_sizet list_memory_usage
Definition
string_container.h:43
string_container_statisticst::map_memory_usage
memory_sizet map_memory_usage
Definition
string_container.h:42
util
string_container.cpp
Generated by
1.17.0