#ifndef QLOW_SEM_CONTEXT_H #define QLOW_SEM_CONTEXT_H #include "Type.h" #include "unordered_map" namespace qlow::sem { class Context; using TypeId = size_t; } class qlow::sem::Context { private: std::vector> types; std::unordered_map typesMap; public: TypeId addType(Type&& type) { if (typesMap.contains(type)) { return typesMap[type]; } else { types.push_back(std::unique_ptr(type)); return types.size() - 1; } } }; #endif // QLOW_SEM_CONTEXT_H