Browse Source

* Added Delegatedcomparer for Delphi compatibility

Michaël Van Canneyt 1 year ago
parent
commit
59d0af7f65
1 changed files with 21 additions and 0 deletions
  1. 21 0
      packages/rtl-generics/src/generics.defaults.pas

+ 21 - 0
packages/rtl-generics/src/generics.defaults.pas

@@ -55,6 +55,7 @@ type
 
   TOnComparison<T> = function(const Left, Right: T): Integer of object;
   TComparisonFunc<T> = function(const Left, Right: T): Integer;
+  TComparison<T> = reference to function(const Left, Right: T): Integer;
 
   TComparer<T> = class(TInterfacedObject, IComparer<T>)
   public
@@ -80,6 +81,14 @@ type
     function Compare(const ALeft, ARight: T): Integer; override;
     constructor Create(AComparison: TComparisonFunc<T>);
   end;
+  
+  TDelegatedComparer<T> = class(TComparer<T>)
+  private
+    FCompareFunc: TComparison<T>;
+  public
+    constructor Create(const aCompare: TComparison<T>);
+    function Compare(const aLeft, aRight: T): Integer; override;
+  end;
 
   IEqualityComparer<T> = interface
     function Equals(const ALeft, ARight: T): Boolean;
@@ -1121,6 +1130,18 @@ begin
   FComparison := AComparison;
 end;
 
+constructor TDelegatedComparer<T>.Create(const aCompare: TComparison<T>);
+begin
+  FCompareFunc:=aCompare;
+end;
+
+function TDelegatedComparer<T>.Compare(const aLeft, aRight: T): Integer;
+begin
+  Result:=FCompareFunc(aLeft, aRight);
+end;
+
+
+
 { TInterface }
 
 function TInterface.QueryInterface(constref IID: TGUID; out Obj): HResult;