diff --git a/src/CppParser/AST.cpp b/src/CppParser/AST.cpp index 98ba88f7..3daa6ef5 100644 --- a/src/CppParser/AST.cpp +++ b/src/CppParser/AST.cpp @@ -479,44 +479,6 @@ Function* DeclarationContext::FindFunction(const std::string& USR) return nullptr; } -ClassTemplate* -DeclarationContext::FindClassTemplate(const std::string& USR) -{ - auto foundTemplate = std::find_if(Templates.begin(), Templates.end(), - [&](Template* t) { return t->USR == USR; }); - - if (foundTemplate != Templates.end()) - return static_cast(*foundTemplate); - - return nullptr; -} - -TypeAliasTemplate* -DeclarationContext::FindTypeAliasTemplate(const std::string& USR) -{ - auto foundTemplate = std::find_if(Templates.begin(), Templates.end(), - [&](Template* t) { return t->USR == USR; } - ); - - if (foundTemplate != Templates.end()) - return static_cast(*foundTemplate); - - return nullptr; -} - -FunctionTemplate* -DeclarationContext::FindFunctionTemplate(const std::string& USR) -{ - auto foundTemplate = std::find_if(Templates.begin(), Templates.end(), - [&](Template* t) { return t->USR == USR; } - ); - - if (foundTemplate != Templates.end()) - return static_cast(*foundTemplate); - - return nullptr; -} - TypedefDecl* DeclarationContext::FindTypedef(const std::string& Name, bool Create) { auto foundTypedef = std::find_if(Typedefs.begin(), Typedefs.end(), diff --git a/src/CppParser/AST.h b/src/CppParser/AST.h index 82da6349..63174acb 100644 --- a/src/CppParser/AST.h +++ b/src/CppParser/AST.h @@ -472,9 +472,7 @@ public: CS_IGNORE Class* FindClass(const std::string& Name, bool IsComplete, bool Create); - CS_IGNORE TypeAliasTemplate* FindTypeAliasTemplate(const std::string& USR); - CS_IGNORE ClassTemplate* FindClassTemplate(const std::string& USR); - CS_IGNORE FunctionTemplate* FindFunctionTemplate(const std::string& USR); + CS_IGNORE template T* FindTemplate(const std::string& USR); CS_IGNORE Enumeration* FindEnum(const void* OriginalPtr); CS_IGNORE Enumeration* FindEnum(const std::string& Name, bool Create = false); @@ -505,6 +503,18 @@ public: bool IsAnonymous; }; +template +T* DeclarationContext::FindTemplate(const std::string& USR) +{ + auto foundTemplate = std::find_if(Templates.begin(), Templates.end(), + [&](Template* t) { return t->USR == USR; }); + + if (foundTemplate != Templates.end()) + return static_cast(*foundTemplate); + + return nullptr; +} + class CS_API TypedefNameDecl : public Declaration { public: diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index 44d97a5c..29cfaad3 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -1169,7 +1169,7 @@ ClassTemplate* Parser::WalkClassTemplate(const clang::ClassTemplateDecl* TD) assert(NS && "Expected a valid namespace"); auto USR = GetDeclUSR(TD); - auto CT = NS->FindClassTemplate(USR); + auto CT = NS->FindTemplate(USR); if (CT != nullptr) return CT; @@ -1354,7 +1354,7 @@ TypeAliasTemplate* Parser::WalkTypeAliasTemplate( assert(NS && "Expected a valid namespace"); auto USR = GetDeclUSR(TD); - auto TA = NS->FindTypeAliasTemplate(USR); + auto TA = NS->FindTemplate(USR); if (TA != nullptr) return TA; @@ -1380,7 +1380,7 @@ FunctionTemplate* Parser::WalkFunctionTemplate(const clang::FunctionTemplateDecl assert(NS && "Expected a valid namespace"); auto USR = GetDeclUSR(TD); - auto FT = NS->FindFunctionTemplate(USR); + auto FT = NS->FindTemplate(USR); if (FT != nullptr) return FT;