1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
#ifndef INCLUDED_STRINGSTORE_
#define INCLUDED_STRINGSTORE_
#include <string>
#include <vector>
#include <unordered_map>
// Singleton
struct StringStore
{
struct Info
{
unsigned offset;
std::string str;
};
private:
std::vector<Info> d_string; // the strings and their offsets in
// the string area
unsigned d_offset; // offset of the next string in the
// string area
// offset index
// (in d_string)
std::unordered_map<unsigned, unsigned> d_indexOf; // locate a string
// idx given its
// offset
static StringStore s_stringStore; // defined in instance.cc
public:
StringStore(StringStore const &other) = delete;
static StringStore &instance();
// was: add(...)
unsigned offset(std::string const &str);// returns offset of str
// (adds it if a new str)
std::string const &str(unsigned offset) const; // returns str given
// its offset
// "123" -> 123
int asInt(unsigned strOffset); // returns 0 if no int-chars
int constCompare(unsigned lhsOffset, unsigned rhsOffset) const;
std::vector<Info> const &stringVect() const; // the strings and .f
// their offsets in
// the string area
private:
StringStore();
};
#include "stringvect.f"
#endif
|