#pragma once #include "CodegenConfig.hpp" #include "CodegenDecl.hpp" #include #include #include #include #include class CodegenInput { private: std::vector mEnums; robin_hood::unordered_map mDeclByName; public: void AddEnum(DeclEnum decl) { #if CODEGEN_DEBUG_PRINT printf("Committed enum '%s'\n", decl.name.c_str()); for (auto& elm : decl.elements) { printf(" - element %s = %" PRId64 "\n", elm.name.c_str(), elm.value); } #endif mDeclByName.try_emplace(decl.name, mEnums.size()); mEnums.push_back(std::move(decl)); } const DeclEnum* FindEnumByName(std::string_view name) const { // TODO handle multiple kinds of decl auto iter = mDeclByName.find(name); if (iter != mDeclByName.end()) { return &mEnums[iter->second]; } else { return nullptr; } } };