apicompatanamdw/compatanalysercmd/headeranalyser/src/MacroAnalyser.cpp
author noe\swadi
Tue, 12 Jan 2010 14:52:39 +0530
changeset 0 638b9c697799
child 12 a0eee409ff14
permissions -rw-r--r--
1. Licenses updated to EPL. 2. New components test cases added to BC Drivers 3. Some minor fixes and few feature additions to CA.
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
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    89
            map<string, list<pair<pair<string, string>,string> > >::iterator cur = current.find(curfilename);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    90
            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
    91
                                            // because they aren't created in situation where there isn't any macros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    92
            {                               // specific to that file or the include guard for the file is duplicated.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    93
                list<pair<pair<string, string>,string> > tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    94
                pair<string, list<pair<pair<string, string>,string> > > tempvar2(curfilename, tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    95
                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
    96
                if (pos.second == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    97
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    98
                    cur = pos.first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    99
                } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   100
                {                           // this shouldn't be happening
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   101
                    throw HAException("Problems ahead.");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   102
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   103
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   104
            map<string, list<pair<pair<string, string>,string> > >::iterator base = baseline.find(basefilename);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   105
            findDuplicates(basefilename,curfilename,base->second, cur->second, removedbegin->second, iBaseDuplicates, iCurrentDuplicates);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   106
            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   107
			//maintain a cache list of files with macros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   108
			if(base->second.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   109
				aMacroFiles.push_back(toLowerCaseWin(base->first));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   110
			if(cur->second.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   111
				aMacroFiles.push_back(toLowerCaseWin(cur->first));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   112
			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   113
			// 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
   114
            list<pair<pair<string, string>,string> >::iterator begin = cur->second.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   115
            list<pair<pair<string, string>,string> >::iterator end = cur->second.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   116
            for(;begin != end; begin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   117
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   118
				list<pair<string,string> >::iterator place = FindFromList(begin->first.first, removedbegin->second.GetValue());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   119
                if (place != removedbegin->second.GetValue().end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   120
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   121
                    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
   122
                    list<pair<pair<string, string>,string> > baselist = base->second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   123
					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
   124
                    if (found != baselist.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   125
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   126
						if (found->first.second != begin->first.second)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   127
                        {   // 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
   128
                            pair<pair<string,string>,string> changes;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   129
							changes.first.first = found->first.second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   130
							changes.first.second = begin->first.second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   131
							changes.second = begin->second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   132
							pair<string, pair<pair<string, string>,string> > param(begin->first.first,changes);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   133
                            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
   134
                            if (file != iChanged.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   135
                            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   136
                                file->second.GetValue().insert(param);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   137
                            } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   138
                            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   139
                                map<string, pair<pair<string, string>,string> > tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   140
                                tempvar.insert(param);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   141
                                TChange<map<string, pair<pair<string, string>,string> > > tempvar2(basefilename, curfilename, tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   142
                                pair<string, TChange<map<string, pair<pair<string, string>,string> > > > tempvar3(basefilename, tempvar2);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   143
                                iChanged.insert(tempvar3);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   144
                            }
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
            removedbegin->second.SetCurrent(curfilename);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   150
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   151
        basebegin++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   152
    }  
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
// MacroAnalyser::FindMacro
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   157
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   158
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   159
pair<string, string> MacroAnalyser::FindMacro(string aLine)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   160
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   161
    pair<string, string> ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   162
    string::size_type pos = aLine.find_first_of(" \t");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   163
    while(pos != string::npos && (aLine.at(pos) == ' ' || aLine.at(pos) == '\t') )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   164
        pos++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   165
    string::size_type param_pos = pos ;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   166
    pos = aLine.find_first_of(" \t(",param_pos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   167
    string value;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   168
    if (pos != string::npos && aLine.at(pos) == '(')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   169
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   170
        pos = aLine.find(')',pos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   171
        if(pos !=string::npos )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   172
            pos++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   173
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   174
    if (pos != string::npos && pos < aLine.size())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   175
    {   // 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
   176
        size_t value_pos = (unsigned int)pos + 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   177
        value = aLine.substr(value_pos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   178
        value = trimWhiteSpace(value);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   179
        if (value.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   180
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   181
            value_pos = value.find_first_not_of(" \t");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   182
            if (value_pos != string::npos && value_pos != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   183
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   184
                value = value.substr(value_pos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   185
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   186
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   187
    } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   188
    {   // otherwise we put empty value
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   189
        value = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   190
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   191
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   192
    string param = aLine.substr(param_pos, pos - param_pos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   193
    ret = pair<string,string>(param,value);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   194
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   195
}
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
// MacroAnalyser::getRemoved
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   199
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   200
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   201
map<string, TChange<list<pair<string,string> > > >& MacroAnalyser::getRemoved()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   202
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   203
    return iRemoved;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   204
}
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
// MacroAnalyser::FindMacro
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   208
// readParameters should be called so that first is called baseline command
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   209
// and after that current command, otherwise it doesn't work
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   210
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   211
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   212
map<string, TChange<map<string, pair<pair<string, string>,string> > > >& MacroAnalyser::getChanged()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   213
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   214
    return iChanged;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   215
}
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
// MacroAnalyser::getBaseDuplicates
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   219
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   220
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   221
map<string, vector<pair<string,string> > >& MacroAnalyser::getBaseDuplicates()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   222
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   223
    return iBaseDuplicates;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   224
}
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
// MacroAnalyser::getCurrentDuplicates
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   228
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   229
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   230
map<string, vector<pair<string,string> > >& MacroAnalyser::getCurrentDuplicates()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   231
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   232
    return iCurrentDuplicates;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   233
}
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
// MacroAnalyser::parseMacros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   237
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   238
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   239
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)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   240
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   241
    // ret, is the file and related set of macros returned by the function
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   242
    map<string, list<pair<pair<string, string>,string> > > ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   243
    vector<pair<string, string> > files;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   244
    vector<string>::iterator bundlefile = bundlefiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   245
    vector<string>::iterator bundleend = bundlefiles.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   246
    for(; bundlefile != bundleend; bundlefile++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   247
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   248
        pair<string, string> bothcase(toLowerCaseWin(*bundlefile), *bundlefile);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   249
        files.push_back(bothcase);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   250
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   251
    // Read macrofiles as lines
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   252
    string cline;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   253
    string levelname = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   254
    bool isbundle = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   255
    while((cline = getLine(aFile)) != KEmpty)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   256
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   257
        string line = cline;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   258
		char tempNo[6];
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   259
		string lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   260
        unsigned int length = (unsigned int)line.length();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   261
        if (length > 6 && line.at(0) == '#' && line.at(1) == ' ')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   262
        {   // we may have found a file descriptor: '# xx "path/to/file.h"' or
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   263
            // '# xx "path/to/file.h" 1' or '# xx "path/to/file.h" 2'
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   264
            unsigned int index;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   265
			int count = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   266
            for(index = 2; index < length; index++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   267
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   268
                char ch = line.at(index);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   269
                if (ch < '0' || ch > '9')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   270
					break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   271
				else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   272
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   273
					tempNo[count] = ch;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   274
					count++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   275
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   276
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   277
			tempNo[count] = '\0';
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   278
			lineNo.copy(tempNo,strlen(tempNo));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   279
            index++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   280
            if (index < length)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   281
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   282
                unsigned int index2 = index + 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   283
                for(; index2 < length; index2++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   284
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   285
                    char ch = line.at(index2);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   286
                    if (ch == '"') break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   287
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   288
                if (length > index2 + 1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   289
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   290
                    levelname = line.substr(index + 1, index2 - index - 1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   291
                } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   292
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   293
                    levelname = line.substr(index + 1, length - index - 2);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   294
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   295
                string correctedname = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   296
                string::size_type start = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   297
                string::size_type pos = levelname.find_first_of("\\/");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   298
                while(pos != string::npos)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   299
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   300
                    correctedname += levelname.substr(start, pos - start);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   301
                    correctedname += DIR_SEPARATOR;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   302
                    start = pos + 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   303
                    pos = levelname.find_first_of("\\/", start);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   304
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   305
                // found the levelname; filename
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   306
                correctedname += levelname.substr(start);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   307
                levelname = toLowerCaseWin(correctedname);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   308
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   309
                vector<pair<string, string> >::iterator begin = files.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   310
                vector<pair<string, string> >::iterator end = files.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   311
                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   312
                isbundle = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   313
                for(; begin != end; begin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   314
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   315
                    if (begin->first == levelname)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   316
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   317
                        isbundle = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   318
                        levelname = begin->second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   319
                        break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   320
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   321
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   322
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   323
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   324
        else if (isbundle == true && length > 8 && line.substr(0, 8) == "#define ")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   325
        {   // we found preprocessor directive #define
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   326
            pair<string,string> macro = FindMacro(line);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   327
            // '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
   328
            map<string, list<pair<pair<string, string>,string> > >::iterator found = ret.find(levelname);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   329
            bool exist = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   330
            if( found != ret.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   331
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   332
				list< pair<pair<string, string>,string> >::iterator start = found->second.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   333
				list< pair<pair<string, string>,string> >::iterator end = found->second.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   334
				
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   335
                // check if this macro is already defined, within this file(levelname)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   336
                while(start != end)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   337
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   338
					if( macro.first == start->first.first )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   339
                    exist = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   340
                    start++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   341
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   342
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   343
            // 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
   344
            if( !exist )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   345
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   346
				pair<pair<string,string>,string> tempVal(macro,tempNo);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   347
				// if file already defined, only add the macro
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   348
                if (found != ret.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   349
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   350
					found->second.push_back(tempVal);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   351
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   352
                // else add both filename and asssociated macro
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   353
                else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   354
                {				
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   355
                    list<pair<pair<string, string>,string> > values;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   356
					values.push_back(tempVal);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   357
                    pair<string, list<pair<pair<string, string>,string> > > newfile(levelname, values);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   358
                    ret.insert(newfile);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   359
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   360
                // perform the same test as above on aRemoved data structure
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   361
                // this will be used for finding any duplicate macro definitions
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   362
                if (aAddToRemoved == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   363
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   364
					pair<string,string> temp(macro.first,tempNo);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   365
                    map<string, TChange<list<pair<string,string> > > >::iterator found2 = aRemoved->find(levelname);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   366
                    if (found2 != aRemoved->end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   367
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   368
                        found2->second.GetValue().push_back(temp);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   369
                    } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   370
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   371
                        list<pair<string,string> > values;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   372
                        values.push_back(temp);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   373
                        TChange<list<pair<string,string> > > tempvar(levelname, values);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   374
                        pair<string, TChange<list<pair<string,string> > > > newfile(levelname, tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   375
                        aRemoved->insert(newfile);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   376
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   377
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   378
             } //if(!exist)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   379
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   380
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   381
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   382
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   383
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   384
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   385
// MacroAnalyser::findDuplicates
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   386
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   387
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   388
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
   389
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   390
    bool ret = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   391
    map<pair<string,string>, int> dups;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   392
    list<pair<pair<string, string>,string> >::iterator begin = aBaseline.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   393
    list<pair<pair<string, string>,string> >::iterator end = aBaseline.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   394
    bool found = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   395
    while(begin != end)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   396
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   397
        found = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   398
        list<pair<pair<string, string>,string> >::iterator duplicates = begin;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   399
        duplicates++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   400
		string original = begin->first.first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   401
		pair<string,string> original1(original,begin->second);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   402
        while(duplicates != end)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   403
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   404
			if (original == duplicates->first.first)
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 = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   407
                pair<pair<string,string>, int> tempvar(original1, 1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   408
                dups.insert(tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   409
                duplicates = aBaseline.erase(duplicates);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   410
            } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   411
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   412
                duplicates++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   413
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   414
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   415
        if(found)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   416
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   417
            ret = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   418
            aRemovedList.GetValue().remove(original1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   419
            begin = aBaseline.erase(begin);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   420
        } 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   421
		    begin++;
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 (dups.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   425
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   426
        vector<pair<string,string> > values;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   427
        values.reserve(dups.size());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   428
        map<pair<string,string>, int>::iterator dupsbegin = dups.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   429
        map<pair<string,string>, int>::iterator dupsend = dups.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   430
        for(; dupsbegin != dupsend; dupsbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   431
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   432
            values.push_back(dupsbegin->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   433
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   434
        pair<string, vector<pair<string,string> > > tempvar(basefilename, values);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   435
        baselinedup.insert(tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   436
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   437
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   438
    dups.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   439
    begin = aCurrent.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   440
    end = aCurrent.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   441
    while(begin != end)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   442
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   443
        found = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   444
        list<pair<pair<string, string>,string> >::iterator duplicates = begin;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   445
        duplicates++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   446
		string original = begin->first.first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   447
		pair<string,string> original1(original,begin->second);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   448
        while(duplicates != end)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   449
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   450
			if (original == duplicates->first.first)
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 = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   453
                pair<pair<string,string>, int> tempvar(original1, 1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   454
                dups.insert(tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   455
                duplicates = aCurrent.erase(duplicates);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   456
            } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   457
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   458
                duplicates++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   459
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   460
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   461
        if (found == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   462
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   463
            ret = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   464
            begin = aCurrent.erase(begin);
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
            begin++;
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
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   471
    if (dups.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   472
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   473
        vector<pair<string,string> > values;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   474
        values.reserve(dups.size());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   475
        map<pair<string,string>, int>::iterator dupsbegin = dups.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   476
        map<pair<string,string>, int>::iterator dupsend = dups.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   477
        for(; dupsbegin != dupsend; dupsbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   478
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   479
			string macroname = dupsbegin->first.first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   480
			pair<string,string> tempVal (macroname,dupsbegin->first.second);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   481
            begin = aBaseline.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   482
            end = aBaseline.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   483
            for(; begin != end; begin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   484
            {   // we have to remove all macros, which have duplicates in current, from baseline
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   485
                // so that there won't be unnecessary warnings of removed macros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   486
                if (begin->first.first == macroname)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   487
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   488
                    aBaseline.erase(begin);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   489
                    break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   490
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   491
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   492
            values.push_back(tempVal);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   493
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   494
        pair<string, vector<pair<string,string> > > tempvar(currentfilename, values);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   495
        currentdup.insert(tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   496
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   497
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   498
}