cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
string_container.h
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
#ifndef CPROVER_UTIL_STRING_CONTAINER_H
13
#define CPROVER_UTIL_STRING_CONTAINER_H
14
15
#include <list>
16
#include <unordered_map>
17
#include <vector>
18
19
#include "
memory_units.h
"
20
#include "
string_hash.h
"
21
22
struct
string_ptrt
23
{
24
const
char
*
s
;
25
size_t
len
;
26
27
const
char
*
c_str
()
const
28
{
29
return
s
;
30
}
31
32
explicit
string_ptrt
(
const
char
*_s);
33
34
explicit
string_ptrt
(
const
std::string &_s):
s
(_s.
c_str
()),
len
(_s.size())
35
{
36
}
37
38
bool
operator==
(
const
string_ptrt
&other)
const
;
39
};
40
41
// NOLINTNEXTLINE(readability/identifiers)
42
class
string_ptr_hash
43
{
44
public
:
45
size_t
operator()
(
const
string_ptrt
s)
const
{
return
hash_string
(s.
s
); }
46
};
47
52
struct
string_container_statisticst
53
{
54
std::size_t
string_count
;
55
memory_sizet
strings_memory_usage
;
56
memory_sizet
vector_memory_usage
;
57
memory_sizet
map_memory_usage
;
58
memory_sizet
list_memory_usage
;
59
60
void
dump_on_stream
(std::ostream &out)
const
;
61
};
62
63
class
string_containert
64
{
65
public
:
66
unsigned
operator[]
(
const
char
*s)
67
{
68
return
get
(s);
69
}
70
71
unsigned
operator[]
(
const
std::string &s)
72
{
73
return
get
(s);
74
}
75
76
// constructor and destructor
77
string_containert
();
78
~string_containert
();
79
80
// the pointer is guaranteed to be stable
81
const
char
*
c_str
(
size_t
no
)
const
82
{
83
return
string_vector
[
no
]->c_str();
84
}
85
86
// the reference is guaranteed to be stable
87
const
std::string &
get_string
(
size_t
no
)
const
88
{
89
return
*
string_vector
[
no
];
90
}
91
92
string_container_statisticst
compute_statistics
()
const
;
93
94
protected
:
95
// the 'unsigned' ought to be size_t
96
typedef
std::unordered_map<string_ptrt, unsigned, string_ptr_hash>
97
hash_tablet
;
98
hash_tablet
hash_table
;
99
100
unsigned
get
(
const
char
*s);
101
unsigned
get
(
const
std::string &s);
102
103
typedef
std::list<std::string>
string_listt
;
104
string_listt
string_list
;
105
106
typedef
std::vector<std::string *>
string_vectort
;
107
string_vectort
string_vector
;
108
};
109
111
inline
string_containert
&
get_string_container
()
112
{
113
static
string_containert
ret;
114
return
ret;
115
}
116
117
#endif
// CPROVER_UTIL_STRING_CONTAINER_H
widen_modet::no
@ no
Definition
abstract_environment.h:32
memory_sizet
Definition
memory_units.h:16
string_containert
Definition
string_container.h:64
string_containert::get
unsigned get(const char *s)
Definition
string_container.cpp:34
string_containert::string_vectort
std::vector< std::string * > string_vectort
Definition
string_container.h:106
string_containert::hash_tablet
std::unordered_map< string_ptrt, unsigned, string_ptr_hash > hash_tablet
Definition
string_container.h:97
string_containert::string_vector
string_vectort string_vector
Definition
string_container.h:107
string_containert::operator[]
unsigned operator[](const std::string &s)
Definition
string_container.h:71
string_containert::hash_table
hash_tablet hash_table
Definition
string_container.h:98
string_containert::get_string
const std::string & get_string(size_t no) const
Definition
string_container.h:87
string_containert::string_listt
std::list< std::string > string_listt
Definition
string_container.h:103
string_containert::string_containert
string_containert()
Definition
irep_ids.cpp:45
string_containert::string_list
string_listt string_list
Definition
string_container.h:104
string_containert::c_str
const char * c_str(size_t no) const
Definition
string_container.h:81
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
string_containert::operator[]
unsigned operator[](const char *s)
Definition
string_container.h:66
string_ptr_hash
Definition
string_container.h:43
string_ptr_hash::operator()
size_t operator()(const string_ptrt s) const
Definition
string_container.h:45
hash_string
size_t hash_string(const dstringt &s)
Definition
dstring.h:228
memory_units.h
get_string_container
string_containert & get_string_container()
Get a reference to the global string container.
Definition
string_container.h:111
string_hash.h
string hashing
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::c_str
const char * c_str() const
Definition
string_container.h:27
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::string_ptrt
string_ptrt(const std::string &_s)
Definition
string_container.h:34
string_ptrt::s
const char * s
Definition
string_container.h:24
util
string_container.h
Generated by
1.17.0