Pārlūkot izejas kodu

* Allow context when sorting lists (patch from Ondrej Pokorny, bug ID #0035962)

git-svn-id: trunk@42798 -
michael 6 gadi atpakaļ
vecāks
revīzija
91ba1214d2
2 mainītis faili ar 26 papildinājumiem un 0 dzēšanām
  1. 4 0
      rtl/objpas/classes/classesh.inc
  2. 22 0
      rtl/objpas/classes/lists.inc

+ 4 - 0
rtl/objpas/classes/classesh.inc

@@ -256,6 +256,8 @@ Type
     procedure Pack;
     procedure Sort(Compare: TListSortCompare);
     procedure Sort(Compare: TListSortCompare; SortingAlgorithm: PSortingAlgorithm);
+    procedure Sort(Compare: TListSortComparer_Context; Context: Pointer);
+    procedure Sort(Compare: TListSortComparer_Context; Context: Pointer; SortingAlgorithm: PSortingAlgorithm);
     procedure ForEachCall(proc2call:TListCallback;arg:pointer);
     procedure ForEachCall(proc2call:TListStaticCallback;arg:pointer);
     property Capacity: Integer read FCapacity write SetCapacity;
@@ -342,6 +344,8 @@ Type
     procedure Pack;
     procedure Sort(Compare: TListSortCompare);
     procedure Sort(Compare: TListSortCompare; SortingAlgorithm: PSortingAlgorithm);
+    procedure Sort(Compare: TListSortComparer_Context; Context: Pointer);
+    procedure Sort(Compare: TListSortComparer_Context; Context: Pointer; SortingAlgorithm: PSortingAlgorithm);
     property Capacity: Integer read GetCapacity write SetCapacity;
     property Count: Integer read GetCount write SetCount;
     property Items[Index: Integer]: Pointer read Get write Put; default;

+ 22 - 0
rtl/objpas/classes/lists.inc

@@ -312,6 +312,18 @@ begin
 end;
 
 
+procedure TFPList.Sort(Compare: TListSortComparer_Context; Context: Pointer);
+begin
+  Sort(Compare, Context, SortBase.DefaultSortingAlgorithm);
+end;
+
+
+procedure TFPList.Sort(Compare: TListSortComparer_Context; Context: Pointer; SortingAlgorithm: PSortingAlgorithm);
+begin
+  SortingAlgorithm^.PtrListSorter_ContextComparer(PPointer(FList), FCount, Compare, Context);
+end;
+
+
 procedure TFPList.ForEachCall(proc2call:TListCallback;arg:pointer);
 var
   i : integer;
@@ -784,6 +796,16 @@ begin
   FList.Sort(Compare, SortingAlgorithm);
 end;
 
+procedure TList.Sort(Compare: TListSortComparer_Context; Context: Pointer);
+begin
+  FList.Sort(Compare, Context);
+end;
+
+procedure TList.Sort(Compare: TListSortComparer_Context; Context: Pointer; SortingAlgorithm: PSortingAlgorithm);
+begin
+  FList.Sort(Compare, Context, SortingAlgorithm);
+end;
+
 procedure TList.CopyMove (aList : TList);
 var r : integer;
 begin