//-----------------------------------------------------------------
 void* StackMemoryManager::growObject( size_t amount )
 {
     size_t currentSize = getTopObjectSize();
     size_t newSize = currentSize + amount;
     size_t oldCurrentPos = mFrames[ mActiveFrame ].mCurrentPosition;
     size_t newDataSizePos = (mFrames[ mActiveFrame ].mCurrentPosition + amount) - sizeof(newSize);
     size_t newCurrentPos = newDataSizePos + sizeof(newSize);
     if ( newCurrentPos > mFrames[ mActiveFrame ].mMaxMemoryBlob )
     {
         size_t numOfAllocs = 0;
         while ( newCurrentPos > mFrames[ mActiveFrame ].mMaxMemoryBlob )
         {
             if (!allocateMoreMemory())
                 return 0;
             newDataSizePos = mFrames[ mActiveFrame ].mCurrentPosition + newSize;
             newCurrentPos = newDataSizePos + sizeof(newSize);
             numOfAllocs++;
         }
         void* source = mFrames[ mActiveFrame-numOfAllocs ].mMemoryBlob + oldCurrentPos - currentSize - sizeof(currentSize);
         memcpy(mFrames[ mActiveFrame ].mMemoryBlob, source, currentSize);
         // delete last object in last frame
         mFrames[ mActiveFrame-numOfAllocs ].mCurrentPosition -= ( currentSize + sizeof(mFrames[ mActiveFrame-numOfAllocs ].mCurrentPosition) );
     }
     mFrames[ mActiveFrame ].mCurrentPosition = newCurrentPos;
     writeNewObjectSize(newDataSizePos, newSize);
     return top();
 }
 //-----------------------------------------------------------------
 void StackMemoryManager::growObject( size_t amount )
 {
     size_t currentSize = getTopObjectSize();
     size_t newSize = currentSize + amount;
     size_t newDataSizePos = mCurrentPosition + newSize;
     mCurrentPosition = newDataSizePos + sizeof(newSize);
     // TODO check if new size exceeds allocated memory !!!
     writeNewObjectSize(newDataSizePos, newSize);
 }
	//--------------------------------------------------------------------
	void* StackMemoryManager::newObject( size_t objectSize )
	{
		size_t newDataPos = mCurrentPosition;

		size_t newDataSizePos = mCurrentPosition + objectSize;

        // objectSize will be written at newDataSizePos
		mCurrentPosition = newDataSizePos + sizeof(objectSize);

		if (mCurrentPosition >= mMaxMemoryBlob)
		{
//			assert(false);
			//realloc();
		}

        writeNewObjectSize(newDataSizePos, objectSize);

        return mMemoryBlob + newDataPos;
	}
	//--------------------------------------------------------------------
	void* StackMemoryManager::newObject( size_t objectSize )
	{
		size_t newDataPos = mFrames[ mActiveFrame ].mCurrentPosition;

		size_t newDataSizePos = mFrames[ mActiveFrame ].mCurrentPosition + objectSize;

        size_t newCurrentPos = newDataSizePos + sizeof(objectSize);
		while ( newCurrentPos > mFrames[ mActiveFrame ].mMaxMemoryBlob )
		{
            if (!allocateMoreMemory())
                return 0;

            newDataPos = mFrames[ mActiveFrame ].mCurrentPosition;
            newDataSizePos = mFrames[ mActiveFrame ].mCurrentPosition + objectSize;
            newCurrentPos = newDataSizePos + sizeof(objectSize);
		}

        // objectSize will be written at newDataSizePos
        mFrames[ mActiveFrame ].mCurrentPosition = newCurrentPos;

        writeNewObjectSize(newDataSizePos, objectSize);

        return mFrames[ mActiveFrame ].mMemoryBlob + newDataPos;
	}