1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- // 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.
- #include "ui/base/metadata/metadata_cache.h"
- #include <algorithm>
- #include "base/check_op.h"
- #include "base/no_destructor.h"
- #include "ui/base/metadata/metadata_types.h"
- namespace ui {
- namespace metadata {
- MetaDataCache::MetaDataCache() = default;
- MetaDataCache::~MetaDataCache() = default;
- // static
- MetaDataCache* MetaDataCache::GetInstance() {
- static base::NoDestructor<MetaDataCache> instance;
- return instance.get();
- }
- void MetaDataCache::AddClassMetaData(
- std::unique_ptr<ClassMetaData> class_data) {
- #if DCHECK_IS_ON()
- const std::vector<ClassMetaData*>::const_reverse_iterator existing_data =
- std::find_if(class_data_cache_.rbegin(), class_data_cache_.rend(),
- [&class_data](ClassMetaData* comp_data) {
- return comp_data->type_name() == class_data->type_name();
- });
- DCHECK(existing_data == class_data_cache_.rend());
- #endif
- class_data_cache_.push_back(class_data.release());
- }
- std::vector<ClassMetaData*>& MetaDataCache::GetCachedTypes() {
- return class_data_cache_;
- }
- void RegisterClassInfo(std::unique_ptr<ClassMetaData> meta_data) {
- MetaDataCache* cache = MetaDataCache::GetInstance();
- cache->AddClassMetaData(std::move(meta_data));
- }
- } // namespace metadata
- } // namespace ui
|