void XMLreader::mainProcessorIni( std::vector<TiXmlNode*> pParentVect ) { std::map<plint, TiXmlNode*> parents; for (pluint iParent=0; iParent<pParentVect.size(); ++iParent) { PLB_PRECONDITION( pParentVect[iParent]->Type()==TiXmlNode::DOCUMENT || pParentVect[iParent]->Type()==TiXmlNode::ELEMENT ); TiXmlElement* pParentElement = pParentVect[iParent]->ToElement(); plint id=0; if (pParentElement) { const char* attribute = pParentElement->Attribute("id"); if (attribute) { std::stringstream attributestr(attribute); attributestr >> id; } } parents[id] = pParentVect[iParent]; } plint numId = (plint)parents.size(); global::mpi().bCast(&numId, 1); std::map<plint, TiXmlNode*>::iterator it = parents.begin(); name = it->second->ValueStr(); global::mpi().bCast(name); for (; it != parents.end(); ++it) { plint id = it->first; global::mpi().bCast(&id, 1); TiXmlNode* pParent = it->second; Data& data = data_map[id]; data.text=""; typedef std::map<std::string, std::vector<TiXmlNode*> > ChildMap; ChildMap childMap; TiXmlNode* pChild; for ( pChild = pParent->FirstChild(); pChild != 0; pChild = pChild->NextSibling()) { int type = pChild->Type(); if ( type==TiXmlNode::ELEMENT ) { std::string name(pChild->Value()); childMap[name].push_back(pChild); } else if ( type==TiXmlNode::TEXT ) { data.text = pChild->ToText()->ValueStr(); } } global::mpi().bCast(data.text); plint numChildren = (plint) childMap.size(); global::mpi().bCast(&numChildren, 1); for (ChildMap::iterator it = childMap.begin(); it != childMap.end(); ++it) { std::vector<TiXmlNode*> pChildVect = it->second; data.children.push_back( new XMLreader( pChildVect ) ); } } }
void XMLreader::mainProcessorIni( std::vector<TiXmlNode*> pParentVect ) { std::map<int, TiXmlNode*> parents; for (unsigned iParent=0; iParent<pParentVect.size(); ++iParent) { EPC_ASSERT( pParentVect[iParent]->Type()==TiXmlNode::DOCUMENT || pParentVect[iParent]->Type()==TiXmlNode::ELEMENT ); TiXmlElement* pParentElement = pParentVect[iParent]->ToElement(); int id=0; if (pParentElement) { const char* attribute = pParentElement->Attribute("id"); if (attribute) { std::stringstream attributestr(attribute); attributestr >> id; } } parents[id] = pParentVect[iParent]; } std::map<int, TiXmlNode*>::iterator it = parents.begin(); name = it->second->ValueStr(); for (; it != parents.end(); ++it) { int id = it->first; TiXmlNode* pParent = it->second; Data& data = data_map[id]; data.text=""; typedef std::map<std::string, std::vector<TiXmlNode*> > ChildMap; ChildMap childMap; TiXmlNode* pChild; for ( pChild = pParent->FirstChild(); pChild != 0; pChild = pChild->NextSibling()) { int type = pChild->Type(); if ( type==TiXmlNode::ELEMENT ) { std::string name(pChild->Value()); childMap[name].push_back(pChild); } else if ( type==TiXmlNode::TEXT ) { data.text = pChild->ToText()->ValueStr(); } } for (ChildMap::iterator it = childMap.begin(); it != childMap.end(); ++it) { std::vector<TiXmlNode*> pChildVect = it->second; data.children.push_back( new XMLreader( pChildVect ) ); } } }