mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-08 15:49:04 +02:00
596 lines
10 KiB
ObjectPascal
596 lines
10 KiB
ObjectPascal
unit uthlp;
|
|
|
|
{$ifdef fpc}
|
|
{$mode delphi}{$H+}
|
|
{$modeswitch typehelpers}
|
|
{$endif}
|
|
|
|
interface
|
|
|
|
type
|
|
TTestEnum = (
|
|
teOne,
|
|
teTwo,
|
|
teThree
|
|
);
|
|
TTestSet = set of TTestEnum;
|
|
TTestArray = array of LongInt;
|
|
MyLongInt = type LongInt;
|
|
|
|
TUInt8Helper = record helper for UInt8
|
|
function Test: LongInt;
|
|
constructor Create(aArg: UInt8);
|
|
end;
|
|
|
|
TUInt16Helper = record helper for UInt16
|
|
function Test: LongInt;
|
|
constructor Create(aArg: UInt16);
|
|
end;
|
|
|
|
TUInt32Helper = record helper for UInt32
|
|
function Test: LongInt;
|
|
constructor Create(aArg: UInt32);
|
|
end;
|
|
|
|
TUInt64Helper = record helper for UInt64
|
|
function Test: LongInt;
|
|
constructor Create(aArg: UInt64);
|
|
end;
|
|
|
|
TInt8Helper = record helper for Int8
|
|
function Test: LongInt;
|
|
constructor Create(aArg: Int8);
|
|
end;
|
|
|
|
TInt16Helper = record helper for Int16
|
|
function Test: LongInt;
|
|
constructor Create(aArg: Int16);
|
|
end;
|
|
|
|
TInt32Helper = record helper for Int32
|
|
function Test: LongInt;
|
|
constructor Create(aArg: Int32);
|
|
end;
|
|
|
|
TInt64Helper = record helper for Int64
|
|
function Test: LongInt;
|
|
constructor Create(aArg: Int64);
|
|
end;
|
|
|
|
TBooleanHelper = record helper for Boolean
|
|
function Test: LongInt;
|
|
constructor Create(aArg: Boolean);
|
|
end;
|
|
|
|
TBoolean16Helper = record helper for Boolean16
|
|
function Test: LongInt;
|
|
constructor Create(aArg: Boolean16);
|
|
end;
|
|
|
|
TBoolean32Helper = record helper for Boolean32
|
|
function Test: LongInt;
|
|
constructor Create(aArg: Boolean32);
|
|
end;
|
|
|
|
TBoolean64Helper = record helper for Boolean64
|
|
function Test: LongInt;
|
|
constructor Create(aArg: Boolean64);
|
|
end;
|
|
|
|
TByteBoolHelper = record helper for ByteBool
|
|
function Test: LongInt;
|
|
constructor Create(aArg: ByteBool);
|
|
end;
|
|
|
|
TWordBoolHelper = record helper for WordBool
|
|
function Test: LongInt;
|
|
constructor Create(aArg: WordBool);
|
|
end;
|
|
|
|
TLongBoolHelper = record helper for LongBool
|
|
function Test: LongInt;
|
|
constructor Create(aArg: LongBool);
|
|
end;
|
|
|
|
TQWordBoolHelper = record helper for QWordBool
|
|
function Test: LongInt;
|
|
constructor Create(aArg: QWordBool);
|
|
end;
|
|
|
|
TShortStringHelper = record helper for ShortString
|
|
function Test: LongInt;
|
|
class function TestClass: LongInt; static;
|
|
constructor Create(aArg: ShortString);
|
|
end;
|
|
|
|
TAnsiStringHelper = record helper for AnsiString
|
|
function Test: LongInt;
|
|
class function TestClass: LongInt; static;
|
|
constructor Create(aArg: AnsiString);
|
|
end;
|
|
|
|
TWideStringHelper = record helper for WideString
|
|
function Test: LongInt;
|
|
class function TestClass: LongInt; static;
|
|
constructor Create(aArg: WideString);
|
|
end;
|
|
|
|
TUnicodeStringHelper = record helper for UnicodeString
|
|
function Test: LongInt;
|
|
class function TestClass: LongInt; static;
|
|
constructor Create(aArg: UnicodeString);
|
|
end;
|
|
|
|
TAnsiCharHelper = record helper for AnsiChar
|
|
function Test: LongInt;
|
|
constructor Create(aArg: AnsiChar);
|
|
end;
|
|
|
|
TWideCharHelper = record helper for WideChar
|
|
function Test: LongInt;
|
|
constructor Create(aArg: WideChar);
|
|
end;
|
|
|
|
TPointerHelper = record helper for Pointer
|
|
function Test: LongInt;
|
|
constructor Create(aArg: Pointer);
|
|
end;
|
|
|
|
TPLongIntHelper = record helper for PLongInt
|
|
function Test: LongInt;
|
|
constructor Create(aArg: PLongInt);
|
|
end;
|
|
|
|
TMyLongIntHelper = record helper for MyLongInt
|
|
function Test: LongInt;
|
|
constructor Create(aArg: MyLongInt);
|
|
end;
|
|
|
|
TTestEnumHelper = record helper for TTestEnum
|
|
function Test: LongInt;
|
|
constructor Create(aArg: TTestEnum);
|
|
end;
|
|
|
|
TTestSetHelper = record helper for TTestSet
|
|
function Test: LongInt;
|
|
constructor Create(aArg: TTestSet);
|
|
end;
|
|
|
|
TTestArrayHelper = record helper for TTestArray
|
|
function Test: LongInt;
|
|
constructor Create(aArg: TTestArray);
|
|
end;
|
|
|
|
TVariantHelper = record helper for Variant
|
|
function Test: LongInt;
|
|
constructor Create(aArg: Variant);
|
|
end;
|
|
|
|
TSingleHelper = record helper for Single
|
|
function Test: LongInt;
|
|
constructor Create(aArg: Single);
|
|
end;
|
|
|
|
TDoubleHelper = record helper for Double
|
|
function Test: LongInt;
|
|
constructor Create(aArg: Double);
|
|
end;
|
|
|
|
{$if sizeof(extended) <> sizeof(double)}
|
|
TExtendedHelper = record helper for Extended
|
|
function Test: LongInt;
|
|
constructor Create(aArg: Extended);
|
|
end;
|
|
{$endif}
|
|
|
|
implementation
|
|
|
|
{$if sizeof(extended) <> sizeof(double)}
|
|
{ TExtendedHelper }
|
|
|
|
function TExtendedHelper.Test: LongInt;
|
|
begin
|
|
Result := SizeOf(Self);
|
|
end;
|
|
|
|
constructor TExtendedHelper.Create(aArg: Extended);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
{$endif}
|
|
|
|
{ TDoubleHelper }
|
|
|
|
function TDoubleHelper.Test: LongInt;
|
|
begin
|
|
Result := SizeOf(Self);
|
|
end;
|
|
|
|
constructor TDoubleHelper.Create(aArg: Double);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TSingleHelper }
|
|
|
|
function TSingleHelper.Test: LongInt;
|
|
begin
|
|
Result := SizeOf(Self);
|
|
end;
|
|
|
|
constructor TSingleHelper.Create(aArg: Single);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TVariantHelper }
|
|
|
|
function TVariantHelper.Test: LongInt;
|
|
begin
|
|
Result := 3;
|
|
end;
|
|
|
|
constructor TVariantHelper.Create(aArg: Variant);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TTestArrayHelper }
|
|
|
|
function TTestArrayHelper.Test: LongInt;
|
|
begin
|
|
Result := Length(Self);
|
|
end;
|
|
|
|
constructor TTestArrayHelper.Create(aArg: TTestArray);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TTestSetHelper }
|
|
|
|
function TTestSetHelper.Test: LongInt;
|
|
begin
|
|
Result := 2;
|
|
end;
|
|
|
|
constructor TTestSetHelper.Create(aArg: TTestSet);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TTestEnumHelper }
|
|
|
|
function TTestEnumHelper.Test: LongInt;
|
|
begin
|
|
Result := 1;
|
|
end;
|
|
|
|
constructor TTestEnumHelper.Create(aArg: TTestEnum);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TMyLongIntHelper }
|
|
|
|
function TMyLongIntHelper.Test: LongInt;
|
|
begin
|
|
Result := 42;
|
|
end;
|
|
|
|
constructor TMyLongIntHelper.Create(aArg: MyLongInt);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TPLongIntHelper }
|
|
|
|
function TPLongIntHelper.Test: LongInt;
|
|
begin
|
|
Result := 4;
|
|
end;
|
|
|
|
constructor TPLongIntHelper.Create(aArg: PLongInt);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TPointerHelper }
|
|
|
|
function TPointerHelper.Test: LongInt;
|
|
begin
|
|
Result := 1;
|
|
end;
|
|
|
|
constructor TPointerHelper.Create(aArg: Pointer);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TWideCharHelper }
|
|
|
|
function TWideCharHelper.Test: LongInt;
|
|
begin
|
|
Result := - 2;
|
|
end;
|
|
|
|
constructor TWideCharHelper.Create(aArg: WideChar);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TAnsiCharHelper }
|
|
|
|
function TAnsiCharHelper.Test: LongInt;
|
|
begin
|
|
Result := - 1;
|
|
end;
|
|
|
|
constructor TAnsiCharHelper.Create(aArg: AnsiChar);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TUnicodeStringHelper }
|
|
|
|
function TUnicodeStringHelper.Test: LongInt;
|
|
begin
|
|
Result := 4;
|
|
end;
|
|
|
|
class function TUnicodeStringHelper.TestClass: LongInt;
|
|
begin
|
|
Result := 4;
|
|
end;
|
|
|
|
constructor TUnicodeStringHelper.Create(aArg: UnicodeString);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TWideStringHelper }
|
|
|
|
function TWideStringHelper.Test: LongInt;
|
|
begin
|
|
Result := 3;
|
|
end;
|
|
|
|
class function TWideStringHelper.TestClass: LongInt;
|
|
begin
|
|
Result := 3;
|
|
end;
|
|
|
|
constructor TWideStringHelper.Create(aArg: WideString);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TAnsiStringHelper }
|
|
|
|
function TAnsiStringHelper.Test: LongInt;
|
|
begin
|
|
Result := 2;
|
|
end;
|
|
|
|
class function TAnsiStringHelper.TestClass: LongInt;
|
|
begin
|
|
Result := 2;
|
|
end;
|
|
|
|
constructor TAnsiStringHelper.Create(aArg: AnsiString);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TShortStringHelper }
|
|
|
|
function TShortStringHelper.Test: LongInt;
|
|
begin
|
|
Result := 1;
|
|
end;
|
|
|
|
class function TShortStringHelper.TestClass: LongInt;
|
|
begin
|
|
Result := 1;
|
|
end;
|
|
|
|
constructor TShortStringHelper.Create(aArg: ShortString);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TQWordBoolHelper }
|
|
|
|
function TQWordBoolHelper.Test: LongInt;
|
|
begin
|
|
Result := - SizeOf(Self);
|
|
end;
|
|
|
|
constructor TQWordBoolHelper.Create(aArg: QWordBool);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TLongBoolHelper }
|
|
|
|
function TLongBoolHelper.Test: LongInt;
|
|
begin
|
|
Result := - SizeOf(Self);
|
|
end;
|
|
|
|
constructor TLongBoolHelper.Create(aArg: LongBool);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TWordBoolHelper }
|
|
|
|
function TWordBoolHelper.Test: LongInt;
|
|
begin
|
|
Result := - SizeOf(Self);
|
|
end;
|
|
|
|
constructor TWordBoolHelper.Create(aArg: WordBool);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TByteBoolHelper }
|
|
|
|
function TByteBoolHelper.Test: LongInt;
|
|
begin
|
|
Result := - SizeOf(Self);
|
|
end;
|
|
|
|
constructor TByteBoolHelper.Create(aArg: ByteBool);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TBoolean64Helper }
|
|
|
|
function TBoolean64Helper.Test: LongInt;
|
|
begin
|
|
Result := SizeOf(Self);
|
|
end;
|
|
|
|
constructor TBoolean64Helper.Create(aArg: Boolean64);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TBoolean32Helper }
|
|
|
|
function TBoolean32Helper.Test: LongInt;
|
|
begin
|
|
Result := SizeOf(Self);
|
|
end;
|
|
|
|
constructor TBoolean32Helper.Create(aArg: Boolean32);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TBoolean16Helper }
|
|
|
|
function TBoolean16Helper.Test: LongInt;
|
|
begin
|
|
Result := SizeOf(Self);
|
|
end;
|
|
|
|
constructor TBoolean16Helper.Create(aArg: Boolean16);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TBooleanHelper }
|
|
|
|
function TBooleanHelper.Test: LongInt;
|
|
begin
|
|
Result := SizeOf(Self);
|
|
end;
|
|
|
|
constructor TBooleanHelper.Create(aArg: Boolean);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TInt64Helper }
|
|
|
|
function TInt64Helper.Test: LongInt;
|
|
begin
|
|
Result := - SizeOf(Self);
|
|
end;
|
|
|
|
constructor TInt64Helper.Create(aArg: Int64);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TInt32Helper }
|
|
|
|
function TInt32Helper.Test: LongInt;
|
|
begin
|
|
Result := - SizeOf(Self);
|
|
end;
|
|
|
|
constructor TInt32Helper.Create(aArg: Int32);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TInt16Helper }
|
|
|
|
function TInt16Helper.Test: LongInt;
|
|
begin
|
|
Result := - SizeOf(Self);
|
|
end;
|
|
|
|
constructor TInt16Helper.Create(aArg: Int16);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TInt8Helper }
|
|
|
|
function TInt8Helper.Test: LongInt;
|
|
begin
|
|
Result := - SizeOf(Self);
|
|
end;
|
|
|
|
constructor TInt8Helper.Create(aArg: Int8);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TUInt64Helper }
|
|
|
|
function TUInt64Helper.Test: LongInt;
|
|
begin
|
|
Result := SizeOf(Self);
|
|
end;
|
|
|
|
constructor TUInt64Helper.Create(aArg: UInt64);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TUInt32Helper }
|
|
|
|
function TUInt32Helper.Test: LongInt;
|
|
begin
|
|
Result := SizeOf(Self);
|
|
end;
|
|
|
|
constructor TUInt32Helper.Create(aArg: UInt32);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TUInt16Helper }
|
|
|
|
function TUInt16Helper.Test: LongInt;
|
|
begin
|
|
Result := SizeOf(Self);
|
|
end;
|
|
|
|
constructor TUInt16Helper.Create(aArg: UInt16);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
{ TUInt8Helper }
|
|
|
|
function TUInt8Helper.Test: LongInt;
|
|
begin
|
|
Result := SizeOf(Self);
|
|
end;
|
|
|
|
constructor TUInt8Helper.Create(aArg: UInt8);
|
|
begin
|
|
Self := aArg;
|
|
end;
|
|
|
|
end.
|
|
|