#include <iostream.h>
#include "stretchArray.h"
#include "newString.h"

template <class Type>
StretchArray<Type>::StretchArray()
{
    _initSize = DEFAULT_SIZE;
    _times    = DEFAULT_EXT;
    _rowUsed  = 0;

    _data    = new (Type*)[ _times ];
    _data[0] = new Type [ _initSize ];
}

template <class Type>
StretchArray<Type>::StretchArray(int init, int times)
{
    _initSize = init;
    _times    = times;
    _rowUsed  = 0;

    _data    = new (Type*)[ _times ];
    _data[0] = new Type[ _initSize ];
}

template <class Type>
StretchArray<Type>::~StretchArray()
{
     int last = ( _rowUsed >= _times ) ? _times : _rowUsed;

     for(int i = 0; i < last; i++)
     {
        delete (Type *) _data[i];
     }

     delete [] _data;

    _initSize = -1;
    _times    = -1;
    _rowUsed  = -1;
}

template <class Type>
Type&
StretchArray<Type>::operator[](int i)
{
    if (i  >= _initSize * _times)
    {
        cerr << "error : StretchArray: limit exceeded, can't stretch" << endl;
        exit(1);
    }

    int j = i / _initSize;

    if ( j > _rowUsed )
    {
        for(int k = _rowUsed + 1; k <= j; k++)
        {
            _data[k] = new Type[ _initSize ];
        }
       _rowUsed = j;
    }

    return _data[ j ][ i % _initSize ];
}

template class StretchArray<String>;

