マッチデータを保持するクラスを大改造

今日は、x{n, m} には手を付けず、マッチデータを保持するクラスをゼロから作り直した。
新しいクラスは、TREGroupItem と TREGroups の2つ。

  TREMatchPosRec = record
    StartP, EndP: PWideChar;
  end;
  PREMatchPosRec = ^TREMatchPosRec;

  TREGroupItem = class
  private
    FGroupName: {$IFDEF UNICODE}UnicodeString{$ELSE}WideString{$ENDIF};
    FEntry, FWayout: Integer;
    FList: TList;
    FLevel: Integer;
    procedure SetGroupName(const Value: {$IFDEF UNICODE}UnicodeString{$ELSE}WideString{$ENDIF});
    procedure SetEntry(const Value: Integer);
    procedure SetWayout(const Value: Integer);
    function GetEndP: PWideChar; inline;
    function GetStartP: PWideChar; inline;
    procedure SetEndP(const Value: PWideChar); inline;
    procedure SetStartP(const Value: PWideChar); inline;
  protected
    function AddPosition: Integer; inline;
  public
    constructor Create;
    destructor Destroy; override;
    procedure Clear;
    procedure Push;
    procedure Pop;
    property GroupName: {$IFDEF UNICODE}UnicodeString{$ELSE}WideString{$ENDIF} read FGroupName write SetGroupName;
    property Entry: Integer read FEntry write SetEntry;
    property Wayout: Integer read FWayout write SetWayout;
    property StartP: PWideChar read GetStartP write SetStartP;
    property EndP: PWideChar read GetEndP write SetEndP;
  end;

  TREGroups = class
  private
    FItems: TObjectList;
    function GetItems(Index: Integer): TREGroupItem; inline;
    procedure SetItems(Index: Integer; const Value: TREGroupItem); inline;
    function GetStrings(Index: Integer): UnicodeString;
    function GetNames(AName: {$IFDEF UNICODE}UnicodeString{$ELSE}WideString{$ENDIF}): {$IFDEF UNICODE}UnicodeString{$ELSE}WideString{$ENDIF};
  public
    constructor Create;
    destructor Destroy; override;
    function Add(const AGroupName: {$IFDEF UNICODE}UnicodeString{$ELSE}WideString{$ENDIF}; AEntry, AWayout: Integer): Integer;
    procedure Clear;
    function Count: Integer;
    function IndexOfName(const AGroupName: {$IFDEF UNICODE}UnicodeString{$ELSE}WideString{$ENDIF}): Integer;
    procedure Push;
    procedure Pop;
    procedure Reset;
    property Items[Index: Integer]: TREGroupItem read GetItems write SetItems; default;
    property Names[AName: {$IFDEF UNICODE}UnicodeString{$ELSE}WideString{$ENDIF}]: {$IFDEF UNICODE}UnicodeString{$ELSE}WideString{$ENDIF} read GetNames;
  end;

コメントを残す

メールアドレスが公開されることはありません。