📄 property.cpp.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 + -