Refactoring identifiers
This commit is contained in:
@@ -59,8 +59,8 @@ type
|
||||
// Abstract base class for components that process data of type S and provide data of type T.
|
||||
TMycConverter<S, T> = class abstract(TMycProcessor<S>, IConverter<S, T>)
|
||||
private
|
||||
FSender: TMycContainedDataProvider<T>;
|
||||
function GetSender: IDataProvider<T>;
|
||||
FDataProvider: TMycContainedDataProvider<T>;
|
||||
function GetDataProvider: IDataProvider<T>;
|
||||
protected
|
||||
function ProcessData(const Value: S): TState; override; abstract;
|
||||
// Broadcasts the given data to all linked processors.
|
||||
@@ -68,13 +68,13 @@ type
|
||||
public
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
property Sender: IDataProvider<T> read GetSender;
|
||||
property DataProvider: IDataProvider<T> read GetDataProvider;
|
||||
end;
|
||||
|
||||
// Null object implementation for IConverter.
|
||||
TNullConverter<S, T> = class(TInterfacedObject, IConverter<S, T>)
|
||||
private
|
||||
function GetSender: IDataProvider<T>;
|
||||
function GetDataProvider: IDataProvider<T>;
|
||||
public
|
||||
function ProcessData(const Value: S): TState;
|
||||
end;
|
||||
@@ -234,14 +234,14 @@ type
|
||||
Queue: TQueue<T>;
|
||||
end;
|
||||
|
||||
FSender: TMycContainedDataProvider<TArray<T>>;
|
||||
FDataProvider: TMycContainedDataProvider<TArray<T>>;
|
||||
FLock: TSpinLock;
|
||||
FCount: Integer;
|
||||
function ProcessData(Idx: Integer; const Value: T): TState;
|
||||
public
|
||||
constructor Create(const ADataProviders: TArray<TDataProvider<T>>);
|
||||
destructor Destroy; override;
|
||||
property Sender: TMycContainedDataProvider<TArray<T>> read FSender implements IDataProvider<TArray<T>>;
|
||||
property DataProvider: TMycContainedDataProvider<TArray<T>> read FDataProvider implements IDataProvider<TArray<T>>;
|
||||
end;
|
||||
|
||||
TMycComposedConverter<S, T> = class(TMycProcessor<S>, IConverter<S, T>)
|
||||
@@ -250,7 +250,7 @@ type
|
||||
FDataProvider: TDataProvider<T>;
|
||||
protected
|
||||
function ProcessData(const Value: S): TState; override;
|
||||
function GetSender: IDataProvider<T>;
|
||||
function GetDataProvider: IDataProvider<T>;
|
||||
public
|
||||
constructor Create(const AProcessor: IMycProcessor<S>; const ADataProvider: TDataProvider<T>);
|
||||
end;
|
||||
@@ -352,28 +352,28 @@ end;
|
||||
constructor TMycConverter<S, T>.Create;
|
||||
begin
|
||||
inherited Create;
|
||||
FSender := TMycContainedDataProvider<T>.Create(Self);
|
||||
FDataProvider := TMycContainedDataProvider<T>.Create(Self);
|
||||
end;
|
||||
|
||||
destructor TMycConverter<S, T>.Destroy;
|
||||
begin
|
||||
FSender.Free;
|
||||
FDataProvider.Free;
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
function TMycConverter<S, T>.Broadcast(const Value: T): TState;
|
||||
begin
|
||||
Result := FSender.Broadcast(Value);
|
||||
Result := FDataProvider.Broadcast(Value);
|
||||
end;
|
||||
|
||||
function TMycConverter<S, T>.GetSender: IDataProvider<T>;
|
||||
function TMycConverter<S, T>.GetDataProvider: IDataProvider<T>;
|
||||
begin
|
||||
Result := FSender;
|
||||
Result := FDataProvider;
|
||||
end;
|
||||
|
||||
{ TNullConverter<S, T> }
|
||||
|
||||
function TNullConverter<S, T>.GetSender: IDataProvider<T>;
|
||||
function TNullConverter<S, T>.GetDataProvider: IDataProvider<T>;
|
||||
begin
|
||||
Result := TDataProvider<T>.Null;
|
||||
end;
|
||||
@@ -847,7 +847,7 @@ begin
|
||||
FLock := TSpinLock.Create(false);
|
||||
FCount := Length(FReceivers);
|
||||
|
||||
FSender := TMycContainedDataProvider<TArray<T>>.Create(Self);
|
||||
FDataProvider := TMycContainedDataProvider<TArray<T>>.Create(Self);
|
||||
|
||||
var cFunc :=
|
||||
function(Idx: Integer): TConstFunc<T, TState>
|
||||
@@ -875,7 +875,7 @@ begin
|
||||
Queue.Free;
|
||||
end;
|
||||
|
||||
FSender.Free;
|
||||
FDataProvider.Free;
|
||||
inherited;
|
||||
end;
|
||||
|
||||
@@ -908,7 +908,7 @@ begin
|
||||
end;
|
||||
|
||||
if Arr <> nil then
|
||||
FSender.Broadcast(Arr);
|
||||
FDataProvider.Broadcast(Arr);
|
||||
end;
|
||||
|
||||
constructor TMycGenericAggregator<S, T>.Create(const AFunc: TConstFunc<S, TConverter<S, T>.TBroadcastProc, TState>);
|
||||
@@ -919,7 +919,7 @@ end;
|
||||
|
||||
function TMycGenericAggregator<S, T>.ProcessData(const Value: S): TState;
|
||||
begin
|
||||
Result := FFunc(Value, function(const Value: T): TState begin Result := FSender.Broadcast(Value); end);
|
||||
Result := FFunc(Value, function(const Value: T): TState begin Result := FDataProvider.Broadcast(Value); end);
|
||||
end;
|
||||
|
||||
constructor TMycComposedConverter<S, T>.Create(const AProcessor: IMycProcessor<S>; const ADataProvider: TDataProvider<T>);
|
||||
@@ -929,7 +929,7 @@ begin
|
||||
FDataProvider := ADataProvider;
|
||||
end;
|
||||
|
||||
function TMycComposedConverter<S, T>.GetSender: IDataProvider<T>;
|
||||
function TMycComposedConverter<S, T>.GetDataProvider: IDataProvider<T>;
|
||||
begin
|
||||
Result := FDataProvider;
|
||||
end;
|
||||
|
||||
+25
-23
@@ -22,14 +22,16 @@ type
|
||||
end;
|
||||
|
||||
IConverter<S, T> = interface(IMycProcessor<S>)
|
||||
function GetSender: IDataProvider<T>;
|
||||
property Sender: IDataProvider<T> read GetSender;
|
||||
{$region 'private'}
|
||||
function GetDataProvider: IDataProvider<T>;
|
||||
{$endregion}
|
||||
property DataProvider: IDataProvider<T> read GetDataProvider;
|
||||
end;
|
||||
|
||||
// Interface helper for IDataProvider providing the null object pattern.
|
||||
TDataProvider<T> = record
|
||||
type
|
||||
TLink = record
|
||||
TSubscription = record
|
||||
private
|
||||
FDataProvider: IDataProvider<T>;
|
||||
FTag: TTag;
|
||||
@@ -54,7 +56,7 @@ type
|
||||
class operator Implicit(const A: IDataProvider<T>): TDataProvider<T>; overload;
|
||||
class operator Implicit(const A: TDataProvider<T>): IDataProvider<T>; overload;
|
||||
|
||||
function Link(const Receiver: IMycProcessor<T>): TLink; inline;
|
||||
function Link(const Receiver: IMycProcessor<T>): TSubscription; inline;
|
||||
|
||||
function Chain(const Next: IMycProcessor<T>): IMycProcessor<T>; overload; inline;
|
||||
function Chain<R>(const Next: IConverter<T, R>): TDataProvider<R>; overload; inline;
|
||||
@@ -90,7 +92,7 @@ type
|
||||
class constructor CreateClass;
|
||||
private
|
||||
FConverter: IConverter<S, T>;
|
||||
function GetSender: TDataProvider<T>; inline;
|
||||
function GetDataProvider: TDataProvider<T>; inline;
|
||||
public
|
||||
constructor Create(const AConverter: IConverter<S, T>);
|
||||
|
||||
@@ -103,13 +105,13 @@ type
|
||||
class function CreateGeneric(const Func: TConstFunc<S, T>): TConverter<S, T>; static;
|
||||
class function CreateAggregation(const Func: TConstFunc<S, TBroadcastProc, TState>): TConverter<S, T>; static;
|
||||
|
||||
function Sequence(Count: Integer): IMycDataSequence<T>; overload;
|
||||
function CreateSequence(Count: Integer): IMycDataSequence<T>; overload;
|
||||
function Sequence(const Items: TArray<IConverter<S, T>>): IMycDataSequence<S>; overload;
|
||||
|
||||
// Provides access to the null object instance.
|
||||
class property Null: IConverter<S, T> read FNull;
|
||||
// Wrapper for IConverter.Sender
|
||||
property Sender: TDataProvider<T> read GetSender;
|
||||
// Wrapper for IConverter.DataProvider
|
||||
property DataProvider: TDataProvider<T> read GetDataProvider;
|
||||
end;
|
||||
|
||||
// Factory for creating specific converter instances.
|
||||
@@ -158,6 +160,15 @@ uses
|
||||
|
||||
{ TDataProvider<T> }
|
||||
|
||||
procedure TDataProvider<T>.TSubscription.Unlink;
|
||||
begin
|
||||
if FTag <> nil then
|
||||
begin
|
||||
FDataProvider.Unlink(FTag);
|
||||
FTag := nil;
|
||||
end;
|
||||
end;
|
||||
|
||||
class constructor TDataProvider<T>.CreateClass;
|
||||
begin
|
||||
// Create the singleton null object instance.
|
||||
@@ -180,7 +191,7 @@ end;
|
||||
function TDataProvider<T>.Chain<R>(const Next: IConverter<T, R>): TDataProvider<R>;
|
||||
begin
|
||||
FDataProvider.Link(Next);
|
||||
Result := Next.Sender;
|
||||
Result := Next.DataProvider;
|
||||
end;
|
||||
|
||||
function TDataProvider<T>.Chain<R>(const Func: TConstFunc<T, R>): TDataProvider<R>;
|
||||
@@ -213,7 +224,7 @@ begin
|
||||
Result := A.FDataProvider;
|
||||
end;
|
||||
|
||||
function TDataProvider<T>.Link(const Receiver: IMycProcessor<T>): TLink;
|
||||
function TDataProvider<T>.Link(const Receiver: IMycProcessor<T>): TSubscription;
|
||||
begin
|
||||
Result.FDataProvider := FDataProvider;
|
||||
Result.FTag := FDataProvider.Link(Receiver);
|
||||
@@ -253,15 +264,15 @@ begin
|
||||
Result := TMycGenericConverter<S, T>.Create(Func);
|
||||
end;
|
||||
|
||||
function TConverter<S, T>.GetSender: TDataProvider<T>;
|
||||
function TConverter<S, T>.GetDataProvider: TDataProvider<T>;
|
||||
begin
|
||||
Result := FConverter.Sender;
|
||||
Result := FConverter.DataProvider;
|
||||
end;
|
||||
|
||||
function TConverter<S, T>.Sequence(Count: Integer): IMycDataSequence<T>;
|
||||
function TConverter<S, T>.CreateSequence(Count: Integer): IMycDataSequence<T>;
|
||||
begin
|
||||
Result := TMycSequence<T>.Create(Count);
|
||||
FConverter.Sender.Link(Result);
|
||||
FConverter.DataProvider.Link(Result);
|
||||
end;
|
||||
|
||||
function TConverter<S, T>.Sequence(const Items: TArray<IConverter<S, T>>): IMycDataSequence<S>;
|
||||
@@ -416,13 +427,4 @@ begin
|
||||
RecProvider.Link(Result);
|
||||
end;
|
||||
|
||||
procedure TDataProvider<T>.TLink.Unlink;
|
||||
begin
|
||||
if FTag <> nil then
|
||||
begin
|
||||
FDataProvider.Unlink(FTag);
|
||||
FTag := nil;
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
Reference in New Issue
Block a user