[GME-commit]
GMESRC/GME/Parser MgaDumper.cpp,1.15,1.16 MgaDumper.h,1.10,1.11
gme-commit at list.isis.vanderbilt.edu
gme-commit at list.isis.vanderbilt.edu
Tue Jul 6 12:10:07 CDT 2004
Update of /var/lib/gme/GMESRC/GME/Parser
In directory braindrain:/tmp/cvs-serv21170/GME/Parser
Modified Files:
MgaDumper.cpp MgaDumper.h
Log Message:
Avoid dumping twice selected fcos.
CVS User: zolmol
Index: MgaDumper.cpp
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Parser/MgaDumper.cpp,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** MgaDumper.cpp 30 Jun 2004 17:50:47 -0000 1.15
--- MgaDumper.cpp 6 Jul 2004 16:10:05 -0000 1.16
***************
*** 196,202 ****
COMTHROW(territory->OpenObj(*fi, PutOut(obj)));
CComObjPtr<IMgaFolder> folder;
! COMTHROW(obj.QueryInterface(folder));
!
! Dump(folder);
++fi;
}
--- 196,201 ----
COMTHROW(territory->OpenObj(*fi, PutOut(obj)));
CComObjPtr<IMgaFolder> folder;
! COMTHROW(obj.QueryInterface( folder));
! *fi = folder;
++fi;
}
***************
*** 209,218 ****
COMTHROW(territory->OpenObj(*i, PutOut(obj)));
CComObjPtr<IMgaFCO> fco;
! COMTHROW(obj.QueryInterface(fco));
!
! Dump(fco);
++i;
}
EndElem();
DoneDump(false);
--- 208,225 ----
COMTHROW(territory->OpenObj(*i, PutOut(obj)));
CComObjPtr<IMgaFCO> fco;
! COMTHROW(obj.QueryInterface( fco));
! *i = fco;
++i;
}
+ removeInnerObjs();
+
+ for( fi = m_selFolders.begin(); fi != m_selFolders.end(); ++fi )
+ Dump( *fi);
+
+ for( i = m_selFcos.begin(); i != m_selFcos.end(); ++i )
+ Dump ( *i);
+
+
EndElem();
DoneDump(false);
***************
*** 381,385 ****
else
{
!
CComObjPtr<IMgaFCO> curr_fco = fco;
CComObjPtr<IMgaFCO> last_fco = fco;
--- 388,392 ----
else
{
!
CComObjPtr<IMgaFCO> curr_fco = fco;
CComObjPtr<IMgaFCO> last_fco = fco;
***************
*** 1279,1282 ****
--- 1286,1358 ----
*j = fold;
}
+ }
+
+ void CMgaDumper::removeInnerObjs()
+ {
+ // try to remove those objects which are part of (child, grandchild) of another selected object
+ CComObjPtrVector<IMgaFCO>::iterator i = m_selFcos.begin();
+ while( i != m_selFcos.end())
+ {
+ CComObjPtr<IMgaFCO> last_fco = *i, curr_fco = *i;
+ bool found_parent = false;
+ do
+ {
+ CComObjPtr<IMgaModel> parent;
+ COMTHROW( curr_fco->get_ParentModel(PutOut(parent)));
+ last_fco = curr_fco;
+ curr_fco = NULL;
+ if (parent != NULL) {
+ COMTHROW( ::QueryInterface(parent, curr_fco) );
+ found_parent = find_if( m_selFcos.begin(), m_selFcos.end(), GmeEqual( curr_fco)) != m_selFcos.end();
+ }
+ } while ( curr_fco != NULL && !found_parent);
+
+ if ( !found_parent) // no parent found in the set of fcos
+ {
+ CComObjPtr<IMgaFolder> par_folder;
+ COMTHROW( last_fco->get_ParentFolder(PutOut( par_folder)));
+
+ while ( par_folder != NULL && !found_parent)
+ {
+ found_parent = find_if( m_selFolders.begin(), m_selFolders.end(), GmeEqual( par_folder)) != m_selFolders.end();
+
+ CComObjPtr<IMgaFolder> parent;
+ COMTHROW( par_folder->get_ParentFolder(PutOut( parent)));
+
+ par_folder = parent;
+ }
+ }
+
+ if ( found_parent)
+ i = m_selFcos.erase( i);
+ else
+ ++i;
+ }
+
+
+ // try to remove those folders which are part of (child, grandchild) of another selected folder
+ CComObjPtrVector<IMgaFolder>::iterator k = m_selFolders.begin();
+ while( k != m_selFolders.end())
+ {
+ CComObjPtr<IMgaFolder> par_folder;
+ COMTHROW( (*k)->get_ParentFolder(PutOut( par_folder)));
+ bool found_parent = false;
+
+ while ( par_folder != NULL && !found_parent)
+ {
+ found_parent = find_if( m_selFolders.begin(), m_selFolders.end(), GmeEqual( par_folder)) != m_selFolders.end();
+
+ CComObjPtr<IMgaFolder> parent;
+ COMTHROW(par_folder->get_ParentFolder(PutOut( parent)));
+ par_folder = parent;
+ }
+
+ if ( found_parent)
+ k = m_selFolders.erase( k);
+ else
+ ++k;
+ }
+
+ ASSERT( m_selFolders.size() + m_selFcos.size());
}
Index: MgaDumper.h
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Parser/MgaDumper.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** MgaDumper.h 30 Jun 2004 17:50:47 -0000 1.10
--- MgaDumper.h 6 Jul 2004 16:10:05 -0000 1.11
***************
*** 229,232 ****
--- 229,233 ----
CComObjPtrVector<IMgaFCO> m_selFcos; // selected objects for dump or closure
CComObjPtrVector<IMgaFolder> m_selFolders;
+ void removeInnerObjs();
void putInTerritory( CComObjPtrVector<IMgaFCO>&);
More information about the GME-commit
mailing list