| // Copyright 2013 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 IOS_PUBLIC_CONSUMER_BASE_SUPPORTS_USER_DATA_H_ |
| #define IOS_PUBLIC_CONSUMER_BASE_SUPPORTS_USER_DATA_H_ |
| |
| namespace ios { |
| |
| class SupportsUserDataInternal; |
| |
| // This is a helper for classes that want to allow users to stash random data by |
| // key. At destruction all the objects will be destructed. |
| class SupportsUserData { |
| public: |
| SupportsUserData(); |
| |
| // Derive from this class and add your own data members to associate extra |
| // information with this object. Alternatively, add this as a public base |
| // class to any class with a virtual destructor. |
| class Data { |
| public: |
| virtual ~Data() {} |
| }; |
| |
| // The user data allows the clients to associate data with this object. |
| // Multiple user data values can be stored under different keys. |
| // This object will TAKE OWNERSHIP of the given data pointer, and will |
| // delete the object if it is changed or the object is destroyed. |
| Data* GetUserData(const void* key) const; |
| void SetUserData(const void* key, Data* data); |
| void RemoveUserData(const void* key); |
| |
| // SupportsUserData is not thread-safe, and on debug build will assert it is |
| // only used on one thread. Calling this method allows the caller to hand |
| // the SupportsUserData instance across threads. Use only if you are taking |
| // full control of the synchronization of that handover. |
| void DetachUserDataThread(); |
| |
| protected: |
| virtual ~SupportsUserData(); |
| |
| private: |
| // Owned by this object and scoped to its lifetime. |
| SupportsUserDataInternal* internal_helper_; |
| }; |
| |
| } // namespace ios |
| |
| #endif // IOS_PUBLIC_CONSUMER_BASE_SUPPORTS_USER_DATA_H_ |