//-----------------------------------------------------------------
 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::deleteObject()
	{
        mFrames[ mActiveFrame ].mCurrentPosition -= ( getTopObjectSize() + sizeof(mFrames[ mActiveFrame ].mCurrentPosition) );
        while ( mFrames[ mActiveFrame ].mCurrentPosition == 0 && mActiveFrame != 0 )
        {
            delete[] mFrames[ mActiveFrame ].mMemoryBlob;
            mFrames[ mActiveFrame-- ].mMemoryBlob = 0;
        }
	}
    //--------------------------------------------------------------------
	void StackMemoryManager::deleteObject()
	{
		//mCurrentPosition -=  ( (*((size_t*)mMemoryBlob[mCurrentPosition - 1])) + sizeof(mCurrentPosition));
		//mCurrentPosition -=  ( (*((size_t*)(mMemoryBlob + mCurrentPosition - sizeof(mCurrentPosition)) )) + sizeof(mCurrentPosition));
        mCurrentPosition -= ( getTopObjectSize() + sizeof(mCurrentPosition) );
	}
 //-----------------------------------------------------------------
 void* StackMemoryManager::top()
 {
     return mFrames[ mActiveFrame ].mCurrentPosition != 0 ? 
         (void*)(mFrames[ mActiveFrame ].mMemoryBlob + mFrames[ mActiveFrame ].mCurrentPosition - getTopObjectSize() - sizeof(mFrames[ mActiveFrame ].mCurrentPosition))
         : 0;
 }