Home | History | Annotate | Download | only in base
      1 // Copyright 2013 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 
      5 #ifndef IOS_PUBLIC_CONSUMER_BASE_SUPPORTS_USER_DATA_H_
      6 #define IOS_PUBLIC_CONSUMER_BASE_SUPPORTS_USER_DATA_H_
      7 
      8 namespace ios {
      9 
     10 class SupportsUserDataInternal;
     11 
     12 // This is a helper for classes that want to allow users to stash random data by
     13 // key. At destruction all the objects will be destructed.
     14 class SupportsUserData {
     15  public:
     16   SupportsUserData();
     17 
     18   // Derive from this class and add your own data members to associate extra
     19   // information with this object. Alternatively, add this as a public base
     20   // class to any class with a virtual destructor.
     21   class Data {
     22    public:
     23     virtual ~Data() {}
     24   };
     25 
     26   // The user data allows the clients to associate data with this object.
     27   // Multiple user data values can be stored under different keys.
     28   // This object will TAKE OWNERSHIP of the given data pointer, and will
     29   // delete the object if it is changed or the object is destroyed.
     30   Data* GetUserData(const void* key) const;
     31   void SetUserData(const void* key, Data* data);
     32   void RemoveUserData(const void* key);
     33 
     34   // SupportsUserData is not thread-safe, and on debug build will assert it is
     35   // only used on one thread. Calling this method allows the caller to hand
     36   // the SupportsUserData instance across threads. Use only if you are taking
     37   // full control of the synchronization of that handover.
     38   void DetachUserDataThread();
     39 
     40  protected:
     41   virtual ~SupportsUserData();
     42 
     43  private:
     44   // Owned by this object and scoped to its lifetime.
     45   SupportsUserDataInternal* internal_helper_;
     46 };
     47 
     48 }  // namespace ios
     49 
     50 #endif  // IOS_PUBLIC_CONSUMER_BASE_SUPPORTS_USER_DATA_H_
     51