15 #define EZ_STREAM_ERROR (-2)
16 #define EZ_DATA_ERROR (-3)
17 #define EZ_MEM_ERROR (-4)
18 #define EZ_BUF_ERROR (-5)
21 #define EZ_COMPRESSMAXDESTLENGTH(n) (n+(((n)/1000)+1)+12)
28 int ezcompress(
unsigned char* pDest,
long* pnDestLen,
const unsigned char* pSrc,
long nSrcLen);
29 int ezuncompress(
unsigned char* pDest,
long* pnDestLen,
const unsigned char* pSrc,
long nSrcLen);
49 unsigned char* Alloc(
int n)
54 pBuf=
new unsigned char[n];
80 #define EZ_CHECKLENGTH 8192
82 int ezcompress(ezbuffer& bufDest,
const ezbuffer& bufSrc)
84 if (bufDest.nLen == 0)
86 bufDest.Alloc(EZ_CHECKLENGTH);
88 int nErr = ezcompress(bufDest.pBuf, &bufDest.nLen, bufSrc.pBuf, bufSrc.nLen);
89 if (nErr == EZ_BUF_ERROR)
91 bufDest.Alloc(bufDest.nLen);
92 nErr = ezcompress(bufDest.pBuf, &bufDest.nLen, bufSrc.pBuf, bufSrc.nLen);
97 int ezuncompress(ezbuffer& bufDest,
const ezbuffer& bufSrc)
99 if (bufDest.nLen == 0)
101 bufDest.Alloc(EZ_CHECKLENGTH);
103 int nErr = ezuncompress(bufDest.pBuf, &bufDest.nLen, bufSrc.pBuf, bufSrc.nLen);
104 if (nErr == EZ_BUF_ERROR)
106 bufDest.Alloc(bufDest.nLen);
107 nErr = ezuncompress(bufDest.pBuf, &bufDest.nLen, bufSrc.pBuf, bufSrc.nLen);
115 int ezcompress(ezbuffer& bufDest,
const MCD_STR& strSrc)
117 int nSrcLen = MCD_STRLENGTH(strSrc) *
sizeof(MCD_CHAR);
119 unsigned char pTempDest[EZ_CHECKLENGTH];
120 long nTempLen = EZ_CHECKLENGTH;
121 int nErr = ezcompress(pTempDest, &nTempLen, (
const unsigned char*)MCD_2PCSZ(strSrc), nSrcLen);
122 bufDest.Alloc(nTempLen);
123 nErr = ezcompress(bufDest.pBuf, &bufDest.nLen, (
const unsigned char*)MCD_2PCSZ(strSrc), nSrcLen);
127 int ezuncompress(MCD_STR& strDest,
const ezbuffer& bufSrc)
129 unsigned char pTempDest[EZ_CHECKLENGTH];
130 long nTempLen = EZ_CHECKLENGTH;
131 int nErr = ezuncompress(pTempDest, &nTempLen, bufSrc.pBuf, bufSrc.nLen);
132 int nDestStrLen = nTempLen /
sizeof(MCD_CHAR);
133 MCD_CHAR* p = MCD_GETBUFFER(strDest,nDestStrLen);
134 nErr = ezuncompress((
unsigned char*)p, &nTempLen, bufSrc.pBuf, bufSrc.nLen);
135 MCD_RELEASEBUFFER(strDest,p,nDestStrLen);