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

TArrayErrorsStack

Ivan Semenkov edited this page Jan 30, 2021 · 4 revisions

Table of contents

About

TArrayErrorsStack is generic stack over array of T which contains errors codes.

uses
  utils.errorsstack;
  
type
  generic TArrayErrorsStack<T> = class

TOptionalValue

If macro {$USE_OPTIONAL} is defined, then all methods return a TOptional wrapper, otherwise T.

uses
  utils.optional;

type
  TOptionalValue = {$IFDEF FPC}specialize{$ENDIF} TOptional<T>;

For non-existent values, returns a empty TOptionalValue if defined or an EErrorNotExists is thrown.

type
  {$IFNDEF USE_OPTIONAL}
  EErrorNotExists = class(Exception);
  {$ENDIF}

Create

A new array error stack can be created by call its constructor.

constructor Create;
Example
uses
  utils.errorsstack;
  
type
  TErrors = {$IFDEF FPC}specialize{$ENDIF} TArrayErrorsStack<Integer>;

var
  errors : TErrors;
  
begin
  errors := TErrors.Create;

  FreeAndNil(errors);
end;

Push

Push error to stack.

procedure Push (AError : T);
Example
uses
  utils.errorsstack;
  
type
  TErrors = {$IFDEF FPC}specialize{$ENDIF} TArrayErrorsStack<Integer>;

const
  SOMETHING_WRONG = 1;

var
  errors : TErrors;
  
begin
  errors := TErrors.Create;
  errors.Push(SOMETHING_WRONG);

  FreeAndNil(errors);
end;

Pop

Return top error and remove it from stack.

function Pop : {$IFNDEF USE_OPTIONAL}T{$ELSE}TOptionalError{$ENDIF};

If errors stack not contains values then returns empty TOptionalValue or raise EErrorNotExists.

Example
uses
  utils.errorsstack;
  
type
  TErrors = {$IFDEF FPC}specialize{$ENDIF} TArrayErrorsStack<Integer>;

var
  errors : TErrors;
  
begin
  errors := TErrors.Create;
  writeln(errors.Pop);

  FreeAndNil(errors);
end;

Count

Return stack count elements.

function Count : LongInt;
Example
uses
  utils.errorsstack;
  
type
  TErrors = {$IFDEF FPC}specialize{$ENDIF} TArrayErrorsStack<Integer>;

var
  errors : TErrors;
  
begin
  errors := TErrors.Create;
  writeln(errors.Count);

  FreeAndNil(errors);
end;

Iterate

It is possible to iterate for TArrayErrorsStack values using in operator. Each value would present as T.

Example
uses
  utils.errorsstack;
  
type
  TErrors = {$IFDEF FPC}specialize{$ENDIF} TArrayErrorsStack<Integer>;

var
  errors : TErrors;
  value : Integer;
  
begin
  errors := TErrors.Create;
  for value in errors do
    ;

  FreeAndNil(errors);
end;
Clone this wiki locally