28 lines
463 B
C++
28 lines
463 B
C++
#include <unordered_map>
|
|
#include <string>
|
|
|
|
#include "cstrcache.h"
|
|
|
|
using namespace std;
|
|
|
|
struct const_string_table {
|
|
unordered_map<string, string> strings;
|
|
};
|
|
|
|
static struct const_string_table table;
|
|
|
|
const char *cstrcache_get(const char *str)
|
|
{
|
|
if (!str || !*str)
|
|
return "";
|
|
|
|
auto &strings = table.strings;
|
|
auto pair = strings.find(str);
|
|
|
|
if (pair == strings.end()) {
|
|
strings[str] = str;
|
|
pair = strings.find(str);
|
|
}
|
|
|
|
return pair->second.c_str();
|
|
}
|