SDC C-Project CF Review 프로그램
LYW
2021-08-17 9aa3a8ff940e89bb0b5c75bc8abd0864e4c85874
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
 
// 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;}
 
    void    SetData(BYTE *pBuffer,int nBufSize) 
    {
        if(m_pData != NULL)
            delete[] m_pData, m_pData= NULL;
        m_pData=pBuffer,m_Size=nBufSize;
    }
    void    SetBufferNull(BYTE *pBuffer,int nBufSize) 
    {
        m_pData=pBuffer,m_Size=nBufSize;
    }
 
    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, nData);
    }
    
    template<typename VV>
    BOOL    WriteArray(VV *pData, int nData)
    {// virtual table µîÀ» Á¶½ÉÇÒ °Í. structureµî µ¥ÀÌÅ͸¸ ¼±¾ðµÇ¾î Àִ °ÍÀ» »ç¿ëÇϴ°ԠÁÁ´Ù.
        if(nData < 1)
            return FALSE;
        return Write((BYTE*)pData, 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_)