-
Notifications
You must be signed in to change notification settings - Fork 7
TAccumulate
Ivan Semenkov edited this page Feb 1, 2021
·
3 revisions
- About
- Create
- Value
-
Default addition functors
- TAdditionByteFunctor
- TAdditionShortIntFunctor
- TAdditionWordFunctor
- TAdditionSmallIntFunctor
- TAdditionIntegerFunctor
- TAdditionDWordFunctor
- TAdditionCardinalFunctor
- TAdditionLongWordFunctor
- TAdditionLongIntFunctor
- TAdditionQWordFunctor
- TAdditionInt64Functor
- TAdditionSingleFunctor
- TAdditionRealFunctor
- TAdditionDoubleFunctor
- TAdditionExtendedFunctor
- TAdditionCurrencyFunctor
- TAdditionStringFunctor
- TAdditionWideStringFunctor
-
Default multiplication functors
- TMultiplicationByteFunctor
- TMultiplicationShortIntFunctor
- TMultiplicationWordFunctor
- TMultiplicationSmallIntFunctor
- TMultiplicationIntegerFunctor
- TMultiplicationDWordFunctor
- TMultiplicationCardinalFunctor
- TMultiplicationLongWordFunctor
- TMultiplicationLongIntFunctor
- TMultiplicationQWordFunctor
- TMultiplicationInt64Functor
- TMultiplicationSingleFunctor
- TMultiplicationRealFunctor
- TMultiplicationDoubleFunctor
- TMultiplicationExtendedFunctor
- TMultiplicationCurrencyFunctor
Accumulate iterable object data using functor.
uses
utils.functional;
type
generic TAccumulate<V; Iterator; Functor> = class
Iterator
is a forward iterator implemented object.
A new accumulate object can be created by call its constructor.
constructor Create (AIterator : Iterator; AInitial : V);
AIterator
is a forward iterator implemented object.
AInitial
is initial accumulate value.
uses
container.list, utils.functor, utils.functional;
type
TIntegerList = {$IFDEF FPC}specialize{$ENDIF} TList<Integer, TCompareFunctorInteger>;
TSumFunctor = class({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Integer, Integer>)
public
function Call(AValue1, AValue2 : Integer) : Integer; override;
begin
Result := AValue1 + AValue2;
end;
end;
TIntegerSumAccumulate = {$IFDEF FPC}specialize{$ENDIF} TAccumulate<Integer,
TIntegerList.TIterator, TSumFunctor>;
var
list : TIntegerList;
accumalate : TIntegerSumAccumulate;
begin
list := TIntegerList.Create;
accumulate := TIntegerSumAccumulate.Create(list.FirstEntry, 0);
FreeAndNil(accumulate);
FreeAndNil(list);
end;
To get value use Value property.
property Value : V;
uses
container.list, utils.functor, utils.functional;
type
TIntegerList = {$IFDEF FPC}specialize{$ENDIF} TList<Integer, TCompareFunctorInteger>;
TSumFunctor = class({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Integer, Integer>)
public
function Call(AValue1, AValue2 : Integer) : Integer; override;
begin
Result := AValue1 + AValue2;
end;
end;
TIntegerSumAccumulate = {$IFDEF FPC}specialize{$ENDIF} TAccumulate<Integer,
TIntegerList.TIterator, TSumFunctor>;
var
list : TIntegerList;
accumalate : TIntegerSumAccumulate;
begin
list := TIntegerList.Create;
accumulate := TIntegerSumAccumulate.Create(list.FirstEntry, 0);
writeln(accumulate.Value);
FreeAndNil(accumulate);
FreeAndNil(list);
end;
There are defined some default addition functors.
uses
utils.functional;
type
TAdditionByteFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Byte, Byte>)
uses
utils.functional;
type
TAdditionByteFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<ShortInt, ShortInt>)
uses
utils.functional;
type
TAdditionWordFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Word, Word>)
uses
utils.functional;
type
TAdditionSmallIntFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<SmallInt, SmallInt>)
uses
utils.functional;
type
TAdditionIntegerFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Integer, Integer>)
This functor available for FreePascal compiler only!
uses
utils.functional;
type
TAdditionDWordFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<DWord, DWord>)
uses
utils.functional;
type
TAdditionCardinalFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Cardinal, Cardinal>)
uses
utils.functional;
type
TAdditionLongWordFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<LongWord, LongWord>)
uses
utils.functional;
type
TAdditionLongIntFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<LongInt, LongInt>)
This functor available for FreePascal compiler only!
uses
utils.functional;
type
TAdditionQWordFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<QWord, QWord>)
uses
utils.functional;
type
TAdditionInt64Functor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Int64, Int64>)
uses
utils.functional;
type
TAdditionSingleFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Single, Single>)
uses
utils.functional;
type
TAdditionRealFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Real, Real>)
uses
utils.functional;
type
TAdditionDoubleFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Double, Double>)
uses
utils.functional;
type
TAdditionExtendedFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Extended, Extended>)
uses
utils.functional;
type
TAdditionCurrencyFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Currency, Currency>)
uses
utils.functional;
type
TAdditionStringFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<String, String>)
uses
utils.functional;
type
TAdditionWideStringFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<WideString, WideString>)
There are defined some default multiplication functors.
uses
utils.functional;
type
TMultiplicationByteFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Byte, Byte>)
uses
utils.functional;
type
TMultiplicationShortIntFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<ShortInt, ShortInt>)
uses
utils.functional;
type
TMultiplicationWordFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Word, Word>)
uses
utils.functional;
type
TMultiplicationSmallIntFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<SmallInt, SmallInt>)
uses
utils.functional;
type
TMultiplicationIntegerFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Integer, Integer>)
This functor available for FreePascal compiler only!
uses
utils.functional;
type
TMultiplicationDWordFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<DWord, DWord>)
uses
utils.functional;
type
TMultiplicationCardinalFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Cardinal, Cardinal>)
uses
utils.functional;
type
TMultiplicationLongWordFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<LongWord, LongWord>)
uses
utils.functional;
type
TMultiplicationLongIntFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<LongInt, LongInt>)
This functor available for FreePascal compiler only!
uses
utils.functional;
type
TMultiplicationQWordFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<QWord, QWord>)
uses
utils.functional;
type
TMultiplicationInt64Functor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Int64, Int64>)
uses
utils.functional;
type
TMultiplicationSingleFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Single, Single>)
uses
utils.functional;
type
TMultiplicationRealFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Real, Real>)
uses
utils.functional;
type
TMultiplicationDoubleFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Double, Double>)
uses
utils.functional;
type
TMultiplicationExtendedFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Extended, Extended>)
uses
utils.functional;
type
TMultiplicationCurrencyFunctor = class
({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Currency, Currency>)