22#ifndef LLVM_CLANG_SCALABLESTATICANALYSISFRAMEWORK_CORE_SUMMARYDATA_SUMMARYDATABUILDERREGISTRY_H
23#define LLVM_CLANG_SCALABLESTATICANALYSISFRAMEWORK_CORE_SUMMARYDATA_SUMMARYDATABUILDERREGISTRY_H
26#include "llvm/Support/Registry.h"
30LLVM_DECLARE_REGISTRY(llvm::Registry<clang::ssaf::SummaryDataBuilderBase>)
39class SummaryDataBuilderRegistry {
40 using RegistryT = llvm::Registry<SummaryDataBuilderBase>;
42 SummaryDataBuilderRegistry() =
delete;
51 template <
typename BuilderT>
struct Add {
52 explicit Add(llvm::StringRef Desc)
53 : Name(BuilderT::summaryName().str().str()), Node(Name, Desc) {}
60 RegistryT::Add<BuilderT> Node;
64 static bool contains(llvm::StringRef Name);
68 static std::unique_ptr<SummaryDataBuilderBase>
static bool contains(llvm::StringRef Name)
Returns true if a builder is registered under Name.
static std::unique_ptr< SummaryDataBuilderBase > instantiate(llvm::StringRef Name)
Instantiates the builder registered under Name, or returns nullptr if no such builder is registered.
Add & operator=(const Add &)=delete
Add(llvm::StringRef Desc)