[Winmerge-svn] SF.net SVN: winmerge: [5491] trunk/Src
Windows visual diff and merge for files and directories
Brought to you by:
christianlist,
grimmdp
From: <ki...@us...> - 2008-06-17 08:02:36
|
Revision: 5491 http://winmerge.svn.sourceforge.net/winmerge/?rev=5491&view=rev Author: kimmov Date: 2008-06-17 01:02:29 -0700 (Tue, 17 Jun 2008) Log Message: ----------- Use std::vector in FilterList instead of CList. Modified Paths: -------------- trunk/Src/FileFilterMgr.cpp trunk/Src/FileFilterMgr.h trunk/Src/Plugins.cpp trunk/Src/Plugins.h Modified: trunk/Src/FileFilterMgr.cpp =================================================================== --- trunk/Src/FileFilterMgr.cpp 2008-06-16 18:54:40 UTC (rev 5490) +++ trunk/Src/FileFilterMgr.cpp 2008-06-17 08:02:29 UTC (rev 5491) @@ -25,6 +25,7 @@ #include "stdafx.h" #include <string.h> +#include <vector> #include "UnicodeString.h" #include "pcre.h" #include "FileFilterMgr.h" @@ -38,19 +39,22 @@ static char THIS_FILE[] = __FILE__; #endif +using namespace std; + /** * @brief Deletes items from filter list. * * @param [in] filterList List to empty. */ -void EmptyFilterList(FileFilterList & filterList) +void EmptyFilterList(vector<FileFilterElement*> *filterList) { - while (!filterList.IsEmpty()) + while (!filterList->empty()) { - FileFilterElement &elem = filterList.GetHead(); - pcre_free(elem.pRegExp); - pcre_free(elem.pRegExpExtra); - filterList.RemoveHead(); + FileFilterElement *elem = filterList->back(); + pcre_free(elem->pRegExp); + pcre_free(elem->pRegExpExtra); + delete elem; + filterList->pop_back(); } } @@ -69,8 +73,8 @@ CString name; /**< Filter name (shown in UI) */ CString description; /**< Filter description text */ CString fullpath; /**< Full path to filter file */ - FileFilterList filefilters; /**< List of rules for files */ - FileFilterList dirfilters; /**< List of rules for directories */ + vector<FileFilterElement*> filefilters; /**< List of rules for files */ + vector<FileFilterElement*> dirfilters; /**< List of rules for directories */ FileFilter() : default_include(true) { } ~FileFilter(); }; @@ -80,8 +84,8 @@ */ FileFilter::~FileFilter() { - EmptyFilterList(filefilters); - EmptyFilterList(dirfilters); + EmptyFilterList(&filefilters); + EmptyFilterList(&dirfilters); } /** @@ -173,7 +177,7 @@ * @param [in] filterList List where pattern is added. * @param [in] str Temporary variable (ie, it may be altered) */ -static void AddFilterPattern(FileFilterList & filterList, CString & str) +static void AddFilterPattern(vector<FileFilterElement*> *filterList, CString & str) { LPCTSTR commentLeader = _T("##"); // Starts comment str.TrimLeft(); @@ -216,16 +220,16 @@ &erroroffset, NULL); if (regexp) { - FileFilterElement elem; + FileFilterElement *elem = new FileFilterElement(); errormsg = NULL; pcre_extra *pe = pcre_study(regexp, 0, &errormsg); - elem.pRegExp = regexp; + elem->pRegExp = regexp; if (pe != NULL && errormsg != NULL) - elem.pRegExpExtra = pe; + elem->pRegExpExtra = pe; - filterList.AddTail(elem); + filterList->push_back(elem); } } @@ -293,13 +297,13 @@ { // file filter CString str = sLine.Mid(2); - AddFilterPattern(pfilter->filefilters, str); + AddFilterPattern(&pfilter->filefilters, str); } else if (0 == _tcsncmp(sLine, _T("d:"), 2)) { // directory filter CString str = sLine.Mid(2); - AddFilterPattern(pfilter->dirfilters, str); + AddFilterPattern(&pfilter->dirfilters, str); } } while (bLinesLeft == TRUE); @@ -331,11 +335,12 @@ * @return TRUE if string passes * @note Matching stops when first match is found. */ -BOOL TestAgainstRegList(const FileFilterList & filterList, LPCTSTR szTest) +BOOL TestAgainstRegList(const vector<FileFilterElement*> *filterList, LPCTSTR szTest) { - for (POSITION pos = filterList.GetHeadPosition(); pos; ) + vector<FileFilterElement*>::const_iterator iter = filterList->begin(); + while (iter != filterList->end()) { - const FileFilterElement & elem = filterList.GetNext(pos); + //const FileFilterElement & elem = filterList.GetNext(pos); int ovector[30]; char compString[200] = {0}; int stringLen = 0; @@ -350,8 +355,8 @@ stringLen = strlen(compString); #endif - pcre * regexp = elem.pRegExp; - pcre_extra * extra = elem.pRegExpExtra; + pcre * regexp = (*iter)->pRegExp; + pcre_extra * extra = (*iter)->pRegExpExtra; int result = pcre_exec(regexp, extra, compString, stringLen, 0, 0, ovector, 30); @@ -359,6 +364,8 @@ if (result >= 0) return TRUE; + + ++iter; } return FALSE; } @@ -379,7 +386,7 @@ { if (!pFilter) return TRUE; - if (TestAgainstRegList(pFilter->filefilters, szFileName)) + if (TestAgainstRegList(&pFilter->filefilters, szFileName)) return !pFilter->default_include; return pFilter->default_include; } @@ -400,7 +407,7 @@ { if (!pFilter) return TRUE; - if (TestAgainstRegList(pFilter->dirfilters, szDirName)) + if (TestAgainstRegList(&pFilter->dirfilters, szDirName)) return !pFilter->default_include; return pFilter->default_include; } Modified: trunk/Src/FileFilterMgr.h =================================================================== --- trunk/Src/FileFilterMgr.h 2008-06-16 18:54:40 UTC (rev 5490) +++ trunk/Src/FileFilterMgr.h 2008-06-17 08:02:29 UTC (rev 5491) @@ -25,15 +25,10 @@ // Uses MFC C++ template containers #include <afxtempl.h> +#include <vector> #include "pcre.h" struct FileFilterElement; -/** - * @brief List of file filtering rules. - * @sa FileFilterElement - * @sa FileFilter - */ -typedef CList<FileFilterElement, FileFilterElement&> FileFilterList; /** * @brief Return values for many filter functions. @@ -122,12 +117,8 @@ }; -// I think that CRegExp doesn't copy correctly (I get heap corruption in CRegList::program) -// so I'm using pointers to avoid its copy constructor -// Perry, 2003-05-18 +BOOL TestAgainstRegList(const std::vector<FileFilterElement*> *filterList, LPCTSTR szTest); +void EmptyFilterList(std::vector<FileFilterElement*> *filterList); -BOOL TestAgainstRegList(const FileFilterList & filterList, LPCTSTR szTest); -void EmptyFilterList(FileFilterList & filterList); - #endif // FileFilterMgr_h_included Modified: trunk/Src/Plugins.cpp =================================================================== --- trunk/Src/Plugins.cpp 2008-06-16 18:54:40 UTC (rev 5490) +++ trunk/Src/Plugins.cpp 2008-06-17 08:02:29 UTC (rev 5491) @@ -28,6 +28,7 @@ #include "StdAfx.h" #include <afxmt.h> +#include <vector> #include "pcre.h" #include "LogFile.h" @@ -49,6 +50,8 @@ static char THIS_FILE[] = __FILE__; #endif +using namespace std; + static CStringArray theScriptletList; /// Need to lock the *.sct so the user can't delete them static CPtrArray theScriptletHandleList; @@ -264,7 +267,7 @@ void PluginInfo::LoadFilterString() { - filters = new FileFilterList; + filters = new vector<FileFilterElement*>; CString sLine = filtersText; CString sPiece; @@ -295,9 +298,9 @@ pcre *regexp = pcre_compile(regexString, 0, &errormsg, &erroroffset, NULL); if (regexp) { - FileFilterElement elem; - elem.pRegExp = regexp; - filters->AddTail(elem); + FileFilterElement *elem = new FileFilterElement(); + elem->pRegExp = regexp; + filters->push_back(elem); } }; @@ -322,7 +325,7 @@ sPiece.TrimLeft(); sPiece.MakeUpper(); - if (::TestAgainstRegList(*filters, sPiece)) + if (::TestAgainstRegList(filters, sPiece)) return TRUE; }; @@ -692,7 +695,7 @@ { pArray->GetAt(i).lpDispatch->Release(); if (pArray->GetAt(i).filters) - EmptyFilterList(*(pArray->GetAt(i).filters)); + EmptyFilterList(pArray->GetAt(i).filters); delete pArray->GetAt(i).filters; } Modified: trunk/Src/Plugins.h =================================================================== --- trunk/Src/Plugins.h 2008-06-16 18:54:40 UTC (rev 5490) +++ trunk/Src/Plugins.h 2008-06-17 08:02:29 UTC (rev 5491) @@ -29,6 +29,7 @@ #ifndef __PLUGINS_H__ #define __PLUGINS_H__ +#include <vector> #include "FileFilterMgr.h" class CRegExp; @@ -71,7 +72,7 @@ CString description; BOOL bUnicodeMode; BOOL bAutomatic; - FileFilterList *filters; + std::vector<FileFilterElement*> *filters; /// only for plugins with free function names (EDITOR_SCRIPT) int nFreeFunctions; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |