You've already forked lazarus-ccr
Aggregated filters
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@594 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -25,7 +25,7 @@ uses
|
|||||||
{$ELSE}
|
{$ELSE}
|
||||||
TestFrameWork,
|
TestFrameWork,
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
rtti_filters;
|
cursor_intf, rtti_filters;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
|
@ -16,12 +16,12 @@ unit cursor_intf;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils;
|
Classes, SysUtils, wst_types;
|
||||||
|
|
||||||
{$INCLUDE wst.inc}
|
|
||||||
{$INCLUDE wst_delphi.inc}
|
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
|
TFilterConnector = ( fcNone, fcAnd, fcOr );
|
||||||
|
|
||||||
IInterfaceCursor = interface;
|
IInterfaceCursor = interface;
|
||||||
IObjectCursor = interface;
|
IObjectCursor = interface;
|
||||||
IDefaultTypedCursor = {$IFDEF WST_INTF_DOM}IInterfaceCursor{$ELSE}IObjectCursor{$ENDIF};
|
IDefaultTypedCursor = {$IFDEF WST_INTF_DOM}IInterfaceCursor{$ELSE}IObjectCursor{$ENDIF};
|
||||||
@ -60,6 +60,22 @@ type
|
|||||||
function SetFilter(const AFilter : IObjectFilter) : IObjectFilter;
|
function SetFilter(const AFilter : IObjectFilter) : IObjectFilter;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TAggregatedFilter }
|
||||||
|
|
||||||
|
TAggregatedFilter = class(TInterfacedObject,IObjectFilter)
|
||||||
|
private
|
||||||
|
FLeft : IObjectFilter;
|
||||||
|
FRight : IObjectFilter;
|
||||||
|
FConnector : TFilterConnector;
|
||||||
|
protected
|
||||||
|
function Evaluate(const AObject : TObject) : Boolean;
|
||||||
|
public
|
||||||
|
constructor Create(
|
||||||
|
const ALeft, ARight : IObjectFilter;
|
||||||
|
const AConnector : TFilterConnector
|
||||||
|
);
|
||||||
|
end;
|
||||||
|
|
||||||
function CreateCursorOn(
|
function CreateCursorOn(
|
||||||
AInputCursor : IObjectCursor;
|
AInputCursor : IObjectCursor;
|
||||||
AFilter : IObjectFilter
|
AFilter : IObjectFilter
|
||||||
@ -93,6 +109,29 @@ type
|
|||||||
);
|
);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TAggregatedFilter }
|
||||||
|
|
||||||
|
function TAggregatedFilter.Evaluate(const AObject: TObject): Boolean;
|
||||||
|
begin
|
||||||
|
Result := FLeft.Evaluate(AObject);
|
||||||
|
case FConnector of
|
||||||
|
fcAnd : Result := Result and FRight.Evaluate(AObject);
|
||||||
|
fcOr : Result := Result or FRight.Evaluate(AObject);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TAggregatedFilter.Create(
|
||||||
|
const ALeft, ARight: IObjectFilter;
|
||||||
|
const AConnector: TFilterConnector
|
||||||
|
);
|
||||||
|
begin
|
||||||
|
Assert(ALeft <> nil);
|
||||||
|
Assert( ( AConnector = fcNone ) or ( ARight <> nil ));
|
||||||
|
FLeft := ALeft;
|
||||||
|
FRight := ARight;
|
||||||
|
FConnector := AConnector;
|
||||||
|
end;
|
||||||
|
|
||||||
function CreateCursorOn(
|
function CreateCursorOn(
|
||||||
AInputCursor : IObjectCursor;
|
AInputCursor : IObjectCursor;
|
||||||
AFilter : IObjectFilter
|
AFilter : IObjectFilter
|
||||||
|
@ -17,18 +17,13 @@ interface
|
|||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, Contnrs, TypInfo,
|
Classes, SysUtils, Contnrs, TypInfo,
|
||||||
cursor_intf;
|
cursor_intf, wst_types;
|
||||||
|
|
||||||
{$INCLUDE wst.inc}
|
|
||||||
{$INCLUDE wst_delphi.inc}
|
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
ERttiFilterException = class(Exception)
|
ERttiFilterException = class(Exception)
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TFilterConnector = ( fcNone, fcAnd, fcOr );
|
|
||||||
|
|
||||||
TNumericFilterOperator = (
|
TNumericFilterOperator = (
|
||||||
nfoEqual, nfoGreater, nfoLesser, nfoNotEqual,
|
nfoEqual, nfoGreater, nfoLesser, nfoNotEqual,
|
||||||
nfoGreaterOrEqual, nfoLesserOrEqual
|
nfoGreaterOrEqual, nfoLesserOrEqual
|
||||||
|
@ -17,7 +17,7 @@ interface
|
|||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils,
|
Classes, SysUtils,
|
||||||
cursor_intf, base_service_intf;
|
wst_types, cursor_intf, base_service_intf;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user