123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- // Copyright 2019 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #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 "ui/base/metadata/metadata_types.h"
- namespace ui {
- namespace metadata {
- class ClassMetaData;
- // The MetaDataCache speeds up frequent traversals over the meta data for
- // various classes by caching one instance of ClassMetaData for each class on
- // which metadata is required.
- // MetaDataCache is implemented as a singleton. This also implies that each
- // instance of ClassMetaData registered into the cache represents one and only
- // one class type.
- 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<ClassMetaData*>& GetCachedTypes();
- private:
- ~MetaDataCache();
- std::vector<ClassMetaData*> class_data_cache_;
- };
- // These functions are rarely called directly, rather they are called from
- // within the macros used to declare the metadata for a class. See the macros in
- // reflections_macros.h
- //
- // Registers the class metadata into the global cache. Will DCHECK if the
- // metadata for a class is already registered.
- COMPONENT_EXPORT(UI_BASE_METADATA)
- void RegisterClassInfo(std::unique_ptr<ClassMetaData> meta_data);
- // Help function for creating and registering the metadata container into the
- // global cache for a given class. The metadata information is owned by the
- // given class.
- 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;
- }
- } // namespace metadata
- } // namespace ui
- #endif // UI_BASE_METADATA_METADATA_CACHE_H_
|