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 
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