unit uutlExceptions; {$mode objfpc}{$H+} interface uses Classes, SysUtils; type //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// EutlException = class(Exception); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// EutlInvalidOperation = class(Exception); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// EutlOutOfRange = class(EutlException) private fMin: Integer; fMax: Integer; fIndex: Integer; public property Min: Integer read fMin; property Max: Integer read fMax; property Index: Integer read fIndex; constructor Create(const aIndex, aMin, aMax: Integer); constructor Create(const aMsg: String; const aIndex, aMin, aMax: Integer); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// EutlArgument = class(EutlException) private fArgument: String; public property Argument: String read fArgument; constructor Create(const aArgument: String); constructor Create(const aMsg, aArgument: string); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// EutlArgumentNil = class(EutlArgument) public constructor Create(const aArgument: String); constructor Create(const aMsg, aArgument: string); end; implementation //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //EutlOutOfRange//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// constructor EutlOutOfRange.Create(const aIndex, aMin, aMax: Integer); begin Create('', aIndex, aMin, aMax); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// constructor EutlOutOfRange.Create(const aMsg: String; const aIndex, aMin, aMax: Integer); var s: String; begin fIndex := aIndex; fMin := aMin; fMax := aMax; s := Format('index (%d) out of range (%d:%d)', [fIndex, fMin, fMax]); if (aMsg <> '') then s := s + ': ' + aMsg; inherited Create(s); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //EutlArgument////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// constructor EutlArgument.Create(const aArgument: String); begin inherited Create(aArgument + ' is not valid'); fArgument := aArgument; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// constructor EutlArgument.Create(const aMsg, aArgument: string); begin inherited Create(aMsg); fArgument := aArgument; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //EutlArgumentNil/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// constructor EutlArgumentNil.Create(const aArgument: String); begin inherited Create('argument nil: ' + aArgument, aArgument); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// constructor EutlArgumentNil.Create(const aMsg, aArgument: string); begin inherited Create(aMsg, aArgument); end; end.