⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 property.cpp.bak

📁 网络socket,IO,线程池
💻 BAK
字号:
#include "stdafx.h"
#include "Variant.h"
#include "Property.h"

CProperty::~CProperty()
{
}

string&	CProperty::Appen2String(string& str) const
{
	const_iterator it = begin();
	const_iterator itEnd = end();	
	for(; it != itEnd; ++it)
	{
		str += '(';
		str += it->first;
		str += '=';		
		it->second.Appen2String(str);
		str += ')';
	}
	return str;
}


CProperty&	CProperty::Add(const string& strKey,int nValue)
{
	CVariant var(nValue);
	insert(make_pair<string,CVariant>(strKey,var));
	return *this;
}


CProperty&	CProperty::Add(const string& strKey,float fValue)
{
	CVariant var(fValue);
	insert(make_pair<string,CVariant>(strKey,var));
	return *this;
}


CProperty&	CProperty::Add(const string& strKey,const char* szString)
{
	CVariant var(szString);
	insert(make_pair<string,CVariant>(strKey,var));
	return *this;
}


CProperty&	CProperty::Add(const string& strKey,const string& strString)
{
	CVariant var(strString);
	insert(make_pair<string,CVariant>(strKey,var));
	return *this;
}


CProperty&	CProperty::Add(const string& strKey,const CProperty& property)
{
	CVariant var(property);
	insert(make_pair<string,CVariant>(strKey,var));
	return *this;
}


CProperty&	CProperty::Add(const string& strKey,const CTime& time)
{
	CVariant var(time);
	insert(make_pair<string,CVariant>(strKey,var));
	return *this;
}



size_t	CProperty::Remove(const string& strKey)
{
	return	erase(strKey);
}


bool	CProperty::HasValue(const string& strKey)
{
	const_iterator it = find(strKey);
	return it != end();
}


bool	CProperty::HasValueByMulKey(const string& strKey)
{

	return true;
}



const CVariant&	CProperty::get(const string& strKey) const throw (MException)
{
	const_iterator it = find(strKey);
	if(it == end())
		throw	MException(ERR_PROPERTY_NO,"CVariant& CProperty<Stream>::get(const string& strKey) throw (MException)");
	return	it->second;	
}
	
void	CProperty::get(const string& strKey,vector<CVariant>& vVariant)  throw (MException)
{
	int nCount = count(strKey);
	if(nCount <= 0)
		throw	MException(ERR_PROPERTY_NO,"CVariant& CProperty<Stream>::get(const string& strKey) throw (MException)");
	vVariant.resize(nCount);
	const_iterator it = find(strKey);
	for(int i = 0; i < nCount; i++,++it)
		vVariant[i] = it->second;
}

/*
const CVariant&	CProperty::getByMulKey(const string& strKey) const throw (MException)
{
	
}
*/

