|
@@ -216,11 +216,11 @@ type
|
|
PPEqualityComparerVMT = ^PEqualityComparerVMT;
|
|
PPEqualityComparerVMT = ^PEqualityComparerVMT;
|
|
PEqualityComparerVMT = ^TEqualityComparerVMT;
|
|
PEqualityComparerVMT = ^TEqualityComparerVMT;
|
|
TEqualityComparerVMT = packed record
|
|
TEqualityComparerVMT = packed record
|
|
- QueryInterface: Pointer;
|
|
|
|
- _AddRef: Pointer;
|
|
|
|
- _Release: Pointer;
|
|
|
|
- Equals: Pointer;
|
|
|
|
- GetHashCode: Pointer;
|
|
|
|
|
|
+ QueryInterface: CodePointer;
|
|
|
|
+ _AddRef: CodePointer;
|
|
|
|
+ _Release: CodePointer;
|
|
|
|
+ Equals: CodePointer;
|
|
|
|
+ GetHashCode: CodePointer;
|
|
__Reserved: Pointer; // initially or TExtendedEqualityComparerVMT compatibility
|
|
__Reserved: Pointer; // initially or TExtendedEqualityComparerVMT compatibility
|
|
// (important when ExtendedEqualityComparer is calling Binary method)
|
|
// (important when ExtendedEqualityComparer is calling Binary method)
|
|
__ClassRef: THashFactoryClass; // hidden field in VMT. For class ref THashFactoryClass
|
|
__ClassRef: THashFactoryClass; // hidden field in VMT. For class ref THashFactoryClass
|
|
@@ -274,12 +274,12 @@ type
|
|
PPExtendedEqualityComparerVMT = ^PExtendedEqualityComparerVMT;
|
|
PPExtendedEqualityComparerVMT = ^PExtendedEqualityComparerVMT;
|
|
PExtendedEqualityComparerVMT = ^TExtendedEqualityComparerVMT;
|
|
PExtendedEqualityComparerVMT = ^TExtendedEqualityComparerVMT;
|
|
TExtendedEqualityComparerVMT = packed record
|
|
TExtendedEqualityComparerVMT = packed record
|
|
- QueryInterface: Pointer;
|
|
|
|
- _AddRef: Pointer;
|
|
|
|
- _Release: Pointer;
|
|
|
|
- Equals: Pointer;
|
|
|
|
- GetHashCode: Pointer;
|
|
|
|
- GetHashList: Pointer;
|
|
|
|
|
|
+ QueryInterface: CodePointer;
|
|
|
|
+ _AddRef: CodePointer;
|
|
|
|
+ _Release: CodePointer;
|
|
|
|
+ Equals: CodePointer;
|
|
|
|
+ GetHashCode: CodePointer;
|
|
|
|
+ GetHashList: CodePointer;
|
|
__ClassRef: TExtendedHashFactoryClass; // hidden field in VMT. For class ref THashFactoryClass
|
|
__ClassRef: TExtendedHashFactoryClass; // hidden field in VMT. For class ref THashFactoryClass
|
|
end;
|
|
end;
|
|
private
|
|
private
|
|
@@ -338,18 +338,20 @@ type
|
|
|
|
|
|
PInstance = ^TInstance;
|
|
PInstance = ^TInstance;
|
|
TInstance = record
|
|
TInstance = record
|
|
- Selector: Boolean;
|
|
|
|
- Instance: Pointer;
|
|
|
|
-
|
|
|
|
class function Create(ASelector: Boolean; AInstance: Pointer): TComparerService.TInstance; static;
|
|
class function Create(ASelector: Boolean; AInstance: Pointer): TComparerService.TInstance; static;
|
|
|
|
+ class function CreateSelector(ASelectorInstance: CodePointer): TComparerService.TInstance; static;
|
|
|
|
+
|
|
|
|
+ case Selector: Boolean of
|
|
|
|
+ false: (Instance: Pointer);
|
|
|
|
+ true: (SelectorInstance: CodePointer);
|
|
end;
|
|
end;
|
|
|
|
|
|
PComparerVMT = ^TComparerVMT;
|
|
PComparerVMT = ^TComparerVMT;
|
|
TComparerVMT = packed record
|
|
TComparerVMT = packed record
|
|
- QueryInterface: Pointer;
|
|
|
|
- _AddRef: Pointer;
|
|
|
|
- _Release: Pointer;
|
|
|
|
- Compare: Pointer;
|
|
|
|
|
|
+ QueryInterface: CodePointer;
|
|
|
|
+ _AddRef: CodePointer;
|
|
|
|
+ _Release: CodePointer;
|
|
|
|
+ Compare: CodePointer;
|
|
end;
|
|
end;
|
|
|
|
|
|
TSelectFunc = function(ATypeData: PTypeData; ASize: SizeInt): Pointer;
|
|
TSelectFunc = function(ATypeData: PTypeData; ASize: SizeInt): Pointer;
|
|
@@ -431,21 +433,21 @@ type
|
|
ComparerInstances: array[TTypeKind] of TInstance =
|
|
ComparerInstances: array[TTypeKind] of TInstance =
|
|
(
|
|
(
|
|
// tkUnknown
|
|
// tkUnknown
|
|
- (Selector: True; Instance: @TComparerService.SelectBinaryComparer),
|
|
|
|
|
|
+ (Selector: True; SelectorInstance: @TComparerService.SelectBinaryComparer),
|
|
// tkInteger
|
|
// tkInteger
|
|
- (Selector: True; Instance: @TComparerService.SelectIntegerComparer),
|
|
|
|
|
|
+ (Selector: True; SelectorInstance: @TComparerService.SelectIntegerComparer),
|
|
// tkChar
|
|
// tkChar
|
|
(Selector: False; Instance: @Comparer_UInt8_Instance),
|
|
(Selector: False; Instance: @Comparer_UInt8_Instance),
|
|
// tkEnumeration
|
|
// tkEnumeration
|
|
- (Selector: True; Instance: @TComparerService.SelectIntegerComparer),
|
|
|
|
|
|
+ (Selector: True; SelectorInstance: @TComparerService.SelectIntegerComparer),
|
|
// tkFloat
|
|
// tkFloat
|
|
- (Selector: True; Instance: @TComparerService.SelectFloatComparer),
|
|
|
|
|
|
+ (Selector: True; SelectorInstance: @TComparerService.SelectFloatComparer),
|
|
// tkSet
|
|
// tkSet
|
|
- (Selector: True; Instance: @TComparerService.SelectBinaryComparer),
|
|
|
|
|
|
+ (Selector: True; SelectorInstance: @TComparerService.SelectBinaryComparer),
|
|
// tkMethod
|
|
// tkMethod
|
|
(Selector: False; Instance: @Comparer_Method_Instance),
|
|
(Selector: False; Instance: @Comparer_Method_Instance),
|
|
// tkSString
|
|
// tkSString
|
|
- (Selector: True; Instance: @TComparerService.SelectShortStringComparer),
|
|
|
|
|
|
+ (Selector: True; SelectorInstance: @TComparerService.SelectShortStringComparer),
|
|
// tkLString - only internal use / deprecated in compiler
|
|
// tkLString - only internal use / deprecated in compiler
|
|
(Selector: False; Instance: @Comparer_AnsiString_Instance), // <- unsure
|
|
(Selector: False; Instance: @Comparer_AnsiString_Instance), // <- unsure
|
|
// tkAString
|
|
// tkAString
|
|
@@ -455,25 +457,25 @@ type
|
|
// tkVariant
|
|
// tkVariant
|
|
(Selector: False; Instance: @Comparer_Variant_Instance),
|
|
(Selector: False; Instance: @Comparer_Variant_Instance),
|
|
// tkArray
|
|
// tkArray
|
|
- (Selector: True; Instance: @TComparerService.SelectBinaryComparer),
|
|
|
|
|
|
+ (Selector: True; SelectorInstance: @TComparerService.SelectBinaryComparer),
|
|
// tkRecord
|
|
// tkRecord
|
|
- (Selector: True; Instance: @TComparerService.SelectBinaryComparer),
|
|
|
|
|
|
+ (Selector: True; SelectorInstance: @TComparerService.SelectBinaryComparer),
|
|
// tkInterface
|
|
// tkInterface
|
|
(Selector: False; Instance: @Comparer_Pointer_Instance),
|
|
(Selector: False; Instance: @Comparer_Pointer_Instance),
|
|
// tkClass
|
|
// tkClass
|
|
(Selector: False; Instance: @Comparer_Pointer_Instance),
|
|
(Selector: False; Instance: @Comparer_Pointer_Instance),
|
|
// tkObject
|
|
// tkObject
|
|
- (Selector: True; Instance: @TComparerService.SelectBinaryComparer),
|
|
|
|
|
|
+ (Selector: True; SelectorInstance: @TComparerService.SelectBinaryComparer),
|
|
// tkWChar
|
|
// tkWChar
|
|
(Selector: False; Instance: @Comparer_UInt16_Instance),
|
|
(Selector: False; Instance: @Comparer_UInt16_Instance),
|
|
// tkBool
|
|
// tkBool
|
|
- (Selector: True; Instance: @TComparerService.SelectIntegerComparer),
|
|
|
|
|
|
+ (Selector: True; SelectorInstance: @TComparerService.SelectIntegerComparer),
|
|
// tkInt64
|
|
// tkInt64
|
|
(Selector: False; Instance: @Comparer_Int64_Instance),
|
|
(Selector: False; Instance: @Comparer_Int64_Instance),
|
|
// tkQWord
|
|
// tkQWord
|
|
(Selector: False; Instance: @Comparer_UInt64_Instance),
|
|
(Selector: False; Instance: @Comparer_UInt64_Instance),
|
|
// tkDynArray
|
|
// tkDynArray
|
|
- (Selector: True; Instance: @TComparerService.SelectDynArrayComparer),
|
|
|
|
|
|
+ (Selector: True; SelectorInstance: @TComparerService.SelectDynArrayComparer),
|
|
// tkInterfaceRaw
|
|
// tkInterfaceRaw
|
|
(Selector: False; Instance: @Comparer_Pointer_Instance),
|
|
(Selector: False; Instance: @Comparer_Pointer_Instance),
|
|
// tkProcVar
|
|
// tkProcVar
|
|
@@ -485,7 +487,7 @@ type
|
|
// tkHelper
|
|
// tkHelper
|
|
(Selector: False; Instance: @Comparer_Pointer_Instance),
|
|
(Selector: False; Instance: @Comparer_Pointer_Instance),
|
|
// tkFile
|
|
// tkFile
|
|
- (Selector: True; Instance: @TComparerService.SelectBinaryComparer), // <- unsure what type?
|
|
|
|
|
|
+ (Selector: True; SelectorInstance: @TComparerService.SelectBinaryComparer), // <- unsure what type?
|
|
// tkClassRef
|
|
// tkClassRef
|
|
(Selector: False; Instance: @Comparer_Pointer_Instance),
|
|
(Selector: False; Instance: @Comparer_Pointer_Instance),
|
|
// tkPointer
|
|
// tkPointer
|
|
@@ -2146,6 +2148,12 @@ begin
|
|
Result.Instance := AInstance;
|
|
Result.Instance := AInstance;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+class function TComparerService.TInstance.CreateSelector(ASelectorInstance: CodePointer): TComparerService.TInstance;
|
|
|
|
+begin
|
|
|
|
+ Result.Selector := True;
|
|
|
|
+ Result.SelectorInstance := ASelectorInstance;
|
|
|
|
+end;
|
|
|
|
+
|
|
{ THashService }
|
|
{ THashService }
|
|
|
|
|
|
class function THashService<T>.SelectIntegerEqualityComparer(ATypeData: PTypeData; ASize: SizeInt): Pointer;
|
|
class function THashService<T>.SelectIntegerEqualityComparer(ATypeData: PTypeData; ASize: SizeInt): Pointer;
|
|
@@ -2236,7 +2244,7 @@ begin
|
|
Result := LInstance.Instance;
|
|
Result := LInstance.Instance;
|
|
if LInstance.Selector then
|
|
if LInstance.Selector then
|
|
begin
|
|
begin
|
|
- TMethod(LSelectMethod).Code := Result;
|
|
|
|
|
|
+ TMethod(LSelectMethod).Code := LInstance.SelectorInstance;
|
|
TMethod(LSelectMethod).Data := Self;
|
|
TMethod(LSelectMethod).Data := Self;
|
|
Result := LSelectMethod(GetTypeData(ATypeInfo), ASize);
|
|
Result := LSelectMethod(GetTypeData(ATypeInfo), ASize);
|
|
end;
|
|
end;
|
|
@@ -2328,34 +2336,34 @@ begin
|
|
FEqualityComparer_Pointer_Instance := @FEqualityComparer_Pointer_VMT ;
|
|
FEqualityComparer_Pointer_Instance := @FEqualityComparer_Pointer_VMT ;
|
|
|
|
|
|
//////
|
|
//////
|
|
- FEqualityComparerInstances[tkUnknown] := TInstance.Create(True, TMethod(TSelectMethod(THashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
|
|
- FEqualityComparerInstances[tkInteger] := TInstance.Create(True, TMethod(TSelectMethod(THashService<T>.SelectIntegerEqualityComparer)).Code);
|
|
|
|
|
|
+ FEqualityComparerInstances[tkUnknown] := TInstance.CreateSelector(TMethod(TSelectMethod(THashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
|
|
+ FEqualityComparerInstances[tkInteger] := TInstance.CreateSelector(TMethod(TSelectMethod(THashService<T>.SelectIntegerEqualityComparer)).Code);
|
|
FEqualityComparerInstances[tkChar] := TInstance.Create(False, @FEqualityComparer_UInt8_Instance);
|
|
FEqualityComparerInstances[tkChar] := TInstance.Create(False, @FEqualityComparer_UInt8_Instance);
|
|
- FEqualityComparerInstances[tkEnumeration] := TInstance.Create(True, TMethod(TSelectMethod(THashService<T>.SelectIntegerEqualityComparer)).Code);
|
|
|
|
- FEqualityComparerInstances[tkFloat] := TInstance.Create(True, TMethod(TSelectMethod(THashService<T>.SelectFloatEqualityComparer)).Code);
|
|
|
|
- FEqualityComparerInstances[tkSet] := TInstance.Create(True, TMethod(TSelectMethod(THashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
|
|
|
|
+ FEqualityComparerInstances[tkEnumeration] := TInstance.CreateSelector(TMethod(TSelectMethod(THashService<T>.SelectIntegerEqualityComparer)).Code);
|
|
|
|
+ FEqualityComparerInstances[tkFloat] := TInstance.CreateSelector(TMethod(TSelectMethod(THashService<T>.SelectFloatEqualityComparer)).Code);
|
|
|
|
+ FEqualityComparerInstances[tkSet] := TInstance.CreateSelector(TMethod(TSelectMethod(THashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
FEqualityComparerInstances[tkMethod] := TInstance.Create(False, @FEqualityComparer_Method_Instance);
|
|
FEqualityComparerInstances[tkMethod] := TInstance.Create(False, @FEqualityComparer_Method_Instance);
|
|
- FEqualityComparerInstances[tkSString] := TInstance.Create(True, TMethod(TSelectMethod(THashService<T>.SelectShortStringEqualityComparer)).Code);
|
|
|
|
|
|
+ FEqualityComparerInstances[tkSString] := TInstance.CreateSelector(TMethod(TSelectMethod(THashService<T>.SelectShortStringEqualityComparer)).Code);
|
|
FEqualityComparerInstances[tkLString] := TInstance.Create(False, @FEqualityComparer_AnsiString_Instance);
|
|
FEqualityComparerInstances[tkLString] := TInstance.Create(False, @FEqualityComparer_AnsiString_Instance);
|
|
FEqualityComparerInstances[tkAString] := TInstance.Create(False, @FEqualityComparer_AnsiString_Instance);
|
|
FEqualityComparerInstances[tkAString] := TInstance.Create(False, @FEqualityComparer_AnsiString_Instance);
|
|
FEqualityComparerInstances[tkWString] := TInstance.Create(False, @FEqualityComparer_WideString_Instance);
|
|
FEqualityComparerInstances[tkWString] := TInstance.Create(False, @FEqualityComparer_WideString_Instance);
|
|
FEqualityComparerInstances[tkVariant] := TInstance.Create(False, @FEqualityComparer_Variant_Instance);
|
|
FEqualityComparerInstances[tkVariant] := TInstance.Create(False, @FEqualityComparer_Variant_Instance);
|
|
- FEqualityComparerInstances[tkArray] := TInstance.Create(True, TMethod(TSelectMethod(THashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
|
|
- FEqualityComparerInstances[tkRecord] := TInstance.Create(True, TMethod(TSelectMethod(THashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
|
|
|
|
+ FEqualityComparerInstances[tkArray] := TInstance.CreateSelector(TMethod(TSelectMethod(THashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
|
|
+ FEqualityComparerInstances[tkRecord] := TInstance.CreateSelector(TMethod(TSelectMethod(THashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
FEqualityComparerInstances[tkInterface] := TInstance.Create(False, @FEqualityComparer_Pointer_Instance);
|
|
FEqualityComparerInstances[tkInterface] := TInstance.Create(False, @FEqualityComparer_Pointer_Instance);
|
|
FEqualityComparerInstances[tkClass] := TInstance.Create(False, @FEqualityComparer_Pointer_Instance);
|
|
FEqualityComparerInstances[tkClass] := TInstance.Create(False, @FEqualityComparer_Pointer_Instance);
|
|
- FEqualityComparerInstances[tkObject] := TInstance.Create(True, TMethod(TSelectMethod(THashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
|
|
|
|
+ FEqualityComparerInstances[tkObject] := TInstance.CreateSelector(TMethod(TSelectMethod(THashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
FEqualityComparerInstances[tkWChar] := TInstance.Create(False, @FEqualityComparer_UInt16_Instance);
|
|
FEqualityComparerInstances[tkWChar] := TInstance.Create(False, @FEqualityComparer_UInt16_Instance);
|
|
- FEqualityComparerInstances[tkBool] := TInstance.Create(True, TMethod(TSelectMethod(THashService<T>.SelectIntegerEqualityComparer)).Code);
|
|
|
|
|
|
+ FEqualityComparerInstances[tkBool] := TInstance.CreateSelector(TMethod(TSelectMethod(THashService<T>.SelectIntegerEqualityComparer)).Code);
|
|
FEqualityComparerInstances[tkInt64] := TInstance.Create(False, @FEqualityComparer_Int64_Instance);
|
|
FEqualityComparerInstances[tkInt64] := TInstance.Create(False, @FEqualityComparer_Int64_Instance);
|
|
FEqualityComparerInstances[tkQWord] := TInstance.Create(False, @FEqualityComparer_UInt64_Instance);
|
|
FEqualityComparerInstances[tkQWord] := TInstance.Create(False, @FEqualityComparer_UInt64_Instance);
|
|
- FEqualityComparerInstances[tkDynArray] := TInstance.Create(True, TMethod(TSelectMethod(THashService<T>.SelectDynArrayEqualityComparer)).Code);
|
|
|
|
|
|
+ FEqualityComparerInstances[tkDynArray] := TInstance.CreateSelector(TMethod(TSelectMethod(THashService<T>.SelectDynArrayEqualityComparer)).Code);
|
|
FEqualityComparerInstances[tkInterfaceRaw] := TInstance.Create(False, @FEqualityComparer_Pointer_Instance);
|
|
FEqualityComparerInstances[tkInterfaceRaw] := TInstance.Create(False, @FEqualityComparer_Pointer_Instance);
|
|
FEqualityComparerInstances[tkProcVar] := TInstance.Create(False, @FEqualityComparer_Pointer_Instance);
|
|
FEqualityComparerInstances[tkProcVar] := TInstance.Create(False, @FEqualityComparer_Pointer_Instance);
|
|
FEqualityComparerInstances[tkUString] := TInstance.Create(False, @FEqualityComparer_UnicodeString_Instance);
|
|
FEqualityComparerInstances[tkUString] := TInstance.Create(False, @FEqualityComparer_UnicodeString_Instance);
|
|
FEqualityComparerInstances[tkUChar] := TInstance.Create(False, @FEqualityComparer_UInt16_Instance);
|
|
FEqualityComparerInstances[tkUChar] := TInstance.Create(False, @FEqualityComparer_UInt16_Instance);
|
|
FEqualityComparerInstances[tkHelper] := TInstance.Create(False, @FEqualityComparer_Pointer_Instance);
|
|
FEqualityComparerInstances[tkHelper] := TInstance.Create(False, @FEqualityComparer_Pointer_Instance);
|
|
- FEqualityComparerInstances[tkFile] := TInstance.Create(True, TMethod(TSelectMethod(THashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
|
|
|
|
+ FEqualityComparerInstances[tkFile] := TInstance.CreateSelector(TMethod(TSelectMethod(THashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
FEqualityComparerInstances[tkClassRef] := TInstance.Create(False, @FEqualityComparer_Pointer_Instance);
|
|
FEqualityComparerInstances[tkClassRef] := TInstance.Create(False, @FEqualityComparer_Pointer_Instance);
|
|
FEqualityComparerInstances[tkPointer] := TInstance.Create(False, @FEqualityComparer_Pointer_Instance)
|
|
FEqualityComparerInstances[tkPointer] := TInstance.Create(False, @FEqualityComparer_Pointer_Instance)
|
|
end;
|
|
end;
|
|
@@ -2449,7 +2457,7 @@ begin
|
|
Result := LInstance.Instance;
|
|
Result := LInstance.Instance;
|
|
if LInstance.Selector then
|
|
if LInstance.Selector then
|
|
begin
|
|
begin
|
|
- TMethod(LSelectMethod).Code := Result;
|
|
|
|
|
|
+ TMethod(LSelectMethod).Code := LInstance.SelectorInstance;
|
|
TMethod(LSelectMethod).Data := Self;
|
|
TMethod(LSelectMethod).Data := Self;
|
|
Result := LSelectMethod(GetTypeData(ATypeInfo), ASize);
|
|
Result := LSelectMethod(GetTypeData(ATypeInfo), ASize);
|
|
end;
|
|
end;
|
|
@@ -2541,34 +2549,34 @@ begin
|
|
FExtendedEqualityComparer_Pointer_Instance := @FExtendedEqualityComparer_Pointer_VMT ;
|
|
FExtendedEqualityComparer_Pointer_Instance := @FExtendedEqualityComparer_Pointer_VMT ;
|
|
|
|
|
|
//////
|
|
//////
|
|
- FExtendedEqualityComparerInstances[tkUnknown] := TInstance.Create(True, TMethod(TSelectMethod(TExtendedHashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
|
|
- FExtendedEqualityComparerInstances[tkInteger] := TInstance.Create(True, TMethod(TSelectMethod(TExtendedHashService<T>.SelectIntegerEqualityComparer)).Code);
|
|
|
|
|
|
+ FExtendedEqualityComparerInstances[tkUnknown] := TInstance.CreateSelector(TMethod(TSelectMethod(TExtendedHashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
|
|
+ FExtendedEqualityComparerInstances[tkInteger] := TInstance.CreateSelector(TMethod(TSelectMethod(TExtendedHashService<T>.SelectIntegerEqualityComparer)).Code);
|
|
FExtendedEqualityComparerInstances[tkChar] := TInstance.Create(False, @FExtendedEqualityComparer_UInt8_Instance);
|
|
FExtendedEqualityComparerInstances[tkChar] := TInstance.Create(False, @FExtendedEqualityComparer_UInt8_Instance);
|
|
- FExtendedEqualityComparerInstances[tkEnumeration] := TInstance.Create(True, TMethod(TSelectMethod(TExtendedHashService<T>.SelectIntegerEqualityComparer)).Code);
|
|
|
|
- FExtendedEqualityComparerInstances[tkFloat] := TInstance.Create(True, TMethod(TSelectMethod(TExtendedHashService<T>.SelectFloatEqualityComparer)).Code);
|
|
|
|
- FExtendedEqualityComparerInstances[tkSet] := TInstance.Create(True, TMethod(TSelectMethod(TExtendedHashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
|
|
|
|
+ FExtendedEqualityComparerInstances[tkEnumeration] := TInstance.CreateSelector(TMethod(TSelectMethod(TExtendedHashService<T>.SelectIntegerEqualityComparer)).Code);
|
|
|
|
+ FExtendedEqualityComparerInstances[tkFloat] := TInstance.CreateSelector(TMethod(TSelectMethod(TExtendedHashService<T>.SelectFloatEqualityComparer)).Code);
|
|
|
|
+ FExtendedEqualityComparerInstances[tkSet] := TInstance.CreateSelector(TMethod(TSelectMethod(TExtendedHashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
FExtendedEqualityComparerInstances[tkMethod] := TInstance.Create(False, @FExtendedEqualityComparer_Method_Instance);
|
|
FExtendedEqualityComparerInstances[tkMethod] := TInstance.Create(False, @FExtendedEqualityComparer_Method_Instance);
|
|
- FExtendedEqualityComparerInstances[tkSString] := TInstance.Create(True, TMethod(TSelectMethod(TExtendedHashService<T>.SelectShortStringEqualityComparer)).Code);
|
|
|
|
|
|
+ FExtendedEqualityComparerInstances[tkSString] := TInstance.CreateSelector(TMethod(TSelectMethod(TExtendedHashService<T>.SelectShortStringEqualityComparer)).Code);
|
|
FExtendedEqualityComparerInstances[tkLString] := TInstance.Create(False, @FExtendedEqualityComparer_AnsiString_Instance);
|
|
FExtendedEqualityComparerInstances[tkLString] := TInstance.Create(False, @FExtendedEqualityComparer_AnsiString_Instance);
|
|
FExtendedEqualityComparerInstances[tkAString] := TInstance.Create(False, @FExtendedEqualityComparer_AnsiString_Instance);
|
|
FExtendedEqualityComparerInstances[tkAString] := TInstance.Create(False, @FExtendedEqualityComparer_AnsiString_Instance);
|
|
FExtendedEqualityComparerInstances[tkWString] := TInstance.Create(False, @FExtendedEqualityComparer_WideString_Instance);
|
|
FExtendedEqualityComparerInstances[tkWString] := TInstance.Create(False, @FExtendedEqualityComparer_WideString_Instance);
|
|
FExtendedEqualityComparerInstances[tkVariant] := TInstance.Create(False, @FExtendedEqualityComparer_Variant_Instance);
|
|
FExtendedEqualityComparerInstances[tkVariant] := TInstance.Create(False, @FExtendedEqualityComparer_Variant_Instance);
|
|
- FExtendedEqualityComparerInstances[tkArray] := TInstance.Create(True, TMethod(TSelectMethod(TExtendedHashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
|
|
- FExtendedEqualityComparerInstances[tkRecord] := TInstance.Create(True, TMethod(TSelectMethod(TExtendedHashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
|
|
|
|
+ FExtendedEqualityComparerInstances[tkArray] := TInstance.CreateSelector(TMethod(TSelectMethod(TExtendedHashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
|
|
+ FExtendedEqualityComparerInstances[tkRecord] := TInstance.CreateSelector(TMethod(TSelectMethod(TExtendedHashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
FExtendedEqualityComparerInstances[tkInterface] := TInstance.Create(False, @FExtendedEqualityComparer_Pointer_Instance);
|
|
FExtendedEqualityComparerInstances[tkInterface] := TInstance.Create(False, @FExtendedEqualityComparer_Pointer_Instance);
|
|
FExtendedEqualityComparerInstances[tkClass] := TInstance.Create(False, @FExtendedEqualityComparer_Pointer_Instance);
|
|
FExtendedEqualityComparerInstances[tkClass] := TInstance.Create(False, @FExtendedEqualityComparer_Pointer_Instance);
|
|
- FExtendedEqualityComparerInstances[tkObject] := TInstance.Create(True, TMethod(TSelectMethod(TExtendedHashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
|
|
|
|
+ FExtendedEqualityComparerInstances[tkObject] := TInstance.CreateSelector(TMethod(TSelectMethod(TExtendedHashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
FExtendedEqualityComparerInstances[tkWChar] := TInstance.Create(False, @FExtendedEqualityComparer_UInt16_Instance);
|
|
FExtendedEqualityComparerInstances[tkWChar] := TInstance.Create(False, @FExtendedEqualityComparer_UInt16_Instance);
|
|
- FExtendedEqualityComparerInstances[tkBool] := TInstance.Create(True, TMethod(TSelectMethod(TExtendedHashService<T>.SelectIntegerEqualityComparer)).Code);
|
|
|
|
|
|
+ FExtendedEqualityComparerInstances[tkBool] := TInstance.CreateSelector(TMethod(TSelectMethod(TExtendedHashService<T>.SelectIntegerEqualityComparer)).Code);
|
|
FExtendedEqualityComparerInstances[tkInt64] := TInstance.Create(False, @FExtendedEqualityComparer_Int64_Instance);
|
|
FExtendedEqualityComparerInstances[tkInt64] := TInstance.Create(False, @FExtendedEqualityComparer_Int64_Instance);
|
|
FExtendedEqualityComparerInstances[tkQWord] := TInstance.Create(False, @FExtendedEqualityComparer_UInt64_Instance);
|
|
FExtendedEqualityComparerInstances[tkQWord] := TInstance.Create(False, @FExtendedEqualityComparer_UInt64_Instance);
|
|
- FExtendedEqualityComparerInstances[tkDynArray] := TInstance.Create(True, TMethod(TSelectMethod(TExtendedHashService<T>.SelectDynArrayEqualityComparer)).Code);
|
|
|
|
|
|
+ FExtendedEqualityComparerInstances[tkDynArray] := TInstance.CreateSelector(TMethod(TSelectMethod(TExtendedHashService<T>.SelectDynArrayEqualityComparer)).Code);
|
|
FExtendedEqualityComparerInstances[tkInterfaceRaw] := TInstance.Create(False, @FExtendedEqualityComparer_Pointer_Instance);
|
|
FExtendedEqualityComparerInstances[tkInterfaceRaw] := TInstance.Create(False, @FExtendedEqualityComparer_Pointer_Instance);
|
|
FExtendedEqualityComparerInstances[tkProcVar] := TInstance.Create(False, @FExtendedEqualityComparer_Pointer_Instance);
|
|
FExtendedEqualityComparerInstances[tkProcVar] := TInstance.Create(False, @FExtendedEqualityComparer_Pointer_Instance);
|
|
FExtendedEqualityComparerInstances[tkUString] := TInstance.Create(False, @FExtendedEqualityComparer_UnicodeString_Instance);
|
|
FExtendedEqualityComparerInstances[tkUString] := TInstance.Create(False, @FExtendedEqualityComparer_UnicodeString_Instance);
|
|
FExtendedEqualityComparerInstances[tkUChar] := TInstance.Create(False, @FExtendedEqualityComparer_UInt16_Instance);
|
|
FExtendedEqualityComparerInstances[tkUChar] := TInstance.Create(False, @FExtendedEqualityComparer_UInt16_Instance);
|
|
FExtendedEqualityComparerInstances[tkHelper] := TInstance.Create(False, @FExtendedEqualityComparer_Pointer_Instance);
|
|
FExtendedEqualityComparerInstances[tkHelper] := TInstance.Create(False, @FExtendedEqualityComparer_Pointer_Instance);
|
|
- FExtendedEqualityComparerInstances[tkFile] := TInstance.Create(True, TMethod(TSelectMethod(TExtendedHashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
|
|
|
|
+ FExtendedEqualityComparerInstances[tkFile] := TInstance.CreateSelector(TMethod(TSelectMethod(TExtendedHashService<T>.SelectBinaryEqualityComparer)).Code);
|
|
FExtendedEqualityComparerInstances[tkClassRef] := TInstance.Create(False, @FExtendedEqualityComparer_Pointer_Instance);
|
|
FExtendedEqualityComparerInstances[tkClassRef] := TInstance.Create(False, @FExtendedEqualityComparer_Pointer_Instance);
|
|
FExtendedEqualityComparerInstances[tkPointer] := TInstance.Create(False, @FExtendedEqualityComparer_Pointer_Instance);
|
|
FExtendedEqualityComparerInstances[tkPointer] := TInstance.Create(False, @FExtendedEqualityComparer_Pointer_Instance);
|
|
end;
|
|
end;
|