/** * 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. */ #pragma once #include #include namespace facebook { namespace react { /** * A simple wrapper class that can be registered to a collection that keep it alive for extended period of time. * This object can be removed from the collection when needed. * * The subclass of this class must be created using std::make_shared(). * After creation, add it to the `LongLivedObjectCollection`. * When done with the object, call `allowRelease()` to allow the OS to release it. */ class LongLivedObject { public: void allowRelease(); protected: LongLivedObject(); }; /** * A singleton collection for the `LongLivedObject`s. */ class LongLivedObjectCollection { public: static LongLivedObjectCollection& get(); LongLivedObjectCollection(LongLivedObjectCollection const&) = delete; void operator=(LongLivedObjectCollection const&) = delete; void add(std::shared_ptr o); void remove(const LongLivedObject *o); void clear(); private: LongLivedObjectCollection(); std::unordered_set> collection_; }; } // namespace react } // namespace facebook