summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.old-deja/g++.jason/template44.C
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/g++.old-deja/g++.jason/template44.C
downloadcbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2
cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.jason/template44.C')
-rw-r--r--gcc/testsuite/g++.old-deja/g++.jason/template44.C62
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 );
+}