Ion
|
The DataContainer class encapsulates arbitrary user data passed to Ion. More...
#include "datacontainer.h"
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 T * | GetData () const |
Returns a const data pointer. More... | |
const void * | GetData () const |
Default GetData() returns a const void pointer. More... | |
template<typename T > | |
T * | GetMutableData () 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 AllocatorPtr & | GetAllocator () const |
Returns the Allocator that was used for the instance. More... | |
const AllocatorPtr & | GetNonNullAllocator () const |
Return our allocator, or the default allocator if the instance was declared on the stack. More... | |
const AllocatorPtr & | GetAllocatorForLifetime (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< Notifier > | NotifierPtr |
typedef AllocVector< NotifierPtr > | NotifierPtrVector |
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 NotifierPtrVector & | GetReceivers () 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... | |
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.
typedef std::function<void(void* data_to_delete)> ion::base::DataContainer::Deleter |
Generic delete function.
Definition at line 77 of file datacontainer.h.
|
protectedinherited |
Definition at line 49 of file notifier.h.
|
protectedinherited |
Definition at line 50 of file notifier.h.
|
overrideprotected |
The destructor is protected because all base::Referent classes must have protected or private destructors.
Definition at line 34 of file datacontainer.cc.
The constructor is protected because all allocation of DataContainers should be through the Create() functions.
Definition at line 28 of file datacontainer.cc.
|
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.
|
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().
|
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.
|
inlinestatic |
See class comment for documentation.
Definition at line 129 of file datacontainer.h.
|
inlinestatic |
See class comment for documentation.
Definition at line 142 of file datacontainer.h.
References ion::base::Allocator::AllocateMemory(), AllocatorDeleter(), ion::base::SharedPtr< T >::Get(), ion::base::Allocatable::GetAllocator(), ion::base::Allocator::GetAllocatorForLifetime(), ion::base::AllocationManager::GetDefaultAllocatorForLifetime(), kNullFunction, and ion::base::kShortTerm.
|
inlinestatic |
See class comment for documentation.
Definition at line 170 of file datacontainer.h.
References kNullFunction.
|
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().
|
inlineinherited |
Convenience function that returns the Allocator to use to allocate an object with a specific lifetime.
Definition at line 78 of file allocatable.h.
References ion::base::Allocator::GetAllocatorForLifetime().
Referenced by ion::text::BasicBuilder::BuildVertexData(), ion::text::OutlineBuilder::BuildVertexData(), ion::gfxutils::ShaderManager::CreateShaderProgram(), ion::text::DynamicFontImage::FindContainingImageDataIndex(), ion::text::DynamicFontImage::FindImageDataIndex(), ion::gfx::Renderer::Renderer(), and ion::gfx::UpdateStateTable().
|
inline |
Returns a const data pointer.
Definition at line 104 of file datacontainer.h.
|
inline |
Default GetData() returns a const void pointer.
Definition at line 109 of file datacontainer.h.
|
inline |
Returns a non-const data pointer.
Definition at line 115 of file datacontainer.h.
References ion::port::ERROR, and LOG.
|
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().
|
inherited |
Returns the number of Notifiers that will be notified.
Definition at line 71 of file notifier.cc.
|
protectedinherited |
Returns the set of Notifiers that will be notified.
Definition at line 77 of file notifier.cc.
|
inlineinherited |
GetRefCount() is part of the interface necessary for SharedPtr.
Definition at line 34 of file shareable.h.
Referenced by ion::base::Notifier::RemoveReceiver().
|
inline |
Returns the is_wipeable setting passed to the constructor.
Definition at line 100 of file datacontainer.h.
|
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().
|
protectedvirtualinherited |
Subclasses can override this to provide custom behavior on notifications.
Definition at line 96 of file notifier.cc.
|
inlineinherited |
Define the delete operator to use specialized functions dealing with an Allocator.
Definition at line 109 of file allocatable.h.
|
inlineinherited |
Windows requires these (or it issues C4291 warnings).
Definition at line 112 of file allocatable.h.
|
inlineinherited |
Definition at line 113 of file allocatable.h.
|
inlineinherited |
The placement delete operator does nothing, as usual.
Definition at line 118 of file allocatable.h.
|
inlineinherited |
The standard no-parameter new operator uses the default Allocator.
Definition at line 84 of file allocatable.h.
|
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.
|
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.
|
inlineinherited |
Special operator new for using placement new with Allocatables.
Definition at line 100 of file allocatable.h.
|
inlineinherited |
The placement new operator is defined conventionally.
Definition at line 105 of file allocatable.h.
|
inlinestatic |
Definition at line 87 of file datacontainer.h.
|
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.