// 发送字符串时一定要先发字符串长度
void operator << (CNetStream& outStream,const CProperty& property)
{
	// 首先发送长度
	int nSize = property.size();
//	outStream.Send(nSize);
	outStream<<nSize;
	CProperty::const_iterator it = property.begin();
	CProperty::const_iterator itEnd = property.end();
	CTime time;
	for(; it != itEnd; ++it)
	{
		// 发送key长度,再发送key
//		outStream.Send((int)it->first.length());
		outStream<<(int)it->first.length();
//		outStream.Send(it->first);
		outStream<<it->first.c_str();
		string strTemp;
		CVariant v(it->second);
		// 发送类型
//		outStream.Send(v.m_nType);
		outStream<<v.m_nType;
		switch(v.m_nType)
		{
			case TYPE_INT:
//				outStream.Send(v.AsInteger());
				outStream<<v.AsInteger();
				break;
			case TYPE_FLOAT:
//				outStream.Send(v.AsFloat());
				outStream<<v.AsFloat();
				break;
			case TYPE_STR:
//				strTemp = v.AsString();
				outStream<<v.AsString();
				// 先发送长度再发送值
//				outStream.Send((int)strTemp.size());
//				outStream.Send(strTemp);
				outStream<<(int)strTemp.size();
				outStream<<strTemp.c_str();
				break;			
			// 如果是属性集则递归调用
			case TYPE_PROPERTY:
				outStream<<v.AsProperty();
				break;
			case TYPE_TIME:
				time  = v.AsRefTime();
//				outStream.Send(time.GetYear());
//				outStream.Send(time.GetMonth());
//				outStream.Send(time.GetDay());
//				outStream.Send(time.GetHour());
//				outStream.Send(time.GetMinute());
//				outStream.Send(time.GetSecond());				
				outStream<<time.GetYear();
				outStream<<time.GetMonth();
				outStream<<time.GetDay();
				outStream<<time.GetHour();
				outStream<<time.GetMinute();
				outStream<<time.GetSecond();
				break;	
			default:
				throw	CExceptionBase(ERR_PROPERTY_NO,"Stream& CProperty<Stream>::operator << (Stream& outStream,const CProperty& property)");
				break;
		}			
		
	}
//	return outStream;
}

void operator >> (CNetStream& inStream,CProperty& property)
{
	// 先接收大小
	int nSize;
//	inStream.Receive(nSize);
	inStream >> nSize;
	
	for(int i = 0 ; i < nSize; i++)
	{
		CVariant v;
		// 先接收键的长度再接收键
		int len;
//		inStream.Receive(len);
		inStream >> nLen;
		string strKey;
		inStream.Receive(strKey,len);
			
		//
		int nType;
//		inStream.Receive(nType);
		inStream >> nType;
				
		int nLenTemp;
		string strTemp;
		int nTmpYear,nTmpMonth,nTmpDay,nTmpHour,nTmpMinute,nTmpSecond;
		
		int tmpTypeInt;
		float tmpTypeFloat;
		string tmpTypeString;
		CProperty tmpTypeProperty;
		CTime tmpTypeTime;
		switch(nType)
		{
			case TYPE_INT:
//				inStream.Receive(tmpTypeInt);
				inStream >> tmpTypeInt;
				v = tmpTypeInt;
				break;
			case TYPE_FLOAT:
//				inStream.Receive(tmpTypeFloat);
				inStream >> tmpTypeFloat;
				
				v = tmpTypeFloat;
				break;
			case TYPE_STR:
//				inStream.Receive(nLenTemp);
				inStream >> nLenTemp;
				inStream.Receive(strTemp,nLenTemp);			
				v = strTemp;
				break;			
			// 如果是属性集则递归调用
			case TYPE_PROPERTY:
				inStream>>tmpTypeProperty;
				v = tmpTypeProperty;
				break;
			case TYPE_TIME:
//				inStream.Receive(nTmpYear);
//				inStream.Receive(nTmpMonth);
//				inStream.Receive(nTmpDay);
//				inStream.Receive(nTmpHour);
//				inStream.Receive(nTmpMinute);
//				inStream.Receive(nTmpSecond);		
				inStream >> nTmpYear;
				inStream >> nTmpMonth;
				inStream >> nTmpDay;
				inStream >> nTmpHour;
				inStream >> nTmpMinute;
				inStream >> nTmpSecond;
				v = CTime(nTmpYear,nTmpMonth,nTmpDay,nTmpHour,nTmpMinute,nTmpSecond);
				break;	
			default:
				throw	MException(ERR_PROPERTY_NO,"Stream& CProperty<Stream>::operator << (Stream& outStream,const CProperty& property)");
				break;
		}			
		//property[strKey] = v;
		property.insert(make_pair<string,CVariant>(strKey,v));
	}
}
/*
template<typename Socket>
CNetStream<Socket>& operator << (CNetStream<Socket>& outStream, CProperty& property)
{
}
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -