示例#1
0
PacketHistData * PacketHistData::fromXml( xmlNodePtr root )
{
	PacketHistData *phd = new PacketHistData();
	
	for( xmlNodePtr p = root->children; p!= NULL; p=p->next) {
		if( p->type == XML_ELEMENT_NODE ) {
			if( strcmp((char*)p->name, "query") == 0 ) {
				phd->request = new HistRequest();
				from_xml(phd->request, p);
			}
			if( strcmp((char*)p->name, "response") == 0 ) {
				for( xmlNodePtr q = p->children; q!= NULL; q=q->next) {
					if( q->type != XML_ELEMENT_NODE ) {
						continue;
					}
					if( strcmp((char*)q->name, "row") == 0 ) {
						RowHist *row = new RowHist();
						from_xml( row, q );
						phd->rows.push_back(*row);
						delete row;
					} else if( strcmp((char*)q->name, "fin") == 0 ) {
						RowHist *fin = new RowHist();
						from_xml( fin, q );
						phd->finishRow = *fin;
						phd->mode = CLOSED;
						delete fin;
					}
				}
			}
		}
	}
	
	return phd;
}
示例#2
0
std::vector<char> touphScript::flevel::tutorial::encode(std::string const& file)
{
  std::ifstream str{file, str.binary};
  std::string data{
    std::istreambuf_iterator<char>{str}, 
    std::istreambuf_iterator<char>{}
  };

  if (data.empty())
    return {};

  std::vector<std::vector<char>> out;

  rxml::xml_document<> doc;
  doc.parse<rxml::parse_default>(&data[0]);

  auto root = doc.first_node("field");
  if (!root)
    throw error{"Root node field not found"};

  for (auto n = root->first_node("tutorial"); n;
    n = n->next_sibling("tutorial")) {

    auto id = util::xml::ul(util::xml::att(n, "id"));

    if (out.size() < id + 1)
      out.resize(id + 1);

    out[id] = from_xml(n);
  }

  return ff7::flevel::script::tutorial::join(out);
}
示例#3
0
void touphScript::kernel2::encode(std::string const& kernel2,
  std::string const& textPath)
{

  std::ifstream xml_file{(fs::path{textPath}/"kernel2.bin.xml").string(), xml_file.binary};
  std::string xml{
    std::istreambuf_iterator<char>{xml_file}, 
    std::istreambuf_iterator<char>{}
  };

  rxml::xml_document<> doc;
  doc.parse<rxml::parse_default>(&xml[0]);

  auto root = doc.first_node("kernel2");
  if (!root)
    throw error{"Root node kernel2 not found"};

  auto section = root->first_node("section");

  ff7::kernel2::Strings sections;

  for (auto i = 0u; i < sections.size();
    section = section->next_sibling("section"), ++i) {
    if (!section)
      throw error{"Insufficient section tags in kernel2"};

    for (auto string = section->first_node("string"); string;
      string = string->next_sibling("string"))
      sections[i].push_back(from_xml(string->first_node()));
  }

  auto data = ff7::kernel2::join(sections);

  std::ofstream{kernel2, std::ios::binary}.write(data.data(), data.size());
}
示例#4
0
PacketPlaceOrder * PacketPlaceOrder::fromXml( xmlNodePtr root )
{
	PacketPlaceOrder *ppo = new PacketPlaceOrder();

	for( xmlNodePtr p = root->children; p!= NULL; p=p->next) {
		if( p->type == XML_ELEMENT_NODE ) {
			if( strcmp((char*)p->name, "query") == 0 ) {
				ppo->request = new PlaceOrder();
				from_xml(ppo->request, p);
			}
			if( strcmp((char*)p->name, "response") == 0 ) {
				for( xmlNodePtr q = p->children; q!= NULL; q=q->next) {
					if( q->type != XML_ELEMENT_NODE ) {
						continue;
					}
					/* not implemented yet */
					assert( false );
				}
			}
		}
	}
	return ppo;
}
示例#5
0
PacketContractDetails * PacketContractDetails::fromXml( xmlNodePtr root )
{
	PacketContractDetails *pcd = new PacketContractDetails();
	
	for( xmlNodePtr p = root->children; p!= NULL; p=p->next) {
		if( p->type == XML_ELEMENT_NODE ) {
			if( strcmp((char*)p->name, "query") == 0 ) {
				pcd->request = new ContractDetailsRequest();
				from_xml(pcd->request, p);
			}
			if( strcmp((char*)p->name, "response") == 0 ) {
				for( xmlNodePtr q = p->children; q!= NULL; q=q->next) {
					if( q->type == XML_ELEMENT_NODE
						&& strcmp((char*)q->name, "ContractDetails") == 0 )  {
						IB::ContractDetails cd;
						conv_xml2ib(&cd, q);
						pcd->cdList->push_back(cd);
					}
				}
			}
		}
	}
	return pcd;
}