// { dg-do run { xfail sparc64-*-elf arm-*-pe } }
|
// { dg-do run { xfail sparc64-*-elf arm-*-pe } }
|
// { dg-options "-fexceptions" }
|
// { dg-options "-fexceptions" }
|
// prms-id: 11667
|
// prms-id: 11667
|
|
|
extern "C" int printf(const char *,...);
|
extern "C" int printf(const char *,...);
|
|
|
template < class T >
|
template < class T >
|
class LIST {
|
class LIST {
|
public:
|
public:
|
|
|
LIST() { nitems = 16; items = new T[nitems]; };
|
LIST() { nitems = 16; items = new T[nitems]; };
|
|
|
LIST(int u) { nitems = u; items = new T[nitems]; };
|
LIST(int u) { nitems = u; items = new T[nitems]; };
|
|
|
T& operator[](int i) const {
|
T& operator[](int i) const {
|
return items[i];
|
return items[i];
|
}
|
}
|
|
|
void grow(int n) {
|
void grow(int n) {
|
T* newlist = new T[n];
|
T* newlist = new T[n];
|
T* src = items;
|
T* src = items;
|
T* dst = newlist;
|
T* dst = newlist;
|
int i = nitems;
|
int i = nitems;
|
|
|
try {
|
try {
|
while (i--) *dst++ = *src++;
|
while (i--) *dst++ = *src++;
|
} catch (...) {
|
} catch (...) {
|
delete[] newlist;
|
delete[] newlist;
|
throw;
|
throw;
|
}
|
}
|
|
|
if (items) delete[] items;
|
if (items) delete[] items;
|
nitems = n;
|
nitems = n;
|
items = newlist;
|
items = newlist;
|
}
|
}
|
|
|
private:
|
private:
|
int nitems;
|
int nitems;
|
T *items;
|
T *items;
|
};
|
};
|
|
|
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
int i;
|
int i;
|
LIST mylist(10);
|
LIST mylist(10);
|
|
|
printf("Start dumping initial 10 item list\n");
|
printf("Start dumping initial 10 item list\n");
|
for (i = 0; i < 10 ; i++) {
|
for (i = 0; i < 10 ; i++) {
|
mylist[i] = i;
|
mylist[i] = i;
|
printf("%d\n", mylist[i]);
|
printf("%d\n", mylist[i]);
|
}
|
}
|
|
|
printf("Growing list to 20\n");
|
printf("Growing list to 20\n");
|
mylist.grow(20);
|
mylist.grow(20);
|
|
|
printf("Start dumping grown 20 item list\n");
|
printf("Start dumping grown 20 item list\n");
|
for (i = 0; i < 20; i++) {
|
for (i = 0; i < 20; i++) {
|
mylist[i] = i;
|
mylist[i] = i;
|
printf("%d\n", mylist[i]);
|
printf("%d\n", mylist[i]);
|
}
|
}
|
|
|
return 0;
|
return 0;
|
}
|
}
|
|
|