Skip to content
This repository was archived by the owner on Feb 24, 2025. It is now read-only.

TAccumulate

Ivan Semenkov edited this page Feb 1, 2021 · 3 revisions

Table of contents

About

Accumulate iterable object data using functor.

uses utils.functional; type generic TAccumulate<V; Iterator; Functor> = class

Iterator is a forward iterator implemented object.

Create

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.

Example
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;

Value

To get value use Value property.

property Value : V;
Example
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;

Default addition functors

There are defined some default addition functors.

TAdditionByteFunctor

uses utils.functional; type TAdditionByteFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Byte, Byte>)

TAdditionShortIntFunctor

uses utils.functional; type TAdditionByteFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<ShortInt, ShortInt>)

TAdditionWordFunctor

uses utils.functional; type TAdditionWordFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Word, Word>)

TAdditionSmallIntFunctor

uses utils.functional; type TAdditionSmallIntFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<SmallInt, SmallInt>)

TAdditionIntegerFunctor

uses utils.functional; type TAdditionIntegerFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Integer, Integer>)

TAdditionDWordFunctor

This functor available for FreePascal compiler only!

uses utils.functional; type TAdditionDWordFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<DWord, DWord>)

TAdditionCardinalFunctor

uses utils.functional; type TAdditionCardinalFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Cardinal, Cardinal>)

TAdditionLongWordFunctor

uses utils.functional; type TAdditionLongWordFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<LongWord, LongWord>)

TAdditionLongIntFunctor

uses utils.functional; type TAdditionLongIntFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<LongInt, LongInt>)

TAdditionQWordFunctor

This functor available for FreePascal compiler only!

uses utils.functional; type TAdditionQWordFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<QWord, QWord>)

TAdditionInt64Functor

uses utils.functional; type TAdditionInt64Functor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Int64, Int64>)

TAdditionSingleFunctor

uses utils.functional; type TAdditionSingleFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Single, Single>)

TAdditionRealFunctor

uses utils.functional; type TAdditionRealFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Real, Real>)

TAdditionDoubleFunctor

uses utils.functional; type TAdditionDoubleFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Double, Double>)

TAdditionExtendedFunctor

uses utils.functional; type TAdditionExtendedFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Extended, Extended>)

TAdditionCurrencyFunctor

uses utils.functional; type TAdditionCurrencyFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Currency, Currency>)

TAdditionStringFunctor

uses utils.functional; type TAdditionStringFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<String, String>)

TAdditionWideStringFunctor

uses utils.functional; type TAdditionWideStringFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<WideString, WideString>)

Default multiplication functors

There are defined some default multiplication functors.

TMultiplicationByteFunctor

uses utils.functional; type TMultiplicationByteFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Byte, Byte>)

TMultiplicationShortIntFunctor

uses utils.functional; type TMultiplicationShortIntFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<ShortInt, ShortInt>)

TMultiplicationWordFunctor

uses utils.functional; type TMultiplicationWordFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Word, Word>)

TMultiplicationSmallIntFunctor

uses utils.functional; type TMultiplicationSmallIntFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<SmallInt, SmallInt>)

TMultiplicationIntegerFunctor

uses utils.functional; type TMultiplicationIntegerFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Integer, Integer>)

TMultiplicationDWordFunctor

This functor available for FreePascal compiler only!

uses utils.functional; type TMultiplicationDWordFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<DWord, DWord>)

TMultiplicationCardinalFunctor

uses utils.functional; type TMultiplicationCardinalFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Cardinal, Cardinal>)

TMultiplicationLongWordFunctor

uses utils.functional; type TMultiplicationLongWordFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<LongWord, LongWord>)

TMultiplicationLongIntFunctor

uses utils.functional; type TMultiplicationLongIntFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<LongInt, LongInt>)

TMultiplicationQWordFunctor

This functor available for FreePascal compiler only!

uses utils.functional; type TMultiplicationQWordFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<QWord, QWord>)

TMultiplicationInt64Functor

uses utils.functional; type TMultiplicationInt64Functor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Int64, Int64>)

TMultiplicationSingleFunctor

uses utils.functional; type TMultiplicationSingleFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Single, Single>)

TMultiplicationRealFunctor

uses utils.functional; type TMultiplicationRealFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Real, Real>)

TMultiplicationDoubleFunctor

uses utils.functional; type TMultiplicationDoubleFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Double, Double>)

TMultiplicationExtendedFunctor

uses utils.functional; type TMultiplicationExtendedFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Extended, Extended>)

TMultiplicationCurrencyFunctor

uses utils.functional; type TMultiplicationCurrencyFunctor = class ({$IFDEF FPC}specialize{$ENDIF} TBinaryFunctor<Currency, Currency>)
Clone this wiki locally