delphi - "Stack overflow" error with Generic TList.Sort -


i've implemented generics.defaults.tcomparer sorting typed tlist. when calling sort method, throws exception "stack overflow at..."

why stack overflow error occurring?

// declarations    torder = record     id: integer;     orderdate: tdate;   end;    porder = ^torder;    forderlist: tlist<porder>;    tcomparer_orderdate = class(tcomparer<porder>)   public     function compare(const a, b: porder): integer; override;   end;  function tcomparer_orderdate.compare(const a, b: porder): integer; begin   result := 0;    if (a^.orderdate> b^.orderdate)     result := 1   else     result := -1; end;     // code inside button onclick event:    forderlist := tlist<porder>.create;    fcomparer_orderdate := tcomparer_orderdate.create;    forderlist.sort(fcomparer_orderdate); // <--- 'stack overflow' error. 

your compare function needs return 0 equality. this:

function tcomparer_orderdate.compare(const a, b: porder): integer; begin     if (a^.orderdate > b^.orderdate)     result := 1   else if (a^.orderdate < b^.orderdate)     result := -1   else     result := 0;   end; end; 

it's easier use tcomparer<porder>.construct make comparer.

forderlist.sort(   tcomparer<porder>.construct(     function(const a, b: porder): integer     begin         if (a^.orderdate > b^.orderdate)         result := 1       else if (a^.orderdate < b^.orderdate)         result := -1       else         result := 0;       end;     end   ) ); 

or use default date time comparer:

datetimecomparer := tcomparer<tdatetime>.default; forderlist.sort(   tcomparer<porder>.construct(     function(const a, b: porder): integer     begin         result := datetimecomparer.compare(a^.orderdate, b^.orderdate);     end   ) ); 

i've not compiled of expect there minor errors.


Comments

Popular posts from this blog

routing - AngularJS State management ->load multiple states in one page -

python - GRASS parser() error -

json - Gson().fromJson(jsonResult, Myobject.class) return values in 0's -