29 lines
463 B
C++
29 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();
|
||
|
}
|