16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"EBMユニット(interface)"
この発言は #01367 ぜえた さんの高速(?)複数文字列検索(拡張BM法) に対するコメントです
// 拡張 Boyer-Moore法を使った複数文字列検索。(interface)
unit EBM;
interface
uses Windows, SysUtils, Classes;
type
TProgressEvent = procedure(Sender: TObject; var Cancel: Boolean) of object;
TSearchOption = (soIgnoreCase, soAnsi);
TSearchOptions = set of TSearchOption;
PEBMSearchNext = ^TEBMSearchNext;
TEBMSearchNext = array[-1..0, Char] of Integer;
PEBMSearchSkip = ^TEBMSearchSkip;
TEBMSearchSkip = array[0..0] of Integer;
PEBMSearchAccept = ^TEBMSearchAccept;
TEBMSearchAccept = array[0..0] of Integer;
TEBMSearchProc = function: Boolean of object;
TEBMSearch = class
private
FPatterns: TStrings;
FStep: Integer;
FOnProgress: TProgressEvent;
FSearch: TEBMSearchProc;
FNext: PEBMSearchNext;
FSkip: PEBMSearchSkip;
FAccept: PEBMSearchAccept;
FMinLen: Integer;
FStartPos: PChar;
FEndPos: PChar;
FCurPos: PChar;
FStepPos: PChar;
FCurState: Integer;
FFoundPatternIndex: Integer;
FFoundPos: PChar;
CmpFlags: DWORD;
FOptions: TSearchOptions;
FTableValid: Boolean;
procedure SetPatterns(Value: TStrings);
procedure SetOptions(Value: TSearchOptions);
procedure PatternsChanged(Sender: TObject);
protected
procedure CreateTable;
function NonAnsiSearch: Boolean;
function AnsiSearch: Boolean;
procedure Update; virtual;
function DoProgress: Boolean; virtual;
public
constructor Create;
destructor Destroy; override;
procedure SearchInit(S, E: PChar);
property Patterns: TStrings read FPatterns write SetPatterns;
property Search: TEBMSearchProc read FSearch;
property FoundPatternIndex: Integer read FFoundPatternIndex;
property Options: TSearchOptions read FOptions write SetOptions;
property FoundPos: PChar read FFoundPos;
property OnProgress: TProgressEvent read FOnProgress write FOnProgress;
property StartPos: PChar read FStartPos;
property EndPos: PChar read FEndPos;
property CurPos: PChar read FCurPos;
end;
Original document by ぜえた 氏 ID:(QZC05100)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|