14#ifndef LLVM_CLANG_SCALABLESTATICANALYSISFRAMEWORK_CORE_SUMMARYDATA_SUMMARYDATASTORE_H
15#define LLVM_CLANG_SCALABLESTATICANALYSISFRAMEWORK_CORE_SUMMARYDATA_SUMMARYDATASTORE_H
21#include "llvm/Support/Error.h"
34 std::map<SummaryName, std::unique_ptr<SummaryData>> Data;
39 return Data.find(Name) != Data.end();
43 template <
typename DataT> [[nodiscard]]
bool contains()
const {
44 static_assert(std::is_base_of_v<SummaryData, DataT>,
45 "DataT must derive from SummaryData");
47 "DataT must have a static summaryName() method");
49 return contains(DataT::summaryName());
55 static_assert(std::is_base_of_v<SummaryData, DataT>,
56 "DataT must derive from SummaryData");
58 "DataT must have a static summaryName() method");
64 return static_cast<DataT &
>(*Result);
70 auto It = Data.find(Name);
71 if (It == Data.end()) {
73 "no data for analysis '{0}' in store",
82 template <
typename DataT>
84 static_assert(std::is_base_of_v<SummaryData, DataT>,
85 "DataT must derive from SummaryData");
87 "DataT must have a static summaryName() method");
93 return std::unique_ptr<DataT>(
static_cast<DataT *
>(
Result->release()));
100 auto It = Data.find(Name);
101 if (It == Data.end()) {
103 "no data for analysis '{0}' in store",
107 auto Ptr = std::move(It->second);
static ErrorBuilder create(std::error_code EC, const char *Fmt, Args &&...ArgVals)
Create an ErrorBuilder with an error code and formatted message.
llvm::Error build() const
Build and return the final error.
Consumes a LUSummary by dispatching its entity data to registered SummaryDataBuilders and returning t...
Owns a collection of SummaryData objects keyed by SummaryName.
llvm::Expected< SummaryData & > get(const SummaryName &Name)
Returns a reference to the data for Name, or an error if no data for Name is stored.
llvm::Expected< DataT & > get()
Returns a reference to the data for DataT, or an error if no data for DataT is stored.
bool contains() const
Returns true if data for DataT is stored.
bool contains(const SummaryName &Name) const
Returns true if data for Name is stored.
llvm::Expected< std::unique_ptr< DataT > > take()
Transfers ownership of the data for DataT to the caller, or returns an error if no data for DataT is ...
friend class LUSummaryConsumer
llvm::Expected< std::unique_ptr< SummaryData > > take(const SummaryName &Name)
Transfers ownership of the data for Name to the caller, or returns an error if no data for Name is st...
Uniquely identifies an analysis summary.
llvm::StringRef str() const
Explicit conversion to the underlying string representation.
@ Result
The result type of a method or function.
Type trait that checks whether T has a static summaryName() method returning SummaryName.