cprover
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 "string_hash.h"
20 
22 {
23  const char *s;
24  size_t len;
25 
26  const char *c_str() const
27  {
28  return s;
29  }
30 
31  explicit string_ptrt(const char *_s);
32 
33  explicit string_ptrt(const std::string &_s):s(_s.c_str()), len(_s.size())
34  {
35  }
36 
37  bool operator==(const string_ptrt &other) const;
38 };
39 
40 // NOLINTNEXTLINE(readability/identifiers)
42 {
43 public:
44  size_t operator()(const string_ptrt s) const { return hash_string(s.s); }
45 };
46 
48 {
49 public:
50  unsigned operator[](const char *s)
51  {
52  return get(s);
53  }
54 
55  unsigned operator[](const std::string &s)
56  {
57  return get(s);
58  }
59 
60  // constructor and destructor
63 
64  // the pointer is guaranteed to be stable
65  const char *c_str(size_t no) const
66  {
67  return string_vector[no]->c_str();
68  }
69 
70  // the reference is guaranteed to be stable
71  const std::string &get_string(size_t no) const
72  {
73  return *string_vector[no];
74  }
75 
76 protected:
77  // the 'unsigned' ought to be size_t
78  typedef std::unordered_map<string_ptrt, unsigned, string_ptr_hash>
81 
82  unsigned get(const char *s);
83  unsigned get(const std::string &s);
84 
85  typedef std::list<std::string> string_listt;
87 
88  typedef std::vector<std::string *> string_vectort;
90 };
91 
94 {
95  static string_containert ret;
96  return ret;
97 }
98 
99 #endif // CPROVER_UTIL_STRING_CONTAINER_H
string_ptrt::s
const char * s
Definition: string_container.h:23
string_containert::~string_containert
~string_containert()
Definition: string_container.cpp:28
string_containert::get_string
const std::string & get_string(size_t no) const
Definition: string_container.h:71
string_containert::string_containert
string_containert()
Definition: irep_ids.cpp:54
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_containert::string_vectort
std::vector< std::string * > string_vectort
Definition: string_container.h:88
string_containert::string_vector
string_vectort string_vector
Definition: string_container.h:89
string_containert
Definition: string_container.h:48
string_ptrt::string_ptrt
string_ptrt(const std::string &_s)
Definition: string_container.h:33
string_ptr_hash::operator()
size_t operator()(const string_ptrt s) const
Definition: string_container.h:44
string_containert::hash_tablet
std::unordered_map< string_ptrt, unsigned, string_ptr_hash > hash_tablet
Definition: string_container.h:79
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_ptr_hash
Definition: string_container.h:42
string_hash.h
string hashing
string_ptrt::operator==
bool operator==(const string_ptrt &other) const
Definition: string_container.cpp:20
hash_string
size_t hash_string(const dstringt &s)
Definition: dstring.h:211
string_containert::operator[]
unsigned operator[](const std::string &s)
Definition: string_container.h:55
string_containert::c_str
const char * c_str(size_t no) const
Definition: string_container.h:65
string_containert::string_listt
std::list< std::string > string_listt
Definition: string_container.h:85
string_ptrt::c_str
const char * c_str() const
Definition: string_container.h:26
string_containert::get
unsigned get(const char *s)
Definition: string_container.cpp:32
string_ptrt
Definition: string_container.h:22
string_containert::operator[]
unsigned operator[](const char *s)
Definition: string_container.h:50
get_string_container
string_containert & get_string_container()
Get a reference to the global string container.
Definition: string_container.h:93