[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