apicompatanamdw/compatanalysercmd/headeranalyser/src/MacroAnalyser.cpp
changeset 12 a0eee409ff14
parent 0 638b9c697799
--- a/apicompatanamdw/compatanalysercmd/headeranalyser/src/MacroAnalyser.cpp	Mon Sep 20 10:04:46 2010 +0100
+++ b/apicompatanamdw/compatanalysercmd/headeranalyser/src/MacroAnalyser.cpp	Mon Sep 27 14:51:17 2010 +0530
@@ -86,7 +86,8 @@
         removedbegin = iRemoved.find(basefilename);
         if (removedbegin != iRemoved.end())
         {
-            map<string, list<pair<pair<string, string>,string> > >::iterator cur = current.find(curfilename);
+			// serach the macro value elemnts with key value "key_val_CURRENT",defined for Current file
+			map<string, list<pair<pair<string, string>,string> > >::iterator cur = current.find(KEY_VAL_CURRENT);
             if (cur == current.end())       // We need to check if there is a list with given filename
                                             // because they aren't created in situation where there isn't any macros
             {                               // specific to that file or the include guard for the file is duplicated.
@@ -108,7 +109,7 @@
 			if(base->second.size() > 0)
 				aMacroFiles.push_back(toLowerCaseWin(base->first));
 			if(cur->second.size() > 0)
-				aMacroFiles.push_back(toLowerCaseWin(cur->first));
+				aMacroFiles.push_back(toLowerCaseWin(curfilename));
 			
 			// After next loop we will have in list only those which has been either removed or changed
             list<pair<pair<string, string>,string> >::iterator begin = cur->second.begin();
@@ -236,7 +237,7 @@
 // MacroAnalyser::parseMacros
 // ----------------------------------------------------------------------------
 //
-map<string, list<pair<pair<string, string>,string> > > MacroAnalyser::parseMacros(ifstream& aFile, vector<string>& bundlefiles, map<string, TChange<list<pair<string,string> > > >* aRemoved, bool aAddToRemoved)
+map<string, list<pair<pair<string, string>,string> > > MacroAnalyser::parseMacros(ifstream& aFile, vector<string>& bundlefiles, map<string, TChange<list<pair<string,string> > > >* aRemoved, bool isbaseline)
 {
     // ret, is the file and related set of macros returned by the function
     map<string, list<pair<pair<string, string>,string> > > ret;
@@ -251,7 +252,7 @@
     // Read macrofiles as lines
     string cline;
     string levelname = "";
-    bool isbundle = false;
+    bool isFileMatched = false;
     while((cline = getLine(aFile)) != KEmpty)
     {
         string line = cline;
@@ -305,23 +306,31 @@
                 // found the levelname; filename
                 correctedname += levelname.substr(start);
                 levelname = toLowerCaseWin(correctedname);
+				isFileMatched = false;
 
-                vector<pair<string, string> >::iterator begin = files.begin();
-                vector<pair<string, string> >::iterator end = files.end();
-                
-                isbundle = false;
-                for(; begin != end; begin++)
-                {
-                    if (begin->first == levelname)
-                    {
-                        isbundle = true;
-                        levelname = begin->second;
-                        break;
-                    }
-                }
+				// For baseline, need to list only those macros,which are belonging to bundle files. 
+				 if (isbaseline == true)
+				 {
+					 vector<pair<string, string> >::iterator begin = files.begin();
+					 vector<pair<string, string> >::iterator end = files.end();					 
+					 for(; begin != end; begin++)
+					 {
+						 if (begin->first == levelname)
+						 {
+							 isFileMatched = true;
+							 levelname = begin->second;
+							 break;
+						 }
+					 }
+				 }
+				 else // current macro file, so search macros in the entire file
+				 {
+					 isFileMatched = true;
+					 levelname = KEY_VAL_CURRENT; // set a generic key_val for all current macros
+				 }
             }
         }
-        else if (isbundle == true && length > 8 && line.substr(0, 8) == "#define ")
+        else if (isFileMatched == true && length > 8 && line.substr(0, 8) == "#define ")
         {   // we found preprocessor directive #define
             pair<string,string> macro = FindMacro(line);
             // 'ret' contains the set of files and associated macros to be returned from function
@@ -359,7 +368,7 @@
                 }
                 // perform the same test as above on aRemoved data structure
                 // this will be used for finding any duplicate macro definitions
-                if (aAddToRemoved == true)
+                if (isbaseline == true)
                 {
 					pair<string,string> temp(macro.first,tempNo);
                     map<string, TChange<list<pair<string,string> > > >::iterator found2 = aRemoved->find(levelname);