Board index » cppbuilder » sorting StringList backwards...function fails..
Oren Halvani
CBuilder Developer |
sorting StringList backwards...function fails..2004-02-26 07:49:27 AM cppbuilder73 hi remy, you posted me a snip to sort a StringList backwards... the problem is the compiler drops an "Expression yntax Error" for the following function: int __fastcall ReverseOrder(TStringList *List, int Index1, Index2) { -return AnsiCompareStr(List->Strings[Index1],List->Strings[Index2]); // HERE ! } I didn't know that this "-return..." is possible... Now I use the below code...but it only sorts "normal" NOT "backwards".. what do I need to modify here....? /************************************************************/ // CustomSort() is not supported under BCB3...thats why... typedef int __fastcall (*TStringListSortCompare) (TStringList *List, int Index1, int Index2); void __fastcall StringListQuickSort(TStringList *List, int L, int R, TStringListSortCompare SCompare) { int I, J, P; do { I = L; J = R; P = ((L + R)>>1); do { while(SCompare(List, I, P) < 0 ) ++I; while(SCompare(List, J, P)>0 ) --J; if( I <= J ) { List->Exchange(I, J); if(P == I) P = J; else if(P == J) P = I; ++I; --J; } } while( I <= J ); if( L < J ) StringListQuickSort(List, L, J, SCompare); L = I; } while( I < R ); } void __fastcall StringListCustomSort(TStringList *List, TStringListSortCompare SCompare) { StringListQuickSort(List, 0, List->Count-1, SCompare); } int __fastcall ReverseOrder(TStringList *List, int Index1, int Index2) { return AnsiCompareStr(List->Strings[Index1],List->Strings[Index2]); } void __fastcall TfrmMainUnit::Button1Click(TObject *Sender) { TStringList *sList = new TStringList; try { sList->AddStrings(Memo1->Lines); StringListCustomSort(sList,ReverseOrder); Memo1->Lines->Assign(sList); } __finally { delete sList; } |