[commit] r1129 - trunk/GME/MgaUtil

GMESRC Repository Notifications gme-commit at list.isis.vanderbilt.edu
Wed Jan 12 16:51:08 CST 2011


Author: ksmyth
Date: Wed Jan 12 16:51:07 2011
New Revision: 1129

Log:
Properly tokenize paradigm strings: the wizards suggest comma, also support some whitespace and semicolon. Fixes eg "UML,UMLModelTransformer" under S\GME\Components\..UML2XML\Associated

Modified:
   trunk/GME/MgaUtil/MgaRegistrar.cpp

Modified: trunk/GME/MgaUtil/MgaRegistrar.cpp
==============================================================================
--- trunk/GME/MgaUtil/MgaRegistrar.cpp	Wed Jan 12 16:49:24 2011	(r1128)
+++ trunk/GME/MgaUtil/MgaRegistrar.cpp	Wed Jan 12 16:51:07 2011	(r1129)
@@ -1805,6 +1805,17 @@
 	COMCATCH(;)
 }
 
+template<typename Functor>
+void TokenizeParadigmString(const CString& paradigms, Functor x) {
+	CStringList ret;
+	int curPos = 0;
+	CString token = paradigms.Tokenize(" ;,\n\t", curPos);
+	while (token != "") {
+		x(token);
+		token = paradigms.Tokenize(" ;,\n\t", curPos);
+	}
+}
+
 STDMETHODIMP CMgaRegistrar::RegisterComponent(BSTR progid, componenttype_enum type, BSTR desc, regaccessmode_enum mode)
 {
 	COMTRY
@@ -1829,7 +1840,9 @@
 
 			ERRTHROW( comp.SetStringValue( "Description", PutInCString(desc)));
 			if(paradigms.Length()) {
-				ERRTHROW( comp.SetStringValue( "Paradigm", PutInCString(paradigms)));
+				TokenizeParadigmString(PutInCString(paradigms), [&comp](const CString& par) {
+					ERRTHROW(comp.SetStringValue("Paradigm", par));
+				});
 			}
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
@@ -1844,9 +1857,9 @@
 				ERRTHROW( comp.SetDWORDValue( "Type", (DWORD)type));
 
 				ERRTHROW( comp.SetStringValue( "Description", PutInCString(desc)));
-				if(paradigms.Length()) {
-					ERRTHROW( comp.SetStringValue( "Paradigm", PutInCString(paradigms)));
-				}
+				TokenizeParadigmString(PutInCString(paradigms), [&comp](const CString& par) {
+					ERRTHROW(comp.SetStringValue("Paradigm", par));
+				});
 			}
 			else {
 				CRegKey comp;
@@ -2270,14 +2283,10 @@
 		}
 		else {
 			can = VARIANT_FALSE;
-			const OLECHAR *p = wcstok(pars, L" \n\t");
-			while(p) {
-				if(!_wcsicmp(p, paradigm)) {
+			TokenizeParadigmString(PutInCString(pars), [&paradigm, &can](const CString& paradigm2) {
+				if (static_cast<const CString &>(PutInCString(paradigm)) == paradigm2)
 					can = VARIANT_TRUE;
-					break;
-				}
-				p = wcstok(NULL, L" \n\t");
-			}
+			});
 		}	
 		if(can_ass) *can_ass = can;
 		
@@ -2375,19 +2384,9 @@
 						CString paradigms;
 						COMTHROW( component->get_Paradigm(PutOut(paradigms)) );
 
-						paradigms += ' ';
-						paradigms.TrimLeft(" \n\t");
-						while( !paradigms.IsEmpty() )
-						{
-							int i = paradigms.FindOneOf(" \n\t");
-							ASSERT( i > 0 );
-
-							if(paradigms.Left(i).Compare("*")) {
-							   COMTHROW( Associate(progid, PutInBstr(paradigms.Left(i)), mode) );
-							}
-							paradigms = paradigms.Mid(i);
-							paradigms.TrimLeft(" \n\t");
-						}
+						TokenizeParadigmString(paradigms, [this,&mode,&progid](const CString& par){
+							COMTHROW(Associate(progid, PutInBstr(par), mode));
+						});
 					}
 				}
 


More information about the gme-commit mailing list