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.
|