diff options
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.jason/template44.C')
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.jason/template44.C | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template44.C b/gcc/testsuite/g++.old-deja/g++.jason/template44.C new file mode 100644 index 000000000..2aea33a5e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template44.C @@ -0,0 +1,62 @@ +// { dg-do run } +#include <stdlib.h> +#include <string.h> + +template <class T> +class List { +public: + int len; + T *array; + + int length() const { return( len ); } + + List() : len( 0 ), array( 0 ) {} +}; + +template <class T> +int AlgoStdCompare(const T* a, const T* b) { + if (*a < *b) + return -1; + else + return (*a > *b); // 0 if equal, 1 if greater +} + +int AlgoStdCompare(const char* const* a, const char * const*b) +{ + return strcmp(*a,*b); +} + +template <class T> +void AlgoFixupSort(List< T >* , int, int ) { +} + +template <class T> +void AlgoSort(int (*compare)(const T *, const T *), + void (*fixup)( List<T> *, int first, int last), + List< T >* theList, int first, int last) { + if (last < 0) + last = theList->length()-1; + + qsort(theList->array+first, last-first+1, sizeof(T), + (int (*)(const void *, const void *))compare); + if (fixup) + fixup(theList, first, last); +} + +template <class T> +void AlgoSort(List< T >* theList, int first = 0, int last = -1) { + int (*compare)(const T*, const T*) = AlgoStdCompare; + void (*fixup)( List<T> *, int first, int last) = AlgoFixupSort; + + AlgoSort(compare, fixup, theList, first, last); +} + +int +main() +{ + List<const char *> slist; + AlgoSort( &slist ); + + List<int> ilist; + AlgoSort( &ilist ); +} |