// 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 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 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 BOOL ReadArray(VV *pData, int nData) {// virtual table µîÀ» Á¶½ÉÇÒ °Í. structureµî µ¥ÀÌÅ͸¸ ¼±¾ðµÇ¾î ÀÖ´Â °ÍÀ» »ç¿ëÇÏ´Â°Ô ÁÁ´Ù. if(nData < 1) return FALSE; return Read((BYTE*)pData, sizeof(VV)*nData); } template 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_)