cprover
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
16
string_ptrt::string_ptrt
(
const
char
*_s):s(_s), len(strlen(_s))
17
{
18
}
19
20
bool
string_ptrt::operator==
(
const
string_ptrt
&other)
const
21
{
22
if
(
len
!=other.
len
)
23
return
false
;
24
25
return
len
==0 || memcmp(
s
, other.
s
,
len
)==0;
26
}
27
28
string_containert::~string_containert
()
29
{
30
}
31
32
unsigned
string_containert::get
(
const
char
*s)
33
{
34
string_ptrt
string_ptr(s);
35
36
hash_tablet::iterator it=
hash_table
.find(string_ptr);
37
38
if
(it!=
hash_table
.end())
39
return
it->second;
40
41
size_t
r
=
hash_table
.size();
42
43
// these are stable
44
string_list
.push_back(std::string(s));
45
string_ptrt
result(
string_list
.back());
46
47
hash_table
[result]=
r
;
48
49
// these are not
50
string_vector
.push_back(&
string_list
.back());
51
52
return
r
;
53
}
54
55
unsigned
string_containert::get
(
const
std::string &s)
56
{
57
string_ptrt
string_ptr(s);
58
59
hash_tablet::iterator it=
hash_table
.find(string_ptr);
60
61
if
(it!=
hash_table
.end())
62
return
it->second;
63
64
size_t
r
=
hash_table
.size();
65
66
// these are stable
67
string_list
.push_back(s);
68
string_ptrt
result(
string_list
.back());
69
70
hash_table
[result]=
r
;
71
72
// these are not
73
string_vector
.push_back(&
string_list
.back());
74
75
return
r
;
76
}
string_ptrt::s
const char * s
Definition:
string_container.h:23
string_containert::~string_containert
~string_containert()
Definition:
string_container.cpp:28
string_containert::hash_table
hash_tablet hash_table
Definition:
string_container.h:80
string_containert::string_list
string_listt string_list
Definition:
string_container.h:86
string_container.h
Container for C-Strings.
string_containert::string_vector
string_vectort string_vector
Definition:
string_container.h:89
string_ptrt::len
size_t len
Definition:
string_container.h:24
string_ptrt::string_ptrt
string_ptrt(const char *_s)
Definition:
string_container.cpp:16
string_ptrt::operator==
bool operator==(const string_ptrt &other) const
Definition:
string_container.cpp:20
string_containert::get
unsigned get(const char *s)
Definition:
string_container.cpp:32
r
static int8_t r
Definition:
irep_hash.h:59
string_ptrt
Definition:
string_container.h:22
util
string_container.cpp
Generated by
1.8.20