116 lines
2.8 KiB
C++
116 lines
2.8 KiB
C++
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 1996 - 2000.
|
||
|
//
|
||
|
// File: SIGNORE.hxx
|
||
|
//
|
||
|
// Contents: Class to keep a list of scopes which shouldn't be filtered.
|
||
|
//
|
||
|
// History: 21-Nov-96 dlee created
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#include <timlimit.hxx>
|
||
|
#include <fa.hxx>
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CScopesIgnored
|
||
|
//
|
||
|
// Purpose: The ignored scope table
|
||
|
//
|
||
|
// History: 21-Nov-96 dlee created
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
class CScopesIgnored
|
||
|
{
|
||
|
public:
|
||
|
CScopesIgnored() : _tl(0,0) { }
|
||
|
|
||
|
BOOL Enumerate(WCHAR * pwcRoot, unsigned cwc, unsigned & iBmk );
|
||
|
|
||
|
void RemoveElement(WCHAR const * pwcScope);
|
||
|
|
||
|
BOOL Update( WCHAR const * pwcScope,
|
||
|
BOOL fIsIndexed )
|
||
|
{
|
||
|
// return TRUE if a change was made to the table, FALSE otherwise
|
||
|
|
||
|
XPtr<CLowcaseBuf> xElem = new CLowcaseBuf( pwcScope );
|
||
|
|
||
|
CWriteAccess lock( _rwLock );
|
||
|
|
||
|
for ( unsigned i = 0; i < _aElems.Count(); i++ )
|
||
|
{
|
||
|
// look for the path in the array
|
||
|
|
||
|
if ( xElem->AreEqual( *_aElems[i] ) )
|
||
|
{
|
||
|
// if it wasn't indexed before and it is now, remove it.
|
||
|
|
||
|
if ( fIsIndexed )
|
||
|
{
|
||
|
delete _aElems.AcquireAndShrink(i);
|
||
|
|
||
|
ConstructDFAObject();
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// no change -- wasn't indexed before and isn't now.
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// add the new entry if it shouldn't be indexed
|
||
|
|
||
|
if ( !fIsIndexed )
|
||
|
{
|
||
|
_aElems.Add( xElem.GetPointer(), _aElems.Count() );
|
||
|
|
||
|
xElem.Acquire();
|
||
|
|
||
|
ConstructDFAObject();
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
} //Update
|
||
|
|
||
|
BOOL RegExFind( CLowcaseBuf const & bufToFind );
|
||
|
|
||
|
#if CIDBG==1
|
||
|
void Dump()
|
||
|
{
|
||
|
CReadAccess lock( _rwLock );
|
||
|
|
||
|
ciDebugOut(( DEB_ERROR, "========= Start IgnoredScopes Table =============\n" ));
|
||
|
|
||
|
for ( unsigned i = 0; i < _aElems.Count(); i++ )
|
||
|
{
|
||
|
ciDebugOut(( DEB_ERROR, "IgnoredScopes: %ws\n",_aElems[i]->Get() ));
|
||
|
|
||
|
}
|
||
|
ciDebugOut(( DEB_ERROR, "========= End IgnoredScopes Table =============\n" ));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
private:
|
||
|
|
||
|
void ConstructDFAObject(void);
|
||
|
|
||
|
CCountedDynArray<CLowcaseBuf> _aElems;
|
||
|
CReadWriteAccess _rwLock;
|
||
|
XPtr<CDFA> _xDFA;
|
||
|
CTimeLimit _tl;
|
||
|
};
|
||
|
|
||
|
|