root/ios/public/consumer/base/supports_user_data.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


// 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_

/* [<][>][^][v][top][bottom][index][help] */