You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdepim/mimelib/mimelib/boyermor.h

85 lines
2.8 KiB

//=============================================================================
// File: boyermor.h
// Contents: Declarations for DwBoyerMoore
// Maintainer: Doug Sauder <dwsauder@fwb.gulf.net>
// WWW: http://www.fwb.gulf.net/~dwsauder/mimepp.html
//
// Copyright (c) 1996, 1997 Douglas W. Sauder
// All rights reserved.
//
// IN NO EVENT SHALL DOUGLAS W. SAUDER BE LIABLE TO ANY PARTY FOR DIRECT,
// INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF
// THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF DOUGLAS W. SAUDER
// HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// DOUGLAS W. SAUDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT
// NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
// PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS"
// BASIS, AND DOUGLAS W. SAUDER HAS NO OBLIGATION TO PROVIDE MAINTENANCE,
// SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
//
//=============================================================================
#ifndef DW_BOYERMOR_H
#define DW_BOYERMOR_H
#include <stddef.h>
#ifndef DW_CONFIG_H
#include <mimelib/config.h>
#endif
#ifndef DW_STRING_H
#include <mimelib/string.h>
#endif
//=============================================================================
//+ Name DwBoyerMoore -- Class for executing Boyer-Moore string search algorithm
//+ Description
//. {\tt DwBoyerMoore} implements the Boyer-Moore algorithm for searching
//. for a string. The Boyer-Moore algorithm is fast, but requires a bit
//. of start-up overhead compared to a brute force algorithm.
//=============================================================================
// Last modified 1997-08-23
//+ Noentry ~DwBoyerMoore
class DW_EXPORT DwBoyerMoore {
public:
DwBoyerMoore(const char* aCstr);
DwBoyerMoore(const DwString& aStr);
DwBoyerMoore(const DwBoyerMoore& other);
//. Constructs a {\tt DwBoyerMoore} object for searching for a particular
//. string.
virtual ~DwBoyerMoore();
const DwBoyerMoore & operator=( const DwBoyerMoore & other );
void Assign(const char* aCstr);
void Assign(const DwString& aStr);
//. Sets the string to search for.
size_t FindIn(const DwString& aStr, size_t aPos, bool aCs = true) const;
//. Searches for the search string in {\tt aStr} starting at position
//. {\tt aPos}. If found, the function returns the first position in
//. {\tt aStr} where the search string was found. If not found, the
//. function returns {\tt DwString::npos}. Search is case sensitive iff
//. {\tt aCs} is true.
private:
size_t mPatLen;
char* mPat;
char* mCiPat;
unsigned char mSkipAmt[256];
unsigned char mCiSkipAmt[256]; // case insensitive skip table
void _Assign(const char* aPat, size_t aPatLen);
};
#endif