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 <cstring>
15
#include <iostream>
16
#include <numeric>
17
18
string_ptrt::string_ptrt
(
const
char
*_s):
s
(_s),
len
(strlen(_s))
19
{
20
}
21
22
bool
string_ptrt::operator==
(
const
string_ptrt
&other)
const
23
{
24
if
(
len
!=other.
len
)
25
return
false
;
26
27
return
len
==0 || memcmp(
s
, other.
s
,
len
)==0;
28
}
29
30
string_containert::~string_containert
()
31
{
32
}
33
34
unsigned
string_containert::get
(
const
char
*s)
35
{
36
string_ptrt
string_ptr(s);
37
38
hash_tablet::iterator it=
hash_table
.find(string_ptr);
39
40
if
(it!=
hash_table
.end())
41
return
it->second;
42
43
size_t
r
=
hash_table
.size();
44
45
// these are stable
46
string_list
.push_back(std::string(s));
47
string_ptrt
result(
string_list
.back());
48
49
hash_table
[result]=
r
;
50
51
// these are not
52
string_vector
.push_back(&
string_list
.back());
53
54
return
r
;
55
}
56
57
unsigned
string_containert::get
(
const
std::string &s)
58
{
59
string_ptrt
string_ptr(s);
60
61
hash_tablet::iterator it=
hash_table
.find(string_ptr);
62
63
if
(it!=
hash_table
.end())
64
return
it->second;
65
66
size_t
r
=
hash_table
.size();
67
68
// these are stable
69
string_list
.push_back(s);
70
string_ptrt
result(
string_list
.back());
71
72
hash_table
[result]=
r
;
73
74
// these are not
75
string_vector
.push_back(&
string_list
.back());
76
77
return
r
;
78
}
79
80
void
string_container_statisticst::dump_on_stream
(std::ostream &out)
const
81
{
82
auto
total_memory_usage =
strings_memory_usage
+
vector_memory_usage
+
83
map_memory_usage
+
list_memory_usage
;
84
out <<
"String container statistics:"
85
<<
"\n string count: "
<<
string_count
86
<<
"\n string memory usage: "
<<
strings_memory_usage
.to_string()
87
<<
"\n vector memory usage: "
<<
vector_memory_usage
.to_string()
88
<<
"\n map memory usage: "
<<
map_memory_usage
.to_string()
89
<<
"\n list memory usage: "
<<
list_memory_usage
.to_string()
90
<<
"\n total memory usage: "
<< total_memory_usage.to_string() <<
'\n'
;
91
}
92
93
string_container_statisticst
string_containert::compute_statistics
()
const
94
{
95
string_container_statisticst
result;
96
result.
string_count
=
string_vector
.size();
97
result.
vector_memory_usage
=
memory_sizet::from_bytes
(
98
sizeof
(
string_vector
) +
99
sizeof
(string_vectort::value_type) *
string_vector
.capacity());
100
result.
strings_memory_usage
=
memory_sizet::from_bytes
(std::accumulate(
101
begin(
string_vector
),
102
end(
string_vector
),
103
std::size_t(0),
104
[](std::size_t sz,
const
std::string *s) {
return
sz + s->capacity(); }));
105
result.
map_memory_usage
=
memory_sizet::from_bytes
(
106
sizeof
(
hash_table
) +
hash_table
.size() *
sizeof
(hash_tablet::value_type));
107
108
result.
list_memory_usage
=
memory_sizet::from_bytes
(
109
sizeof
(
string_list
) + 2 *
sizeof
(
void
*) *
string_list
.size());
110
return
result;
111
}
memory_sizet::from_bytes
static memory_sizet from_bytes(std::size_t bytes)
Definition
memory_units.cpp:38
string_containert::get
unsigned get(const char *s)
Definition
string_container.cpp:34
string_containert::string_vector
string_vectort string_vector
Definition
string_container.h:107
string_containert::hash_table
hash_tablet hash_table
Definition
string_container.h:98
string_containert::string_list
string_listt string_list
Definition
string_container.h:104
string_containert::~string_containert
~string_containert()
Definition
string_container.cpp:30
string_containert::compute_statistics
string_container_statisticst compute_statistics() const
Definition
string_container.cpp:93
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:53
string_container_statisticst::vector_memory_usage
memory_sizet vector_memory_usage
Definition
string_container.h:56
string_container_statisticst::string_count
std::size_t string_count
Definition
string_container.h:54
string_container_statisticst::dump_on_stream
void dump_on_stream(std::ostream &out) const
Definition
string_container.cpp:80
string_container_statisticst::strings_memory_usage
memory_sizet strings_memory_usage
Definition
string_container.h:55
string_container_statisticst::list_memory_usage
memory_sizet list_memory_usage
Definition
string_container.h:58
string_container_statisticst::map_memory_usage
memory_sizet map_memory_usage
Definition
string_container.h:57
string_ptrt
Definition
string_container.h:23
string_ptrt::string_ptrt
string_ptrt(const char *_s)
Definition
string_container.cpp:18
string_ptrt::operator==
bool operator==(const string_ptrt &other) const
Definition
string_container.cpp:22
string_ptrt::len
size_t len
Definition
string_container.h:25
string_ptrt::s
const char * s
Definition
string_container.h:24
util
string_container.cpp
Generated by
1.17.0