#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(); }