metadata_cache.cc 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // Copyright 2019 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ui/base/metadata/metadata_cache.h"
  5. #include <algorithm>
  6. #include "base/check_op.h"
  7. #include "base/no_destructor.h"
  8. #include "ui/base/metadata/metadata_types.h"
  9. namespace ui {
  10. namespace metadata {
  11. MetaDataCache::MetaDataCache() = default;
  12. MetaDataCache::~MetaDataCache() = default;
  13. // static
  14. MetaDataCache* MetaDataCache::GetInstance() {
  15. static base::NoDestructor<MetaDataCache> instance;
  16. return instance.get();
  17. }
  18. void MetaDataCache::AddClassMetaData(
  19. std::unique_ptr<ClassMetaData> class_data) {
  20. #if DCHECK_IS_ON()
  21. const std::vector<ClassMetaData*>::const_reverse_iterator existing_data =
  22. std::find_if(class_data_cache_.rbegin(), class_data_cache_.rend(),
  23. [&class_data](ClassMetaData* comp_data) {
  24. return comp_data->type_name() == class_data->type_name();
  25. });
  26. DCHECK(existing_data == class_data_cache_.rend());
  27. #endif
  28. class_data_cache_.push_back(class_data.release());
  29. }
  30. std::vector<ClassMetaData*>& MetaDataCache::GetCachedTypes() {
  31. return class_data_cache_;
  32. }
  33. void RegisterClassInfo(std::unique_ptr<ClassMetaData> meta_data) {
  34. MetaDataCache* cache = MetaDataCache::GetInstance();
  35. cache->AddClassMetaData(std::move(meta_data));
  36. }
  37. } // namespace metadata
  38. } // namespace ui