www.pudn.com > 《运用设计模式设计MIME编码类》配套代码.zip > CMimeString.cpp


#include "stdafx.h" 
#include "CMimeString.h" 
 
 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
 
#include "CBase64Algo.h" 
 
 
//------------------------------------------------------------- 
//con de 
 
CMimeString::CMimeString(PROCESSTYPE inProcessType, ENCODETYPE inEncodeType, CString & inStr) 
{ 
 
	Init(inProcessType, inEncodeType,  
			(unsigned char *)(inStr.operator LPCTSTR()), 
			inStr.GetLength() ); 
} 
 
CMimeString::CMimeString(PROCESSTYPE inProcessType, ENCODETYPE inEncodeType, unsigned char * inBuf, int inBufLen) 
{ 
	Init(inProcessType, inEncodeType, inBuf, inBufLen); 
} 
 
 
CMimeString::~CMimeString() 
{ 
	if( mBuf )	 
	{ 
		delete [] mBuf; 
		mBuf = 0; 
	} 
	mBufLen = 0; 
} 
 
 
 
 
//------------------------------------------------------------- 
//interface 
unsigned char * CMimeString::GetBuf(void) 
{ 
	return mBuf; 
} 
 
int CMimeString::GetBufLen(void) 
{ 
	return mBufLen; 
} 
 
CMimeString::operator LPCTSTR() const 
{ 
	return (LPCTSTR)mBuf; 
} 
 
unsigned char * CMimeString::GetFirstPart(int inPartLen) 
{ 
	mPartLen = inPartLen; 
 
	mNextPart = 0; 
	return GetNextPart(); 
} 
 
unsigned char * CMimeString::GetNextPart(void) 
{ 
	if( ( mBufLen - mNextPart * mPartLen ) > 0 ) 
	{ 
		if( mNextPart != 0) 
		{ 
			mBuf[mNextPart * mPartLen] = mSaveCut;// 
		} 
		unsigned char * p = mBuf + mPartLen * mNextPart; 
		mNextPart ++; 
		if( ( mBufLen - mNextPart * mPartLen ) > 0 ) 
		{ 
			mSaveCut = mBuf[mPartLen * mNextPart];// 
			mBuf[mPartLen * mNextPart] = '\0';// 
		} 
		return p; 
	} 
	else 
	{ 
		return 0; 
	} 
} 
 
//------------------------------------------------------------- 
//helper 
 
void CMimeString::Init(PROCESSTYPE inProcessType, ENCODETYPE inEncodeType, unsigned char * inBuf, int inBufLen) 
{ 
	mBuf = 0; 
	mBufLen = 0; 
 
	if( inEncodeType == WYMIME ) 
	{ 
		mAlgo = new CMimeAlgo(); 
	} 
	else if( inEncodeType == BASE64 ) 
	{ 
		mAlgo = new CBase64Algo(); 
	} 
 
	if( inProcessType == ENCODING ) 
	{ 
		mAlgo->Encode(&mBuf, mBufLen, inBuf, inBufLen); 
	} 
	else if( inProcessType == DECODING ) 
	{ 
		mAlgo->Decode(&mBuf, mBufLen, inBuf, inBufLen); 
	} 
} 
 
//-------------------------------------------------------------