太行新闻网

主页 > 教育科技 > > 正文

C++读取xml配置文件算法 - Predator

2014-04-28 22:52
来源: 未知
【字号: 】【打印
配置文件信息如下:

<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;
}
Tags:
分享到:
( 编辑: 3.wanshehui.com ) 【字号: 】【打印】【关闭

 
Copyright © 2009 - 2013 wanshehui.com
Copyright © 2009-2013 太行新闻网 冀ICP备11009293号 网站地图