Classes | Public Member Functions

KHungryAllocator Class Reference

Search for all occurrences

Detailed Description

This allocator only frees the allocated memory when it is deleted.

This is a good allocator for building dictionaries, where we only add things to a container, but never remove them.

Definition at line 117 of file kcontainerallocators.h.

#include <kcontainerallocators.h>

List of all members.

Classes

class   MemoryBlock

Public Member Functions

  KHungryAllocator (size_t pRecordSize)
  KHungryAllocator (const KHungryAllocator &pOther)
  ~KHungryAllocator ()
void  Reserve (size_t const pRecordCount)
void *  AllocateRecords (size_t const pRecordCount=1)
void  FreeMemory (void *pRecord)
size_t  GetRecordSize () const
KHungryAllocator operator= (const KHungryAllocator &pOther)

Constructor & Destructor Documentation

KHungryAllocator ( size_t  pRecordSize ) [inline]

Definition at line 120 of file kcontainerallocators.h.

        : mRecordSize(pRecordSize)
        , mData(NULL)
        , mRecordPoolSize(0)
    {
    }
KHungryAllocator ( const KHungryAllocator pOther ) [inline]

Definition at line 127 of file kcontainerallocators.h.

        : mRecordSize(pOther.mRecordSize)
        , mData(0)
        , mRecordPoolSize(pOther.mRecordPoolSize)
    {
    }
~KHungryAllocator ( ) [inline]

Definition at line 134 of file kcontainerallocators.h.

    {
        MemoryBlock* lCurrent = mData;
        MemoryBlock* lNext = lCurrent ? lCurrent->mNextBlock : 0;
        while (lCurrent)
        {
            FbxSdkDelete(lCurrent);
            lCurrent = lNext;
            lNext = lCurrent ? lCurrent->mNextBlock : 0;
        }
    }

Member Function Documentation

void Reserve ( size_t const  pRecordCount ) [inline]

Definition at line 146 of file kcontainerallocators.h.

    {
        MemoryBlock* lMem = FbxSdkNew< MemoryBlock >(pRecordCount * mRecordSize);
        lMem->mNextBlock = mData;
        mData = lMem;
        mRecordPoolSize += pRecordCount;
    }
void* AllocateRecords ( size_t const  pRecordCount = 1 ) [inline]

Definition at line 154 of file kcontainerallocators.h.

    {
        MemoryBlock* lBlock = mData;
        void* lRecord = NULL;

        while ((lBlock != NULL) &&
            ((lRecord = lBlock->GetChunk(pRecordCount * mRecordSize)) == NULL))
        {
            lBlock = lBlock->mNextBlock;
        }

        if (lRecord == NULL)
        {
            size_t lNumRecordToAllocate = mRecordPoolSize / 8 == 0 ? 2 : mRecordPoolSize / 8;
            if (lNumRecordToAllocate < pRecordCount)
            {
                lNumRecordToAllocate = pRecordCount;
            }
            Reserve(lNumRecordToAllocate);
            lRecord = AllocateRecords(pRecordCount);
        }

        return lRecord;
    }
void FreeMemory ( void *  pRecord ) [inline]

Definition at line 179 of file kcontainerallocators.h.

    {
        // "Hungry": release memory only when the allocator is destroyed.
    }
size_t GetRecordSize ( ) const [inline]

Definition at line 184 of file kcontainerallocators.h.

    {
        return mRecordSize;
    }
KHungryAllocator& operator= ( const KHungryAllocator pOther ) [inline]

Definition at line 189 of file kcontainerallocators.h.

    {
        if( this != &pOther )
        {
            // The next call to AllocateRecords() may skip over currently reserved
            // records if the size changes drastically, but otherwise GetChunk()
            // is size-oblivious.
            if( mRecordSize < pOther.mRecordSize )
            {
                mRecordPoolSize = 0;
            }

            mRecordSize = pOther.mRecordSize;
        }

        return(*this);
    }

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

KHungryAllocator KHungryAllocator KHungryAllocator KHungryAllocator KHungryAllocator KHungryAllocator KHungryAllocator KHungryAllocator KHungryAllocator KHungryAllocator
KHungryAllocator KHungryAllocator KHungryAllocator KHungryAllocator KHungryAllocator KHungryAllocator KHungryAllocator KHungryAllocator KHungryAllocator KHungryAllocator