#ifndef INTERN_POOL_HPP #define INTERN_POOL_HPP #include #include #include #include class InternPool { std::map known; std::vector names; public: size_t intern(const std::string& name) { auto pair = known.insert({name, known.size()}); if (pair.second) names.push_back(name); assert (known.size() == names.size()); return pair.first->second; } const std::string& outtern(size_t sz) const { return names[sz]; } size_t size() const { return known.size(); } }; #endif //INTERN_POOL_HPP