Ion
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ion::base::DataContainer Class Reference

The DataContainer class encapsulates arbitrary user data passed to Ion. More...

#include "datacontainer.h"

Inheritance diagram for ion::base::DataContainer:
Collaboration diagram for ion::base::DataContainer:

Public Types

typedef std::function< void(void
*data_to_delete)> 
Deleter
 Generic delete function. More...
 

Public Member Functions

bool IsWipeable () const
 Returns the is_wipeable setting passed to the constructor. More...
 
template<typename T >
const TGetData () const
 Returns a const data pointer. More...
 
const void * GetData () const
 Default GetData() returns a const void pointer. More...
 
template<typename T >
TGetMutableData () const
 Returns a non-const data pointer. More...
 
void WipeData ()
 Informs the DataContainer that the data is no longer needed and can be deleted. More...
 
void AddReceiver (Notifier *receiver)
 Adds a Notifier to be notified. More...
 
void RemoveReceiver (Notifier *receiver)
 Removes a Notifier to be notified. More...
 
size_t GetReceiverCount () const
 Returns the number of Notifiers that will be notified. More...
 
const AllocatorPtrGetAllocator () const
 Returns the Allocator that was used for the instance. More...
 
const AllocatorPtrGetNonNullAllocator () const
 Return our allocator, or the default allocator if the instance was declared on the stack. More...
 
const AllocatorPtrGetAllocatorForLifetime (AllocationLifetime lifetime) const
 Convenience function that returns the Allocator to use to allocate an object with a specific lifetime. More...
 
void * operator new (size_t size)
 The standard no-parameter new operator uses the default Allocator. More...
 
void * operator new (size_t size, AllocationLifetime lifetime)
 This overloaded version of the new operator uses the AllocationManager's default Allocator for the specified lifetime. More...
 
void * operator new (size_t size, const AllocatorPtr &allocator)
 This overloaded version of the new operator takes the Allocator to use directly as a parameter. More...
 
void * operator new (size_t size, const AllocatorPtr &allocator, void *ptr)
 Special operator new for using placement new with Allocatables. More...
 
void * operator new (size_t size, void *ptr)
 The placement new operator is defined conventionally. More...
 
void operator delete (void *ptr)
 Define the delete operator to use specialized functions dealing with an Allocator. More...
 
void operator delete (void *ptr, AllocationLifetime lifetime)
 Windows requires these (or it issues C4291 warnings). More...
 
void operator delete (void *ptr, const AllocatorPtr &allocator)
 
void operator delete (void *ptr, void *ptr2)
 The placement delete operator does nothing, as usual. More...
 
int GetRefCount () const
 GetRefCount() is part of the interface necessary for SharedPtr. More...
 

Static Public Member Functions

template<typename T >
static void ArrayDeleter (void *data_to_delete)
 Generic deleters that perform the most common deletion operations. More...
 
template<typename T >
static void PointerDeleter (void *data_to_delete)
 
static void AllocatorDeleter (AllocatorPtr allocator, void *data_to_delete)
 A deleter for data allocated by an Allocator. More...
 
template<typename T >
static DataContainerPtr Create (T *data, const Deleter &data_deleter, bool is_wipeable, const AllocatorPtr &container_allocator)
 See class comment for documentation. More...
 
template<typename T >
static DataContainerPtr CreateAndCopy (const T *data, size_t count, bool is_wipeable, const AllocatorPtr &container_and_data_allocator)
 See class comment for documentation. More...
 
template<typename T >
static DataContainerPtr CreateOverAllocated (size_t count, const T *data, const AllocatorPtr &container_allocator)
 See class comment for documentation. More...
 

Protected Types

typedef WeakReferentPtr< NotifierNotifierPtr
 
typedef AllocVector< NotifierPtrNotifierPtrVector
 

Protected Member Functions

 ~DataContainer () override
 The destructor is protected because all base::Referent classes must have protected or private destructors. More...
 
 DataContainer (const Deleter &deleter, bool is_wipeable)
 The constructor is protected because all allocation of DataContainers should be through the Create() functions. More...
 
const NotifierPtrVectorGetReceivers () const
 Returns the set of Notifiers that will be notified. More...
 
void Notify () const
 Notifies all contained Notifiers by calling their OnNotify(). More...
 
virtual void OnNotify (const Notifier *notifier)
 Subclasses can override this to provide custom behavior on notifications. More...
 

Detailed Description

The DataContainer class encapsulates arbitrary user data passed to Ion.

It can only be created using one of the static Create() functions, templatized on a type T. The data in the DataContainer is created and destroyed depending on which Create() function is used. The three possibilities are:

Create(T* data, Deleter data_deleter, bool is_wipeable, const AllocatorPtr& container_allocator) The internal data pointer is set to data and the DataContainer is allocated using the passed Allocator. If data_deleter is NULL, then the caller is responsible for deleting data, and is_wipeable is ignored. If data_deleter is non-NULL, then the data will be deleted by calling data_deleter on the pointer when WipeData() is called if is_wipeable is set; otherwise data_deleter is called on the pointer only when the DataContainer is destroyed. The deleter can be any std::function that properly cleans up data; ArrayDeleter, PointerDeleter, and AllocatorDeleter static functions are provided for convenience.

CreateAndCopy(const T* data, size_t count, bool is_wipeable, const AllocatorPtr& container_and_data_allocator) The DataContainer and its internal data pointer are allocated from the passed Allocator and count elements are copied from data if data is non-NULL. The data will be deleted when WipeData() is called if is_wipeable is set; otherwise it is deleted only when the DataContainer is destroyed. The deleter function is always AllocatorDeleter (see below).

CreateOverAllocated(size_t count, T* data, const AllocatorPtr& container_allocator) Over-allocates the DataContainer by count elements of type T (i.e., this is essentially malloc(sizeof(DataContainer) + sizeof(T) * count)) and copies data into the DataContainer's data if data is non-NULL. The memory is allocated using the passed Allocator. The new data is destroyed only when the DataContainer is destroyed.

Definition at line 74 of file datacontainer.h.

Member Typedef Documentation

typedef std::function<void(void* data_to_delete)> ion::base::DataContainer::Deleter

Generic delete function.

Definition at line 77 of file datacontainer.h.

Definition at line 49 of file notifier.h.

Definition at line 50 of file notifier.h.

Constructor & Destructor Documentation

ion::base::DataContainer::~DataContainer ( )
overrideprotected

The destructor is protected because all base::Referent classes must have protected or private destructors.

Definition at line 34 of file datacontainer.cc.

ion::base::DataContainer::DataContainer ( const Deleter deleter,
bool  is_wipeable 
)
protected

The constructor is protected because all allocation of DataContainers should be through the Create() functions.

Definition at line 28 of file datacontainer.cc.

Member Function Documentation

void ion::base::Notifier::AddReceiver ( Notifier receiver)
inherited

Adds a Notifier to be notified.

Does nothing if the receiver is NULL or is already in the receiver vector.

Definition at line 25 of file notifier.cc.

static void ion::base::DataContainer::AllocatorDeleter ( AllocatorPtr  allocator,
void *  data_to_delete 
)
inlinestatic

A deleter for data allocated by an Allocator.

The AllocatorPtr is passed by value so that a std::bind that invokes the deleter will hold a strong reference to it.

Definition at line 94 of file datacontainer.h.

References DCHECK, ion::base::Allocator::DeallocateMemory(), and ion::base::SharedPtr< T >::Get().

Referenced by CreateAndCopy().

template<typename T >
static void ion::base::DataContainer::ArrayDeleter ( void *  data_to_delete)
inlinestatic

Generic deleters that perform the most common deletion operations.

These deleters may all be passed to Create() (see above).

Definition at line 82 of file datacontainer.h.

template<typename T >
static DataContainerPtr ion::base::DataContainer::Create ( T data,
const Deleter data_deleter,
bool  is_wipeable,
const AllocatorPtr container_allocator 
)
inlinestatic

See class comment for documentation.

Definition at line 129 of file datacontainer.h.

template<typename T >
static DataContainerPtr ion::base::DataContainer::CreateAndCopy ( const T data,
size_t  count,
bool  is_wipeable,
const AllocatorPtr container_and_data_allocator 
)
inlinestatic
template<typename T >
static DataContainerPtr ion::base::DataContainer::CreateOverAllocated ( size_t  count,
const T data,
const AllocatorPtr container_allocator 
)
inlinestatic

See class comment for documentation.

Definition at line 170 of file datacontainer.h.

References kNullFunction.

const AllocatorPtr& ion::base::Allocatable::GetAllocator ( ) const
inlineinherited

Returns the Allocator that was used for the instance.

This will be NULL if the instance was declared on the stack or created with normal placement new.

Definition at line 68 of file allocatable.h.

References allocator_.

Referenced by CreateAndCopy(), ion::text::DynamicFontImage::FindContainingImageDataIndex(), and ion::text::DynamicFontImage::FindImageDataIndex().

template<typename T >
const T* ion::base::DataContainer::GetData ( ) const
inline

Returns a const data pointer.

Definition at line 104 of file datacontainer.h.

const void* ion::base::DataContainer::GetData ( ) const
inline

Default GetData() returns a const void pointer.

Definition at line 109 of file datacontainer.h.

template<typename T >
T* ion::base::DataContainer::GetMutableData ( ) const
inline

Returns a non-const data pointer.

Definition at line 115 of file datacontainer.h.

References ion::port::ERROR, and LOG.

const AllocatorPtr& ion::base::Allocatable::GetNonNullAllocator ( ) const
inlineinherited

Return our allocator, or the default allocator if the instance was declared on the stack.

Definition at line 72 of file allocatable.h.

References allocator_, and ion::base::AllocationManager::GetNonNullAllocator().

size_t ion::base::Notifier::GetReceiverCount ( ) const
inherited

Returns the number of Notifiers that will be notified.

Definition at line 71 of file notifier.cc.

const Notifier::NotifierPtrVector & ion::base::Notifier::GetReceivers ( ) const
protectedinherited

Returns the set of Notifiers that will be notified.

Definition at line 77 of file notifier.cc.

int ion::base::Shareable::GetRefCount ( ) const
inlineinherited

GetRefCount() is part of the interface necessary for SharedPtr.

Definition at line 34 of file shareable.h.

Referenced by ion::base::Notifier::RemoveReceiver().

bool ion::base::DataContainer::IsWipeable ( ) const
inline

Returns the is_wipeable setting passed to the constructor.

Definition at line 100 of file datacontainer.h.

void ion::base::Notifier::Notify ( ) const
protectedinherited

Notifies all contained Notifiers by calling their OnNotify().

Any receivers that have been destroyed will be removed from the vector of receivers.

Definition at line 81 of file notifier.cc.

References ion::base::SharedPtr< T >::Get().

void ion::base::Notifier::OnNotify ( const Notifier notifier)
protectedvirtualinherited

Subclasses can override this to provide custom behavior on notifications.

Definition at line 96 of file notifier.cc.

void ion::base::Allocatable::operator delete ( void *  ptr)
inlineinherited

Define the delete operator to use specialized functions dealing with an Allocator.

Definition at line 109 of file allocatable.h.

void ion::base::Allocatable::operator delete ( void *  ptr,
AllocationLifetime  lifetime 
)
inlineinherited

Windows requires these (or it issues C4291 warnings).

Definition at line 112 of file allocatable.h.

void ion::base::Allocatable::operator delete ( void *  ptr,
const AllocatorPtr allocator 
)
inlineinherited

Definition at line 113 of file allocatable.h.

void ion::base::Allocatable::operator delete ( void *  ptr,
void *  ptr2 
)
inlineinherited

The placement delete operator does nothing, as usual.

Definition at line 118 of file allocatable.h.

void* ion::base::Allocatable::operator new ( size_t  size)
inlineinherited

The standard no-parameter new operator uses the default Allocator.

Definition at line 84 of file allocatable.h.

void* ion::base::Allocatable::operator new ( size_t  size,
AllocationLifetime  lifetime 
)
inlineinherited

This overloaded version of the new operator uses the AllocationManager's default Allocator for the specified lifetime.

Definition at line 88 of file allocatable.h.

void* ion::base::Allocatable::operator new ( size_t  size,
const AllocatorPtr allocator 
)
inlineinherited

This overloaded version of the new operator takes the Allocator to use directly as a parameter.

If the Allocator pointer is NULL, this uses the default Allocator.

Definition at line 95 of file allocatable.h.

void* ion::base::Allocatable::operator new ( size_t  size,
const AllocatorPtr allocator,
void *  ptr 
)
inlineinherited

Special operator new for using placement new with Allocatables.

Definition at line 100 of file allocatable.h.

void* ion::base::Allocatable::operator new ( size_t  size,
void *  ptr 
)
inlineinherited

The placement new operator is defined conventionally.

Definition at line 105 of file allocatable.h.

template<typename T >
static void ion::base::DataContainer::PointerDeleter ( void *  data_to_delete)
inlinestatic

Definition at line 87 of file datacontainer.h.

void ion::base::Notifier::RemoveReceiver ( Notifier receiver)
inherited

Removes a Notifier to be notified.

Does nothing if the receiver is NULL or not in the set of receivers.

Definition at line 38 of file notifier.cc.

References ion::base::Shareable::GetRefCount().

Referenced by ion::gfx::AttributeArray::~AttributeArray().

void ion::base::DataContainer::WipeData ( )

Informs the DataContainer that the data is no longer needed and can be deleted.

It does this only if is_wipeable=true was passed to the constructor and there is a non-NULL deleter; otherwise, it has no effect.

Definition at line 39 of file datacontainer.cc.


The documentation for this class was generated from the following files: