配置文件信息如下:
<PESConfig>
<datetime startDate="20120714" startTime="141215" enable="1" />
<quantity quantity="1000000" enable="0" />
<beforeDay days="20" enable="0" />
</PESConfig>
源代码:
/***********************************************************************
*版权声明(c) 2010-2013, Mronginfo Ltd. 所有权利保留.
*
* 本文件属于Mronginfo Ltd产品的一部分,版权归Mronginfo Ltd所有,
* 包括但不限于代码、注释及设计文档、会议记录等等。
*
* 本文件未经授权不得用于任何其它用途。
* 作者:甘全福
* 创建日期:2013-7-12
***********************************************************************/
#pragma once
#include"Persistable.h"
#include "memento.h"
#include <vector>
#include <string>
using namespace std;
using namespace xml_api;
class CCFGDateTime:public Persistable
{
public:
CCFGDateTime(void);
virtual ~CCFGDateTime(void);
public:
//加载配置信息
virtual bool LoadState( Memento* m );
//保存配置信息
virtual bool SaveState( Memento* m );
public:
string m_strStartDate;//筛选历史平仓交易记录的开始日期
string m_strStartTime;//筛选历史平仓交易记录的开始时间
bool m_isEnable; //表示是否作为筛选条件
};
//CCFGDateTime对象容器
typedef vector<CCFGDateTime> Datetimes;
#include "xmlDateTime.h"
CCFGDateTime::CCFGDateTime(void)
{
}
CCFGDateTime::~CCFGDateTime(void)
{
}
//加载配置信息
bool CCFGDateTime::LoadState( Memento* m )
{
m_strStartDate = m->GetString("startDate");
m_strStartTime = m->GetString("startTime");
m_isEnable = m->GetBoolean("enable");
return true;
}
//保存配置信息
bool CCFGDateTime::SaveState( Memento* m )
{
m->SetString("startDate", m_strStartDate);
m->SetString("startTime",m_strStartTime);
m->SetBoolean("enable", m_isEnable);
return true;
}
/***********************************************************************
*版权声明(c) 2010-2013, Mronginfo Ltd. 所有权利保留.
*
* 本文件属于Mronginfo Ltd产品的一部分,版权归Mronginfo Ltd所有,
* 包括但不限于代码、注释及设计文档、会议记录等等。
*
* 本文件未经授权不得用于任何其它用途。
* 作者:甘全福
* 创建日期:2013-7-12
***********************************************************************/
#pragma once
#include"Persistable.h"
#include "memento.h"
#include <vector>
#include <string>
using namespace std;
using namespace xml_api;
class CCFGBeforeDay:public Persistable
{
public:
CCFGBeforeDay(void);
virtual ~CCFGBeforeDay(void);
//加载配置信息
virtual bool LoadState( Memento* m );
//保存配置信息
virtual bool SaveState( Memento* m );
public:
int m_nDays; //筛选历史平仓交易记录的天数
bool m_isEnable; //表示是否作为筛选条件
};
typedef vector<CCFGBeforeDay> BeforeDays;
#include "xmlBeforeDay.h"
CCFGBeforeDay::CCFGBeforeDay(void)
{
}
CCFGBeforeDay::~CCFGBeforeDay(void)
{
}
bool CCFGBeforeDay::LoadState( Memento* m )
{
m_nDays = m->GetInteger("days");
m_isEnable = m->GetBoolean("enable");
return true;
}
bool CCFGBeforeDay::SaveState( Memento* m )
{
m->SetInteger("days", m_nDays);
m->SetBoolean("enable", m_isEnable);
return true;
}
/***********************************************************************
*版权声明(c) 2010-2013, Mronginfo Ltd. 所有权利保留.
*
* 本文件属于Mronginfo Ltd产品的一部分,版权归Mronginfo Ltd所有,
* 包括但不限于代码、注释及设计文档、会议记录等等。
*
* 本文件未经授权不得用于任何其它用途。
* 作者:甘全福
* 创建日期:2013-7-12
***********************************************************************/
#include <vector>
#pragma once
#include"Persistable.h"
#include "memento.h"
#include <string>
using namespace std;
using namespace xml_api;
class CCFGQuantity:public Persistable
{
public:
CCFGQuantity(void);
virtual ~CCFGQuantity(void);
//加载配置信息
virtual bool LoadState( Memento* m );
//保存配置信息
virtual bool SaveState( Memento* m );
public:
int m_nQuantity; //筛选历史平仓交易记录的数量
bool m_isEnable; //表示是否作为筛选条件
};
//CCFGQuantity对象容器
typedef vector<CCFGQuantity> Quantitys;
#include "xmlQuantity.h"
CCFGQuantity::CCFGQuantity(void)
{
}
CCFGQuantity::~CCFGQuantity(void)
{
}
bool CCFGQuantity::LoadState( Memento* m )
{
m_nQuantity = m->GetInteger("quantity");
m_isEnable = m->GetBoolean("enable");
return true;
}
bool CCFGQuantity::SaveState( Memento* m )
{
m->SetInteger("quantity", m_nQuantity);
m->SetBoolean("enable", m_isEnable);
return true;
}
#pragma once
#include "xmlDateTime.h"
#include "xmlBeforeDay.h"
#include "xmlQuantity.h"
class CConfig:public Persistable
{
protected:
CConfig(void);
~CConfig(void);
public:
//加载配置信息
virtual bool LoadState( Memento* m );
//保存配置信息
virtual bool SaveState( Memento* m );
//单例方法
static CConfig & Instance();
public:
Datetimes m_dateTimes; //保存datatime元素集合
BeforeDays m_beforeDays; //保存beforeDay 元素集合
Quantitys m_quantitys; //保存quantity元素集合
};
#include "Config.h"
CConfig::CConfig(void)
{
}
CConfig::~CConfig(void)
{
}
//加载配置信息
bool CConfig::LoadState( Memento* m )
{
m_dateTimes.clear(); //防止多次反序列化之后,里面元素增加
m_quantitys.clear();
m_beforeDays.clear();
int childCount = 0; //子元素总数
childCount = m->GetChildCount();
for (int i = 0; i < childCount; ++i)
{
Memento *mo = m->GetChild(i);
string name = mo->GetName();
if ("datetime" == name)
{
CCFGDateTime datetime;
m_dateTimes.push_back(datetime);
(--m_dateTimes.end())->LoadState(mo);
}
if ("quantity" == name)
{
CCFGQuantity quantify;
m_quantitys.push_back(quantify);
(--m_quantitys.end())->LoadState(mo);
}
if ("beforeDay" == name)
{
CCFGBeforeDay beforeDay;
m_beforeDays.push_back(beforeDay);
(--m_beforeDays.end())->LoadState(mo);
}
}
return true;
}
CConfig & CConfig::Instance()
{
static CConfig instance;
return instance;
}
//保存配置信息
bool CConfig::SaveState( Memento* m )
{
m->SetName("PESConfig");
for (int i = 0; i < m_dateTimes.size(); ++i)
{
Memento *mo = m->CreateChild("datetime");
m_dateTimes[i].SaveState(mo);
}
for (int i = 0; i < m_quantitys.size(); ++i)
{
Memento *mo = m->CreateChild("quantity");
m_quantitys[i].SaveState(mo);
}
for (int i = 0; i < m_beforeDays.size(); ++i)
{
Memento *mo = m->CreateChild("beforeDay");
m_beforeDays[i].SaveState(mo);
}
return true;
}
//测试算法
#include <iostream> //标准输入输出流
#include "Utils.h"
#include "Config.h"
#include "stdio.h"
#include "IPerfomanceEvalShare.h"
#include <Windows.h>
using namespace xml_api;
using namespace std;//标准命名空间
#define ARY_SIZE 10
int main()
{
Utils utils;
/*CCFGDateTime datetime;
datetime.m_strStartDate = "20120714";
datetime.m_strStartTime = "141215";
datetime.m_isEnable = true;
CConfig::Instance().m_dateTimes.push_back(datetime);
CCFGQuantity quantify;
quantify.m_isEnable = false;
quantify.m_nQuantity = 1000000;
CConfig::Instance().m_quantitys.push_back(quantify);
CCFGBeforeDay berforeDay;
berforeDay.m_nDays = 20;
berforeDay.m_isEnable = false;
CConfig::Instance().m_beforeDays.push_back(berforeDay);
utils.Serialize("PESConfig.xml", &CConfig::Instance());*/
utils.DeserializeFromFile("PESConfig.xml", &CConfig::Instance());
if(CConfig::Instance().m_dateTimes[0].m_isEnable)
{
cout << "It is true" << endl;
}
if (! CConfig::Instance().m_beforeDays[0].m_isEnable)
{
cout << "It is false" << endl;
}
if (!CConfig::Instance().m_quantitys[0].m_isEnable)
{
cout << "It is false" << endl;
}
int wait;
cin >> wait;
return 0;
}