cstrcache.cpp 463 B

12345678910111213141516171819202122232425262728
  1. #include <unordered_map>
  2. #include <string>
  3. #include "cstrcache.h"
  4. using namespace std;
  5. struct const_string_table {
  6. unordered_map<string, string> strings;
  7. };
  8. static struct const_string_table table;
  9. const char *cstrcache_get(const char *str)
  10. {
  11. if (!str || !*str)
  12. return "";
  13. auto &strings = table.strings;
  14. auto pair = strings.find(str);
  15. if (pair == strings.end()) {
  16. strings[str] = str;
  17. pair = strings.find(str);
  18. }
  19. return pair->second.c_str();
  20. }