File tree 4 files changed +17
-23
lines changed
4 files changed +17
-23
lines changed Original file line number Diff line number Diff line change @@ -46,13 +46,13 @@ class dstringt final
46
46
47
47
// this one is not safe for static objects
48
48
// NOLINTNEXTLINE(runtime/explicit)
49
- dstringt (const char *s):no(string_container [s])
49
+ dstringt (const char *s):no(get_string_container() [s])
50
50
{
51
51
}
52
52
53
53
// this one is not safe for static objects
54
54
// NOLINTNEXTLINE(runtime/explicit)
55
- dstringt (const std::string &s):no(string_container [s])
55
+ dstringt (const std::string &s):no(get_string_container() [s])
56
56
{
57
57
}
58
58
@@ -152,12 +152,12 @@ class dstringt final
152
152
153
153
// the reference returned is guaranteed to be stable
154
154
const std::string &as_string () const
155
- { return string_container .get_string (no); }
155
+ { return get_string_container () .get_string (no); }
156
156
};
157
157
158
158
// the reference returned is guaranteed to be stable
159
159
inline const std::string &as_string (const dstringt &s)
160
- { return string_container .get_string (s.get_no ()); }
160
+ { return get_string_container () .get_string (s.get_no ()); }
161
161
162
162
// NOLINTNEXTLINE(readability/identifiers)
163
163
struct dstring_hash
Original file line number Diff line number Diff line change @@ -43,14 +43,15 @@ const char *irep_ids_table[]=
43
43
44
44
#include " irep_ids.def" // NOLINT(build/include)
45
45
46
- void initialize_string_container ()
46
+ string_containert::string_containert ()
47
47
{
48
- // this is called by the constructor of string_containert
48
+ // pre-allocate empty string -- this gets index 0
49
+ get (" " );
49
50
51
+ // allocate strings
50
52
for (unsigned i=0 ; irep_ids_table[i]!=nullptr ; i++)
51
53
{
52
- unsigned x;
53
- x=string_container[irep_ids_table[i]];
54
+ unsigned x=operator [](irep_ids_table[i]);
54
55
INVARIANT (x==i, " i-th element is inserted at position i" ); // sanity check
55
56
}
56
57
}
Original file line number Diff line number Diff line change 13
13
14
14
#include < cstring>
15
15
16
- string_containert string_container;
17
-
18
16
string_ptrt::string_ptrt (const char *_s):s(_s), len(strlen(_s))
19
17
{
20
18
}
@@ -27,17 +25,6 @@ bool string_ptrt::operator==(const string_ptrt &other) const
27
25
return len==0 || memcmp (s, other.s , len)==0 ;
28
26
}
29
27
30
- void initialize_string_container ();
31
-
32
- string_containert::string_containert ()
33
- {
34
- // pre-allocate empty string -- this gets index 0
35
- get (" " );
36
-
37
- // allocate strings
38
- initialize_string_container ();
39
- }
40
-
41
28
string_containert::~string_containert ()
42
29
{
43
30
}
@@ -87,3 +74,10 @@ unsigned string_containert::get(const std::string &s)
87
74
88
75
return r;
89
76
}
77
+
78
+ // / Get a reference to the global string container.
79
+ string_containert &get_string_container ()
80
+ {
81
+ static string_containert ret;
82
+ return ret;
83
+ }
Original file line number Diff line number Diff line change @@ -89,7 +89,6 @@ class string_containert
89
89
string_vectort string_vector;
90
90
};
91
91
92
- // an ugly global object
93
- extern string_containert string_container;
92
+ string_containert &get_string_container ();
94
93
95
94
#endif // CPROVER_UTIL_STRING_CONTAINER_H
You can’t perform that action at this time.
0 commit comments