You've already forked lazarus-ccr
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3859 8e941d3f-bd1b-0410-a28a-d453659cc2b4
133 lines
2.8 KiB
ObjectPascal
133 lines
2.8 KiB
ObjectPascal
{
|
|
This file is part of the Web Service Toolkit
|
|
Copyright (c) 2006, 2007, 2008 by Inoussa OUEDRAOGO
|
|
|
|
This file is provide under modified LGPL licence
|
|
( the files COPYING.modifiedLGPL and COPYING.LGPL).
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
}
|
|
{ $INCLUDE wst_global.inc}
|
|
unit std_cursors;
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, Contnrs,
|
|
cursor_intf;
|
|
|
|
{ $INCLUDE wst.inc}
|
|
{ $INCLUDE wst_delphi.inc}
|
|
|
|
type
|
|
|
|
{ TObjectListCursor }
|
|
|
|
TObjectListCursor = class(TInterfacedObject,ICursor,IObjectCursor)
|
|
private
|
|
FList : TObjectList;
|
|
FCurrentIndex : Integer;
|
|
protected
|
|
procedure Reset();
|
|
function MoveNext() : Boolean;virtual;
|
|
function Clone(): ICursor;
|
|
function GetCount() : Integer;
|
|
function GetCurrent() : TObject;
|
|
public
|
|
constructor Create(ADataList : TObjectList);
|
|
end;
|
|
|
|
{ TObjectListFilterableCursor }
|
|
|
|
TObjectListFilterableCursor = class(TObjectListCursor,IFilterableObjectCursor)
|
|
private
|
|
FFilter : IObjectFilter;
|
|
protected
|
|
function MoveNext() : Boolean;override;
|
|
function GetFilter() : IObjectFilter;
|
|
function SetFilter(const AFilter : IObjectFilter) : IObjectFilter;
|
|
public
|
|
destructor Destroy();override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{ TObjectListCursor }
|
|
|
|
procedure TObjectListCursor.Reset();
|
|
begin
|
|
FCurrentIndex := -1;
|
|
end;
|
|
|
|
function TObjectListCursor.MoveNext(): Boolean;
|
|
begin
|
|
Inc(FCurrentIndex);
|
|
Result := ( FCurrentIndex < FList.Count );
|
|
end;
|
|
|
|
function TObjectListCursor.Clone(): ICursor;
|
|
begin
|
|
Result := TObjectListCursor.Create(FList) as ICursor;
|
|
end;
|
|
|
|
function TObjectListCursor.GetCount() : Integer;
|
|
begin
|
|
Result := FList.Count;
|
|
end;
|
|
|
|
function TObjectListCursor.GetCurrent(): TObject;
|
|
begin
|
|
if ( FCurrentIndex < 0 ) or ( FCurrentIndex >= FList.Count ) then
|
|
raise ECursorException.Create('Invalid cursor state.');
|
|
Result := FList[FCurrentIndex];
|
|
end;
|
|
|
|
constructor TObjectListCursor.Create(ADataList: TObjectList);
|
|
begin
|
|
Assert(Assigned(ADataList));
|
|
FList := ADataList;
|
|
Reset();
|
|
end;
|
|
|
|
{ TObjectListFilterableCursor }
|
|
|
|
function TObjectListFilterableCursor.MoveNext(): Boolean;
|
|
begin
|
|
if ( FFilter = nil ) then begin
|
|
Result := inherited MoveNext();
|
|
end else begin
|
|
while ( inherited MoveNext() ) do begin
|
|
if FFilter.Evaluate(GetCurrent()) then begin
|
|
Result := True;
|
|
Exit;
|
|
end;
|
|
end;
|
|
Result := False;
|
|
end;
|
|
end;
|
|
|
|
function TObjectListFilterableCursor.GetFilter(): IObjectFilter;
|
|
begin
|
|
Result := FFilter;
|
|
end;
|
|
|
|
function TObjectListFilterableCursor.SetFilter(
|
|
const AFilter: IObjectFilter
|
|
): IObjectFilter;
|
|
begin
|
|
FFilter := AFilter;
|
|
Result := FFilter;
|
|
end;
|
|
|
|
destructor TObjectListFilterableCursor.Destroy();
|
|
begin
|
|
FFilter := nil;
|
|
inherited Destroy();
|
|
end;
|
|
|
|
end.
|
|
|