?? streamutils.h
字號:
//
// StreamUtils.h
// 流的一些實用類
// Author : zhanlc
// Date : 2003/9/10
#ifndef __StreamUtils_H__
#define __StreamUtils_H__
/**
* 流配接器
*/
template <class TStream>
class TStreamAdapter
{
protected :
/**
* 具體的流
*/
TStream* m_pStream;
public :
/**
* 構造函數
*/
TStreamAdapter(TStream* strm ) : m_pStream(strm)
{
};
/**
* 輸出函數
*/
template <class T>
TStreamAdapter& operator<<( const T& t )
{
ASSERT( m_pStream );
m_pStream->Write( &t, sizeof(T) );
return *this;
};
//template <>
TStreamAdapter& operator<<( const CString& str )
{
SaveComplex(str);
return *this;
}
//template <>
TStreamAdapter& operator<<( const TCHAR*& str )
{
SaveComplex( str );
return *this;
}
/**
* 輸入函數
*/
template <class T>
TStreamAdapter& operator>>( T& t)
{
ASSERT( m_pStream );
m_pStream->Read( &t, sizeof(T) );
return *this;
};
//template <>
TStreamAdapter& operator>>( CString& str )
{
ASSERT( m_pStream );
LoadComplex(str);
return *this;
}
public :
/**
* 保存簡單類型
*/
template <class T>
void SaveSimple( T t )
{
m_pStream->Write( &t, sizeof(T) );
}
/**
* 輸出字符串
*/
void SaveComplex( const TCHAR* szContent )
{
ASSERT( m_pStream );
// write the length
int nLen = _tcslen(szContent);
operator<<(nLen);
// write the content
m_pStream->Write( szContent, nLen );
}
/**
* 輸出字符串
*/
void SaveComplex( const CString& szContent )
{
SaveComplex( (const TCHAR*)szContent );//operator<<( (const TCHAR*)szContent );
}
/**
* 輸入簡單類型
*/
template <class T>
void LoadSimple( T& t)
{
m_pStream->Read( &t, sizeof(T) );
}
/**
* 輸入字符串
*/
void LoadComplex( CString& str )
{
ASSERT( m_pStream );
int nLen;
operator>>(nLen);
ASSERT( nLen >= 0 );
if ( nLen == 0 )
return ;
// 讀入字符
TCHAR strBuf[256];
TCHAR* pBuf = strBuf;
if ( nLen > sizeof(strBuf)/sizeof(TCHAR) - 1 )
pBuf = new TCHAR[nLen+1];
pBuf[nLen] = TCHAR('\0');
m_pStream->Read( pBuf, nLen );
// assign
str = pBuf;
if ( nLen > sizeof(strBuf)/sizeof(TCHAR) - 1 )
delete [] pBuf;
}
};
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -