apicompatanamdw/compatanalysercmd/headeranalyser/src/MacroAnalyser.cpp
author shrivatsa
Mon, 27 Sep 2010 14:51:17 +0530
changeset 12 a0eee409ff14
parent 0 638b9c697799
permissions -rw-r--r--
Updates to CompatibilityAnalyser - The Tool should now work with Symbian^4 - Some minor bug fixes related to Qt headers in the Symbian Platform
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     1
/*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     2
* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     3
* All rights reserved.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     4
* This component and the accompanying materials are made available
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     6
* which accompanies this distribution, and is available
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     8
*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     9
* Initial Contributors:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    11
*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    12
* Contributors:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    13
*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    14
* Description:  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    15
*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    16
*/
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    17
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    18
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    19
#include "CmdGlobals.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    20
#ifdef __WIN__
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    21
#pragma warning(disable:4786)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    22
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    23
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    24
#include <iostream>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    25
#include <fstream>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    26
#include <string>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    27
#include <map>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    28
#include <list>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    29
#include "Utils.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    30
#include "TChange.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    31
#include "HAException.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    32
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    33
using namespace std;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    34
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    35
#include "MacroAnalyser.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    36
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    37
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    38
// MacroAnalyser::MacroAnalyser
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    39
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    40
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    41
MacroAnalyser::MacroAnalyser(string filebase, string filecurrent, vector<string> basebundle, vector<string> currentbundle)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    42
:iBaseFile(filebase), iCurrentFile(filecurrent), iBaseBundle(basebundle), iCurrentBundle(currentbundle)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    43
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    44
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    45
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    46
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    47
// MacroAnalyser::~MacroAnalyser
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    48
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    49
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    50
MacroAnalyser::~MacroAnalyser(void)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    51
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    52
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    53
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    54
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    55
// MacroAnalyser::Analyse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    56
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    57
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    58
void MacroAnalyser::Analyse(list<string>& aMacroFiles)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    59
{  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    60
    ifstream basefile(iBaseFile.c_str(), ios::in);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    61
    ifstream currentfile(iCurrentFile.c_str(), ios::in);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    62
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    63
    map<string, list<pair<pair<string, string>,string> > > baseline;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    64
    map<string, list<pair<pair<string, string>,string> > > current;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    65
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    66
    baseline = parseMacros(basefile, iBaseBundle, &iRemoved, true);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    67
    current = parseMacros(currentfile, iCurrentBundle);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    68
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    69
    vector<string>::iterator curbegin = iCurrentBundle.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    70
    vector<string>::iterator curend = iCurrentBundle.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    71
    vector<string>::iterator basebegin = iBaseBundle.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    72
    vector<string>::iterator baseend = iBaseBundle.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    73
    map<string, TChange<list<pair<string,string> > > >::iterator removedbegin;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    74
    for(;curbegin != curend; curbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    75
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    76
        string curfilename = *curbegin;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    77
        string basefilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    78
        if( basebegin != iBaseBundle.end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    79
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    80
            basefilename = *basebegin;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    81
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    82
        else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    83
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    84
            continue;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    85
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    86
        removedbegin = iRemoved.find(basefilename);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    87
        if (removedbegin != iRemoved.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    88
        {
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
    89
			// serach the macro value elemnts with key value "key_val_CURRENT",defined for Current file
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
    90
			map<string, list<pair<pair<string, string>,string> > >::iterator cur = current.find(KEY_VAL_CURRENT);
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    91
            if (cur == current.end())       // We need to check if there is a list with given filename
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    92
                                            // because they aren't created in situation where there isn't any macros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    93
            {                               // specific to that file or the include guard for the file is duplicated.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    94
                list<pair<pair<string, string>,string> > tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    95
                pair<string, list<pair<pair<string, string>,string> > > tempvar2(curfilename, tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    96
                pair<map<string, list<pair<pair<string, string>,string> > >::iterator, bool > pos = current.insert(tempvar2);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    97
                if (pos.second == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    98
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    99
                    cur = pos.first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   100
                } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   101
                {                           // this shouldn't be happening
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   102
                    throw HAException("Problems ahead.");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   103
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   104
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   105
            map<string, list<pair<pair<string, string>,string> > >::iterator base = baseline.find(basefilename);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   106
            findDuplicates(basefilename,curfilename,base->second, cur->second, removedbegin->second, iBaseDuplicates, iCurrentDuplicates);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   107
            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   108
			//maintain a cache list of files with macros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   109
			if(base->second.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   110
				aMacroFiles.push_back(toLowerCaseWin(base->first));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   111
			if(cur->second.size() > 0)
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   112
				aMacroFiles.push_back(toLowerCaseWin(curfilename));
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   113
			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   114
			// After next loop we will have in list only those which has been either removed or changed
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   115
            list<pair<pair<string, string>,string> >::iterator begin = cur->second.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   116
            list<pair<pair<string, string>,string> >::iterator end = cur->second.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   117
            for(;begin != end; begin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   118
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   119
				list<pair<string,string> >::iterator place = FindFromList(begin->first.first, removedbegin->second.GetValue());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   120
                if (place != removedbegin->second.GetValue().end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   121
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   122
                    removedbegin->second.GetValue().erase(place);  // we found macro with same name so we can remove it
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   123
                    list<pair<pair<string, string>,string> > baselist = base->second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   124
					list<pair<pair<string, string>,string> >::iterator found = FindFromList(begin->first.first, baselist, ELeftValue);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   125
                    if (found != baselist.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   126
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   127
						if (found->first.second != begin->first.second)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   128
                        {   // Contents of macro are different so we need to add the macro to changed list
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   129
                            pair<pair<string,string>,string> changes;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   130
							changes.first.first = found->first.second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   131
							changes.first.second = begin->first.second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   132
							changes.second = begin->second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   133
							pair<string, pair<pair<string, string>,string> > param(begin->first.first,changes);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   134
                            map<string, TChange<map<string, pair<pair<string, string>,string> > > >::iterator file = iChanged.find(basefilename);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   135
                            if (file != iChanged.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   136
                            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   137
                                file->second.GetValue().insert(param);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   138
                            } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   139
                            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   140
                                map<string, pair<pair<string, string>,string> > tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   141
                                tempvar.insert(param);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   142
                                TChange<map<string, pair<pair<string, string>,string> > > tempvar2(basefilename, curfilename, tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   143
                                pair<string, TChange<map<string, pair<pair<string, string>,string> > > > tempvar3(basefilename, tempvar2);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   144
                                iChanged.insert(tempvar3);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   145
                            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   146
                        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   147
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   148
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   149
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   150
            removedbegin->second.SetCurrent(curfilename);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   151
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   152
        basebegin++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   153
    }  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   154
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   155
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   156
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   157
// MacroAnalyser::FindMacro
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   158
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   159
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   160
pair<string, string> MacroAnalyser::FindMacro(string aLine)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   161
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   162
    pair<string, string> ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   163
    string::size_type pos = aLine.find_first_of(" \t");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   164
    while(pos != string::npos && (aLine.at(pos) == ' ' || aLine.at(pos) == '\t') )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   165
        pos++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   166
    string::size_type param_pos = pos ;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   167
    pos = aLine.find_first_of(" \t(",param_pos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   168
    string value;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   169
    if (pos != string::npos && aLine.at(pos) == '(')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   170
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   171
        pos = aLine.find(')',pos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   172
        if(pos !=string::npos )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   173
            pos++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   174
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   175
    if (pos != string::npos && pos < aLine.size())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   176
    {   // only if there is stuff after name of macro we put it to value
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   177
        size_t value_pos = (unsigned int)pos + 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   178
        value = aLine.substr(value_pos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   179
        value = trimWhiteSpace(value);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   180
        if (value.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   181
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   182
            value_pos = value.find_first_not_of(" \t");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   183
            if (value_pos != string::npos && value_pos != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   184
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   185
                value = value.substr(value_pos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   186
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   187
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   188
    } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   189
    {   // otherwise we put empty value
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   190
        value = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   191
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   192
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   193
    string param = aLine.substr(param_pos, pos - param_pos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   194
    ret = pair<string,string>(param,value);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   195
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   196
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   197
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   198
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   199
// MacroAnalyser::getRemoved
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   200
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   201
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   202
map<string, TChange<list<pair<string,string> > > >& MacroAnalyser::getRemoved()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   203
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   204
    return iRemoved;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   205
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   206
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   207
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   208
// MacroAnalyser::FindMacro
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   209
// readParameters should be called so that first is called baseline command
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   210
// and after that current command, otherwise it doesn't work
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   211
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   212
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   213
map<string, TChange<map<string, pair<pair<string, string>,string> > > >& MacroAnalyser::getChanged()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   214
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   215
    return iChanged;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   216
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   217
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   218
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   219
// MacroAnalyser::getBaseDuplicates
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   220
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   221
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   222
map<string, vector<pair<string,string> > >& MacroAnalyser::getBaseDuplicates()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   223
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   224
    return iBaseDuplicates;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   225
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   226
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   227
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   228
// MacroAnalyser::getCurrentDuplicates
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   229
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   230
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   231
map<string, vector<pair<string,string> > >& MacroAnalyser::getCurrentDuplicates()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   232
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   233
    return iCurrentDuplicates;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   234
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   235
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   236
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   237
// MacroAnalyser::parseMacros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   238
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   239
//
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   240
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)
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   241
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   242
    // ret, is the file and related set of macros returned by the function
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   243
    map<string, list<pair<pair<string, string>,string> > > ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   244
    vector<pair<string, string> > files;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   245
    vector<string>::iterator bundlefile = bundlefiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   246
    vector<string>::iterator bundleend = bundlefiles.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   247
    for(; bundlefile != bundleend; bundlefile++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   248
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   249
        pair<string, string> bothcase(toLowerCaseWin(*bundlefile), *bundlefile);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   250
        files.push_back(bothcase);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   251
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   252
    // Read macrofiles as lines
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   253
    string cline;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   254
    string levelname = "";
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   255
    bool isFileMatched = false;
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   256
    while((cline = getLine(aFile)) != KEmpty)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   257
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   258
        string line = cline;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   259
		char tempNo[6];
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   260
		string lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   261
        unsigned int length = (unsigned int)line.length();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   262
        if (length > 6 && line.at(0) == '#' && line.at(1) == ' ')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   263
        {   // we may have found a file descriptor: '# xx "path/to/file.h"' or
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   264
            // '# xx "path/to/file.h" 1' or '# xx "path/to/file.h" 2'
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   265
            unsigned int index;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   266
			int count = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   267
            for(index = 2; index < length; index++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   268
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   269
                char ch = line.at(index);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   270
                if (ch < '0' || ch > '9')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   271
					break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   272
				else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   273
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   274
					tempNo[count] = ch;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   275
					count++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   276
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   277
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   278
			tempNo[count] = '\0';
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   279
			lineNo.copy(tempNo,strlen(tempNo));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   280
            index++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   281
            if (index < length)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   282
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   283
                unsigned int index2 = index + 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   284
                for(; index2 < length; index2++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   285
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   286
                    char ch = line.at(index2);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   287
                    if (ch == '"') break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   288
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   289
                if (length > index2 + 1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   290
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   291
                    levelname = line.substr(index + 1, index2 - index - 1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   292
                } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   293
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   294
                    levelname = line.substr(index + 1, length - index - 2);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   295
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   296
                string correctedname = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   297
                string::size_type start = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   298
                string::size_type pos = levelname.find_first_of("\\/");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   299
                while(pos != string::npos)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   300
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   301
                    correctedname += levelname.substr(start, pos - start);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   302
                    correctedname += DIR_SEPARATOR;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   303
                    start = pos + 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   304
                    pos = levelname.find_first_of("\\/", start);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   305
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   306
                // found the levelname; filename
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   307
                correctedname += levelname.substr(start);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   308
                levelname = toLowerCaseWin(correctedname);
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   309
				isFileMatched = false;
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   310
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   311
				// For baseline, need to list only those macros,which are belonging to bundle files. 
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   312
				 if (isbaseline == true)
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   313
				 {
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   314
					 vector<pair<string, string> >::iterator begin = files.begin();
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   315
					 vector<pair<string, string> >::iterator end = files.end();					 
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   316
					 for(; begin != end; begin++)
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   317
					 {
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   318
						 if (begin->first == levelname)
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   319
						 {
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   320
							 isFileMatched = true;
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   321
							 levelname = begin->second;
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   322
							 break;
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   323
						 }
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   324
					 }
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   325
				 }
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   326
				 else // current macro file, so search macros in the entire file
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   327
				 {
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   328
					 isFileMatched = true;
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   329
					 levelname = KEY_VAL_CURRENT; // set a generic key_val for all current macros
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   330
				 }
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   331
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   332
        }
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   333
        else if (isFileMatched == true && length > 8 && line.substr(0, 8) == "#define ")
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   334
        {   // we found preprocessor directive #define
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   335
            pair<string,string> macro = FindMacro(line);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   336
            // 'ret' contains the set of files and associated macros to be returned from function
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   337
            map<string, list<pair<pair<string, string>,string> > >::iterator found = ret.find(levelname);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   338
            bool exist = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   339
            if( found != ret.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   340
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   341
				list< pair<pair<string, string>,string> >::iterator start = found->second.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   342
				list< pair<pair<string, string>,string> >::iterator end = found->second.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   343
				
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   344
                // check if this macro is already defined, within this file(levelname)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   345
                while(start != end)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   346
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   347
					if( macro.first == start->first.first )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   348
                    exist = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   349
                    start++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   350
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   351
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   352
            // if macro not found, add it to the list of macros associated with the current file
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   353
            if( !exist )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   354
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   355
				pair<pair<string,string>,string> tempVal(macro,tempNo);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   356
				// if file already defined, only add the macro
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   357
                if (found != ret.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   358
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   359
					found->second.push_back(tempVal);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   360
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   361
                // else add both filename and asssociated macro
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   362
                else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   363
                {				
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   364
                    list<pair<pair<string, string>,string> > values;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   365
					values.push_back(tempVal);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   366
                    pair<string, list<pair<pair<string, string>,string> > > newfile(levelname, values);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   367
                    ret.insert(newfile);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   368
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   369
                // perform the same test as above on aRemoved data structure
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   370
                // this will be used for finding any duplicate macro definitions
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 0
diff changeset
   371
                if (isbaseline == true)
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   372
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   373
					pair<string,string> temp(macro.first,tempNo);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   374
                    map<string, TChange<list<pair<string,string> > > >::iterator found2 = aRemoved->find(levelname);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   375
                    if (found2 != aRemoved->end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   376
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   377
                        found2->second.GetValue().push_back(temp);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   378
                    } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   379
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   380
                        list<pair<string,string> > values;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   381
                        values.push_back(temp);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   382
                        TChange<list<pair<string,string> > > tempvar(levelname, values);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   383
                        pair<string, TChange<list<pair<string,string> > > > newfile(levelname, tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   384
                        aRemoved->insert(newfile);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   385
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   386
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   387
             } //if(!exist)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   388
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   389
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   390
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   391
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   392
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   393
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   394
// MacroAnalyser::findDuplicates
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   395
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   396
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   397
bool MacroAnalyser::findDuplicates(const string& basefilename, const string& currentfilename, list<pair<pair<string, string>,string> >& aBaseline, list<pair<pair<string, string>,string> >& aCurrent, TChange<list<pair<string,string> > >& aRemovedList, map<string, vector<pair<string,string> > >& baselinedup, map<string, vector<pair<string,string> > >& currentdup)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   398
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   399
    bool ret = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   400
    map<pair<string,string>, int> dups;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   401
    list<pair<pair<string, string>,string> >::iterator begin = aBaseline.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   402
    list<pair<pair<string, string>,string> >::iterator end = aBaseline.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   403
    bool found = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   404
    while(begin != end)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   405
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   406
        found = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   407
        list<pair<pair<string, string>,string> >::iterator duplicates = begin;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   408
        duplicates++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   409
		string original = begin->first.first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   410
		pair<string,string> original1(original,begin->second);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   411
        while(duplicates != end)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   412
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   413
			if (original == duplicates->first.first)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   414
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   415
                found = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   416
                pair<pair<string,string>, int> tempvar(original1, 1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   417
                dups.insert(tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   418
                duplicates = aBaseline.erase(duplicates);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   419
            } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   420
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   421
                duplicates++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   422
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   423
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   424
        if(found)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   425
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   426
            ret = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   427
            aRemovedList.GetValue().remove(original1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   428
            begin = aBaseline.erase(begin);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   429
        } 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   430
		    begin++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   431
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   432
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   433
    if (dups.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   434
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   435
        vector<pair<string,string> > values;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   436
        values.reserve(dups.size());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   437
        map<pair<string,string>, int>::iterator dupsbegin = dups.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   438
        map<pair<string,string>, int>::iterator dupsend = dups.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   439
        for(; dupsbegin != dupsend; dupsbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   440
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   441
            values.push_back(dupsbegin->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   442
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   443
        pair<string, vector<pair<string,string> > > tempvar(basefilename, values);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   444
        baselinedup.insert(tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   445
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   446
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   447
    dups.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   448
    begin = aCurrent.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   449
    end = aCurrent.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   450
    while(begin != end)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   451
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   452
        found = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   453
        list<pair<pair<string, string>,string> >::iterator duplicates = begin;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   454
        duplicates++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   455
		string original = begin->first.first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   456
		pair<string,string> original1(original,begin->second);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   457
        while(duplicates != end)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   458
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   459
			if (original == duplicates->first.first)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   460
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   461
                found = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   462
                pair<pair<string,string>, int> tempvar(original1, 1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   463
                dups.insert(tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   464
                duplicates = aCurrent.erase(duplicates);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   465
            } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   466
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   467
                duplicates++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   468
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   469
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   470
        if (found == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   471
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   472
            ret = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   473
            begin = aCurrent.erase(begin);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   474
        } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   475
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   476
            begin++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   477
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   478
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   479
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   480
    if (dups.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   481
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   482
        vector<pair<string,string> > values;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   483
        values.reserve(dups.size());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   484
        map<pair<string,string>, int>::iterator dupsbegin = dups.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   485
        map<pair<string,string>, int>::iterator dupsend = dups.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   486
        for(; dupsbegin != dupsend; dupsbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   487
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   488
			string macroname = dupsbegin->first.first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   489
			pair<string,string> tempVal (macroname,dupsbegin->first.second);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   490
            begin = aBaseline.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   491
            end = aBaseline.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   492
            for(; begin != end; begin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   493
            {   // we have to remove all macros, which have duplicates in current, from baseline
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   494
                // so that there won't be unnecessary warnings of removed macros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   495
                if (begin->first.first == macroname)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   496
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   497
                    aBaseline.erase(begin);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   498
                    break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   499
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   500
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   501
            values.push_back(tempVal);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   502
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   503
        pair<string, vector<pair<string,string> > > tempvar(currentfilename, values);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   504
        currentdup.insert(tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   505
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   506
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   507
}