diff options
Diffstat (limited to 'contrib/llvm-project/clang/include/clang/ExtractAPI/Serialization/SerializerBase.h')
-rw-r--r-- | contrib/llvm-project/clang/include/clang/ExtractAPI/Serialization/SerializerBase.h | 314 |
1 files changed, 314 insertions, 0 deletions
diff --git a/contrib/llvm-project/clang/include/clang/ExtractAPI/Serialization/SerializerBase.h b/contrib/llvm-project/clang/include/clang/ExtractAPI/Serialization/SerializerBase.h new file mode 100644 index 000000000000..f0629a9ad56b --- /dev/null +++ b/contrib/llvm-project/clang/include/clang/ExtractAPI/Serialization/SerializerBase.h @@ -0,0 +1,314 @@ +//===- ExtractAPI/Serialization/SerializerBase.h ----------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +/// +/// \file +/// This file defines the ExtractAPI APISetVisitor interface. +/// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_EXTRACTAPI_SERIALIZATION_SERIALIZERBASE_H +#define LLVM_CLANG_EXTRACTAPI_SERIALIZATION_SERIALIZERBASE_H + +#include "clang/ExtractAPI/API.h" + +namespace clang { +namespace extractapi { + +/// The base interface of visitors for API information. +template <typename Derived> class APISetVisitor { +public: + void traverseAPISet() { + getDerived()->traverseNamespaces(); + + getDerived()->traverseGlobalVariableRecords(); + + getDerived()->traverseGlobalFunctionRecords(); + + getDerived()->traverseEnumRecords(); + + getDerived()->traverseStaticFieldRecords(); + + getDerived()->traverseCXXClassRecords(); + + getDerived()->traverseClassTemplateRecords(); + + getDerived()->traverseClassTemplateSpecializationRecords(); + + getDerived()->traverseClassTemplatePartialSpecializationRecords(); + + getDerived()->traverseCXXInstanceMethods(); + + getDerived()->traverseCXXStaticMethods(); + + getDerived()->traverseCXXMethodTemplates(); + + getDerived()->traverseCXXMethodTemplateSpecializations(); + + getDerived()->traverseCXXFields(); + + getDerived()->traverseCXXFieldTemplates(); + + getDerived()->traverseConcepts(); + + getDerived()->traverseGlobalVariableTemplateRecords(); + + getDerived()->traverseGlobalVariableTemplateSpecializationRecords(); + + getDerived()->traverseGlobalVariableTemplatePartialSpecializationRecords(); + + getDerived()->traverseGlobalFunctionTemplateRecords(); + + getDerived()->traverseGlobalFunctionTemplateSpecializationRecords(); + + getDerived()->traverseRecordRecords(); + + getDerived()->traverseObjCInterfaces(); + + getDerived()->traverseObjCProtocols(); + + getDerived()->traverseObjCCategories(); + + getDerived()->traverseMacroDefinitionRecords(); + + getDerived()->traverseTypedefRecords(); + } + + void traverseNamespaces() { + for (const auto &Namespace : API.getNamespaces()) + getDerived()->visitNamespaceRecord(*Namespace.second); + } + + void traverseGlobalFunctionRecords() { + for (const auto &GlobalFunction : API.getGlobalFunctions()) + getDerived()->visitGlobalFunctionRecord(*GlobalFunction.second); + } + + void traverseGlobalVariableRecords() { + for (const auto &GlobalVariable : API.getGlobalVariables()) + getDerived()->visitGlobalVariableRecord(*GlobalVariable.second); + } + + void traverseEnumRecords() { + for (const auto &Enum : API.getEnums()) + getDerived()->visitEnumRecord(*Enum.second); + } + + void traverseRecordRecords() { + for (const auto &Record : API.getRecords()) + getDerived()->visitRecordRecord(*Record.second); + } + + void traverseStaticFieldRecords() { + for (const auto &StaticField : API.getStaticFields()) + getDerived()->visitStaticFieldRecord(*StaticField.second); + } + + void traverseCXXClassRecords() { + for (const auto &Class : API.getCXXClasses()) + getDerived()->visitCXXClassRecord(*Class.second); + } + + void traverseCXXMethodTemplates() { + for (const auto &MethodTemplate : API.getCXXMethodTemplates()) + getDerived()->visitMethodTemplateRecord(*MethodTemplate.second); + } + + void traverseCXXMethodTemplateSpecializations() { + for (const auto &MethodTemplateSpecialization : + API.getCXXMethodTemplateSpecializations()) + getDerived()->visitMethodTemplateSpecializationRecord( + *MethodTemplateSpecialization.second); + } + + void traverseClassTemplateRecords() { + for (const auto &ClassTemplate : API.getClassTemplates()) + getDerived()->visitClassTemplateRecord(*ClassTemplate.second); + } + + void traverseClassTemplateSpecializationRecords() { + for (const auto &ClassTemplateSpecialization : + API.getClassTemplateSpecializations()) + getDerived()->visitClassTemplateSpecializationRecord( + *ClassTemplateSpecialization.second); + } + + void traverseClassTemplatePartialSpecializationRecords() { + for (const auto &ClassTemplatePartialSpecialization : + API.getClassTemplatePartialSpecializations()) + getDerived()->visitClassTemplatePartialSpecializationRecord( + *ClassTemplatePartialSpecialization.second); + } + + void traverseCXXInstanceMethods() { + for (const auto &InstanceMethod : API.getCXXInstanceMethods()) + getDerived()->visitCXXInstanceMethodRecord(*InstanceMethod.second); + } + + void traverseCXXStaticMethods() { + for (const auto &InstanceMethod : API.getCXXStaticMethods()) + getDerived()->visitCXXStaticMethodRecord(*InstanceMethod.second); + } + + void traverseCXXFields() { + for (const auto &CXXField : API.getCXXFields()) + getDerived()->visitCXXFieldRecord(*CXXField.second); + } + + void traverseCXXFieldTemplates() { + for (const auto &CXXFieldTemplate : API.getCXXFieldTemplates()) + getDerived()->visitCXXFieldTemplateRecord(*CXXFieldTemplate.second); + } + + void traverseGlobalVariableTemplateRecords() { + for (const auto &GlobalVariableTemplate : API.getGlobalVariableTemplates()) + getDerived()->visitGlobalVariableTemplateRecord( + *GlobalVariableTemplate.second); + } + + void traverseGlobalVariableTemplateSpecializationRecords() { + for (const auto &GlobalVariableTemplateSpecialization : + API.getGlobalVariableTemplateSpecializations()) + getDerived()->visitGlobalVariableTemplateSpecializationRecord( + *GlobalVariableTemplateSpecialization.second); + } + + void traverseGlobalVariableTemplatePartialSpecializationRecords() { + for (const auto &GlobalVariableTemplatePartialSpecialization : + API.getGlobalVariableTemplatePartialSpecializations()) + getDerived()->visitGlobalVariableTemplatePartialSpecializationRecord( + *GlobalVariableTemplatePartialSpecialization.second); + } + + void traverseGlobalFunctionTemplateRecords() { + for (const auto &GlobalFunctionTemplate : API.getGlobalFunctionTemplates()) + getDerived()->visitGlobalFunctionTemplateRecord( + *GlobalFunctionTemplate.second); + } + + void traverseGlobalFunctionTemplateSpecializationRecords() { + for (const auto &GlobalFunctionTemplateSpecialization : + API.getGlobalFunctionTemplateSpecializations()) + getDerived()->visitGlobalFunctionTemplateSpecializationRecord( + *GlobalFunctionTemplateSpecialization.second); + } + + void traverseConcepts() { + for (const auto &Concept : API.getConcepts()) + getDerived()->visitConceptRecord(*Concept.second); + } + + void traverseObjCInterfaces() { + for (const auto &Interface : API.getObjCInterfaces()) + getDerived()->visitObjCContainerRecord(*Interface.second); + } + + void traverseObjCProtocols() { + for (const auto &Protocol : API.getObjCProtocols()) + getDerived()->visitObjCContainerRecord(*Protocol.second); + } + + void traverseObjCCategories() { + for (const auto &Category : API.getObjCCategories()) + getDerived()->visitObjCCategoryRecord(*Category.second); + } + + void traverseMacroDefinitionRecords() { + for (const auto &Macro : API.getMacros()) + getDerived()->visitMacroDefinitionRecord(*Macro.second); + } + + void traverseTypedefRecords() { + for (const auto &Typedef : API.getTypedefs()) + getDerived()->visitTypedefRecord(*Typedef.second); + } + + void visitNamespaceRecord(const NamespaceRecord &Record){}; + + /// Visit a global function record. + void visitGlobalFunctionRecord(const GlobalFunctionRecord &Record){}; + + /// Visit a global variable record. + void visitGlobalVariableRecord(const GlobalVariableRecord &Record){}; + + /// Visit an enum record. + void visitEnumRecord(const EnumRecord &Record){}; + + /// Visit a record record. + void visitRecordRecord(const RecordRecord &Record){}; + + void visitStaticFieldRecord(const StaticFieldRecord &Record){}; + + void visitCXXClassRecord(const CXXClassRecord &Record){}; + + void visitClassTemplateRecord(const ClassTemplateRecord &Record){}; + + void visitClassTemplateSpecializationRecord( + const ClassTemplateSpecializationRecord &Record){}; + + void visitClassTemplatePartialSpecializationRecord( + const ClassTemplatePartialSpecializationRecord &Record){}; + + void visitCXXInstanceRecord(const CXXInstanceMethodRecord &Record){}; + + void visitCXXStaticRecord(const CXXStaticMethodRecord &Record){}; + + void visitMethodTemplateRecord(const CXXMethodTemplateRecord &Record){}; + + void visitMethodTemplateSpecializationRecord( + const CXXMethodTemplateSpecializationRecord &Record){}; + + void visitCXXFieldTemplateRecord(const CXXFieldTemplateRecord &Record){}; + + void visitGlobalVariableTemplateRecord( + const GlobalVariableTemplateRecord &Record) {} + + void visitGlobalVariableTemplateSpecializationRecord( + const GlobalVariableTemplateSpecializationRecord &Record){}; + + void visitGlobalVariableTemplatePartialSpecializationRecord( + const GlobalVariableTemplatePartialSpecializationRecord &Record){}; + + void visitGlobalFunctionTemplateRecord( + const GlobalFunctionTemplateRecord &Record){}; + + void visitGlobalFunctionTemplateSpecializationRecord( + const GlobalFunctionTemplateSpecializationRecord &Record){}; + + /// Visit an Objective-C container record. + void visitObjCContainerRecord(const ObjCContainerRecord &Record){}; + + /// Visit an Objective-C category record. + void visitObjCCategoryRecord(const ObjCCategoryRecord &Record){}; + + /// Visit a macro definition record. + void visitMacroDefinitionRecord(const MacroDefinitionRecord &Record){}; + + /// Visit a typedef record. + void visitTypedefRecord(const TypedefRecord &Record){}; + +protected: + const APISet &API; + +public: + APISetVisitor() = delete; + APISetVisitor(const APISetVisitor &) = delete; + APISetVisitor(APISetVisitor &&) = delete; + APISetVisitor &operator=(const APISetVisitor &) = delete; + APISetVisitor &operator=(APISetVisitor &&) = delete; + +protected: + APISetVisitor(const APISet &API) : API(API) {} + ~APISetVisitor() = default; + + Derived *getDerived() { return static_cast<Derived *>(this); }; +}; + +} // namespace extractapi +} // namespace clang + +#endif // LLVM_CLANG_EXTRACTAPI_SERIALIZATION_SERIALIZERBASE_H |