// // table.h // // (c) Copyright 2000 William A. McKee. All rights reserved. // // Created April 29, 2000 // // Table template // template class Table { private : T * data; int base; int size; int limit; void resize (int i) { if (size == 0) base = i; if (i < base) { int d = base - i; if (size + d >= limit) { while (size + d >= limit) { if (limit == 0) limit = 1; else limit *= 2; } } T * tmp = new T [limit]; for (int j = 0; j < size; j++) tmp [j + d] = data [j]; delete [] data; data = tmp; size += d; base -= d; } if (i - base >= limit) { while (i - base >= limit) { if (limit == 0) limit = 1; else limit *= 2; } T * tmp = new T [limit]; for (int j = 0; j < size; j++) tmp [j] = data [j]; delete [] data; data = tmp; } if (i + 1 - base > size) size = i + 1 - base; } public : Table () { data = NULL; base = 0; size = 0; limit = 0; } ~Table () { delete [] data; } T & operator [] (int rhs) { resize (rhs); return data [rhs - base]; } int Base () { return base; } int Summit () { return size + base - 1; } };