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; }
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); }
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()); }
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; }
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; }