85 lines
2.4 KiB
C++
85 lines
2.4 KiB
C++
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Crytek Engine Source File.
|
|
// Copyright (C), Crytek Studios, 2002.
|
|
// -------------------------------------------------------------------------
|
|
// File name: memoryblock.h
|
|
// Version: v1.00
|
|
// Created: 10/10/2002 by Timur.
|
|
// Compilers: Visual Studio.NET
|
|
// Description:
|
|
// -------------------------------------------------------------------------
|
|
// History:
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef __memoryblock_h__
|
|
#define __memoryblock_h__
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "RefCountBase.h"
|
|
|
|
/** Encapsulate block of memory.
|
|
*/
|
|
class CMemoryBlock : public CRefCountBase
|
|
{
|
|
public:
|
|
CMemoryBlock();
|
|
CMemoryBlock( const CMemoryBlock &mem );
|
|
~CMemoryBlock();
|
|
|
|
CMemoryBlock& operator=( const CMemoryBlock &mem );
|
|
|
|
//! Allocate or reallocare memory for this block.
|
|
//! @param size Ammount of memory in bytes to allocate.
|
|
//! @return true if allocation successed.
|
|
bool Allocate( int size,int uncompressedSize=0 );
|
|
|
|
//! Frees memory allocated in this block.
|
|
void Free();
|
|
|
|
//! Attach memory buffer to this block.
|
|
void Attach( void *buffer,int size,int uncompressedSize=0 );
|
|
//! Detach memory buffer that was previously attached.
|
|
void Detach();
|
|
|
|
//! Returns ammount of allocated memory in this block.
|
|
int GetSize() const { return m_size; }
|
|
|
|
//! Returns ammount of allocated memory in this block.
|
|
int GetUncompressedSize() const { return m_uncompressedSize; }
|
|
|
|
void* GetBuffer() const { return m_buffer; };
|
|
|
|
//! Copy memory range to memory block.
|
|
void Copy( void *src,int size );
|
|
|
|
//! Compress this memory block to specified memory block.
|
|
//! @param toBlock target memory block where compressed result will be stored.
|
|
void Compress( CMemoryBlock &toBlock ) const;
|
|
|
|
//! Uncompress this memory block to specified memory block.
|
|
//! @param toBlock target memory block where compressed result will be stored.
|
|
void Uncompress( CMemoryBlock &toBlock ) const;
|
|
|
|
//! Serialize memory block to archive.
|
|
void Serialize( CArchive &ar );
|
|
|
|
//! Is MemoryBlock is empty.
|
|
bool IsEmpty() const { return m_buffer == 0; }
|
|
|
|
private:
|
|
void* m_buffer;
|
|
int m_size;
|
|
//! If not 0, memory block is compressed.
|
|
int m_uncompressedSize;
|
|
//! True if memory block owns its memory.
|
|
bool m_owns;
|
|
};
|
|
|
|
SMARTPTR_TYPEDEF( CMemoryBlock );
|
|
|
|
#endif // __memoryblock_h__
|