|
// MosisPacket.h: interface for the CMosisPacket class.
|
//
|
//////////////////////////////////////////////////////////////////////
|
|
#if !defined(AFX_MOSISPACKET_H__EAC0D9E3_4298_453A_90FD_0E4FC7C53682__INCLUDED_)
|
#define AFX_MOSISPACKET_H__EAC0D9E3_4298_453A_90FD_0E4FC7C53682__INCLUDED_
|
|
#if _MSC_VER > 1000
|
#pragma once
|
#endif // _MSC_VER > 1000
|
|
|
|
|
// Byte ÇüÅÂÀÇ ¸Þ¸ð¸®¸¦ ArrayÇüÅ·Π°ü¸®.
|
// ¾²¸é¼ ÀÚµ¿À¸·Î ¸Þ¸ð¸®¸¦ È®ÀåÇÑ´Ù.
|
// typeÇüÅ¿¡ »ó°ü¾øÀÌ ¸Þ¸ð¸® ´ÜÀ§·Î I/O °¡ °¡´ÉÇÏ´Ù.
|
class AFX_EXT_CLASS CMosisPacket// ¹öÆÛ( for 1 Dimensional Byte Data)
|
{
|
protected:
|
BYTE *m_pData;
|
int m_Size;
|
int m_Space;
|
|
int m_iRead;
|
int m_iWrite;
|
|
public:
|
CMosisPacket() {m_pData= NULL, m_Size= m_Space= 0; ResetPacket();}
|
~CMosisPacket() {if(m_pData) delete[] m_pData;}
|
|
void ResetPacket() {m_iWrite= m_iRead= 0;}
|
|
BYTE* GetDataAddress() {return m_pData;}
|
BYTE* GetDataAddress(int offset) {return m_pData+ offset;}
|
BOOL IsValidHive() {return m_pData != NULL && m_Size > 0 && m_Space > 0;}
|
|
int GetReadSize() {return m_iRead;}
|
int GetWriteSize() {return m_iWrite;}
|
int GetSize() {return m_Size;}
|
|
BOOL SetSize(int size, BOOL bAppend)
|
{
|
if(m_pData == NULL)
|
{
|
m_pData= new BYTE[size];
|
if(m_pData == NULL)
|
return FALSE;
|
m_Size= m_Space= size;
|
}
|
else if(size > m_Space)
|
{
|
BYTE* pOld= m_pData;
|
|
m_pData= new BYTE[size];
|
if(m_pData == NULL)
|
{
|
m_pData= pOld;
|
m_Size= 0;
|
return FALSE;
|
}
|
|
if(bAppend)
|
memcpy(m_pData, pOld, m_Size);
|
|
delete[] pOld;
|
|
m_Space= size;
|
}
|
m_Size= size;
|
return TRUE;
|
}
|
|
template<typename VV>
|
BOOL ReadValue(VV &val)
|
{
|
if(m_iRead+ sizeof(VV) > m_Size)
|
return FALSE;
|
|
val= *((VV*) GetDataAddress(m_iRead));
|
m_iRead+= sizeof(VV);
|
return m_iRead;
|
}
|
|
template<typename VV>
|
BOOL WriteValue(VV &val)
|
{
|
if(SetSize(m_iWrite+ sizeof(VV), TRUE) < 1)
|
return FALSE;
|
|
*((VV*) GetDataAddress(m_iWrite))= val;
|
m_iWrite+= sizeof(VV);
|
return m_iWrite;
|
}
|
template<typename VV>
|
BOOL ReadArray(VV *pData, int nData)
|
{// virtual table µîÀ» Á¶½ÉÇÒ °Í. structureµî µ¥ÀÌÅ͸¸ ¼±¾ðµÇ¾î ÀÖ´Â °ÍÀ» »ç¿ëÇÏ´Â°Ô ÁÁ´Ù.
|
if(nData < 1)
|
return FALSE;
|
|
return Read((BYTE*)pData, sizeof(VV)*nData);
|
}
|
|
template<typename VV>
|
BOOL WriteArray(VV *pData, int nData)
|
{// virtual table µîÀ» Á¶½ÉÇÒ °Í. structureµî µ¥ÀÌÅ͸¸ ¼±¾ðµÇ¾î ÀÖ´Â °ÍÀ» »ç¿ëÇÏ´Â°Ô ÁÁ´Ù.
|
if(nData < 1)
|
return FALSE;
|
return Write((BYTE*)pData, sizeof(VV)*nData);
|
}
|
|
BOOL Read(BYTE *pData, int size)
|
{// virtual table µîÀ» Á¶½ÉÇÒ °Í. structureµî µ¥ÀÌÅ͸¸ ¼±¾ðµÇ¾î ÀÖ´Â °ÍÀ» »ç¿ëÇÏ´Â°Ô ÁÁ´Ù.
|
if(m_iRead+ size > m_Size)
|
return FALSE;
|
|
memcpy(pData, GetDataAddress(m_iRead), size);
|
m_iRead+= size;
|
return m_iRead;
|
}
|
|
BOOL Write(BYTE *pData, int size)
|
{// virtual table µîÀ» Á¶½ÉÇÒ °Í. structureµî µ¥ÀÌÅ͸¸ ¼±¾ðµÇ¾î ÀÖ´Â °ÍÀ» »ç¿ëÇÏ´Â°Ô ÁÁ´Ù.
|
if(SetSize(m_iWrite+ size, TRUE) < 1)
|
return FALSE;
|
memcpy(GetDataAddress(m_iWrite), pData, size);
|
m_iWrite+= size;
|
return m_iWrite;
|
}
|
};
|
|
#endif // !defined(AFX_MOSISPACKET_H__EAC0D9E3_4298_453A_90FD_0E4FC7C53682__INCLUDED_)
|