/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #include "ShadowTreeRegistry.h" namespace facebook { namespace react { ShadowTreeRegistry::~ShadowTreeRegistry() { assert( registry_.size() == 0 && "Deallocation of non-empty `ShadowTreeRegistry`."); } void ShadowTreeRegistry::add(std::unique_ptr &&shadowTree) const { std::unique_lock lock(mutex_); registry_.emplace(shadowTree->getSurfaceId(), std::move(shadowTree)); } std::unique_ptr ShadowTreeRegistry::remove( SurfaceId surfaceId) const { std::unique_lock lock(mutex_); auto iterator = registry_.find(surfaceId); auto shadowTree = std::unique_ptr(iterator->second.release()); registry_.erase(iterator); return shadowTree; } bool ShadowTreeRegistry::visit( SurfaceId surfaceId, std::function callback) const { std::shared_lock lock(mutex_); auto iterator = registry_.find(surfaceId); if (iterator == registry_.end()) { return false; } callback(*iterator->second); return true; } void ShadowTreeRegistry::enumerate( std::function callback) const { std::shared_lock lock(mutex_); bool stop = false; for (auto const &pair : registry_) { callback(*pair.second, stop); if (stop) { break; } } } } // namespace react } // namespace facebook