#ifndef UI_BASE_METADATA_METADATA_CACHE_H_
#define UI_BASE_METADATA_METADATA_CACHE_H_
#include <memory>
#include <utility>
#include <vector>
#include "base/component_export.h"
#include "base/memory/raw_ptr.h"
#include "ui/base/metadata/metadata_types.h"
namespace ui {
namespace metadata {
class ClassMetaData;
class COMPONENT_EXPORT(UI_BASE_METADATA) MetaDataCache {
public:
MetaDataCache();
MetaDataCache(const MetaDataCache&) = delete;
MetaDataCache& operator=(const MetaDataCache&) = delete;
static MetaDataCache* GetInstance();
void AddClassMetaData(std::unique_ptr<ClassMetaData> class_data);
std::vector<raw_ptr<ClassMetaData, VectorExperimental>>& GetCachedTypes();
private:
~MetaDataCache();
std::vector<raw_ptr<ClassMetaData, VectorExperimental>> class_data_cache_;
};
COMPONENT_EXPORT(UI_BASE_METADATA)
void RegisterClassInfo(std::unique_ptr<ClassMetaData> meta_data);
template <typename TMetaData>
ClassMetaData* MakeAndRegisterClassInfo() {
std::unique_ptr<TMetaData> class_meta_data = std::make_unique<TMetaData>();
TMetaData* const ret = class_meta_data.get();
RegisterClassInfo(std::move(class_meta_data));
return ret;
}
}
}
#endif