//==== Decode Data From XML Data Struct ====// xmlNodePtr UserParmContainer::DecodeXml( xmlNodePtr & node ) { int num_curr_custom = m_UserParmVec.size() - m_NumPredefined; xmlNodePtr child_node = XmlUtil::GetNode( node, "UserParmContainer", 0 ); if ( child_node ) { int num_user = XmlUtil::FindInt( child_node, "NumUserParms", 0 ); //==== Decode All User Parms ====// if ( num_curr_custom == 0 ) { Renew( num_user ); for ( int i = 0; i < static_cast<int>( m_UserParmVec.size() ); i++ ) { xmlNodePtr pnode = XmlUtil::GetNode( child_node, "UserParm", i ); if ( pnode && m_UserParmVec[i] ) { m_UserParmVec[i]->DecodeXml( pnode, true ); } } } else { //==== Decode Predefined ====// for ( int i = 0; i < m_NumPredefined ; i++ ) { xmlNodePtr pnode = XmlUtil::GetNode( child_node, "UserParm", i ); if ( pnode && m_UserParmVec[i] ) { m_UserParmVec[i]->DecodeXml( pnode, true ); } } //==== Append New Custom ====// int num_new_custom = num_user - m_NumPredefined; for ( int i = 0 ; i < num_new_custom ; i++ ) { xmlNodePtr pnode = XmlUtil::GetNode( child_node, "UserParm", i + m_NumPredefined ); Parm* p = new Parm(); p->Init( "Temp", "User_Group", this, 0.0, -1.0e12, 1.0e12 ); p->DecodeXml( pnode, true ); m_UserParmVec.push_back( p ); } } } return child_node; }
//==== Decode Data From XML Data Struct ====// xmlNodePtr ParmContainer::DecodeXml( xmlNodePtr & node ) { xmlNodePtr child_node = XmlUtil::GetNode( node, "ParmContainer", 0 ); if ( child_node ) { string oldID = XmlUtil::FindString( child_node, "ID", m_ID ); string newID = ParmMgr.RemapID( oldID, m_ID ); if( newID.compare( m_ID ) != 0 ) // they differ { ChangeID( newID ); } SetName( XmlUtil::FindString( child_node, "Name", m_Name ) ); } xmlNodePtr gnode; LoadGroupParmVec( m_ParmVec, false ); map< string, vector< string > >::iterator groupIter; for ( groupIter = m_GroupParmMap.begin() ; groupIter != m_GroupParmMap.end() ; groupIter++ ) { string name = groupIter->first; gnode = XmlUtil::GetNode( child_node, name.c_str(), 0 ); if ( gnode ) { vector< string >::iterator parmIter; for ( parmIter = groupIter->second.begin(); parmIter != groupIter->second.end(); parmIter++ ) { Parm* p = ParmMgr.FindParm( ( *parmIter ) ); p->DecodeXml( gnode ); } } } return child_node; }