class Carry{
public:
Carry() : buffer(0), bufferSize(0), realSize {}
~Carry() { delete[] buffer; }
double GetAt( int index ) const;
double operator[] ( int index) const {return GetAt( index );}
double& operator[] (int index );
void Add( double element );
private:
double* buffer;
int bufferSize;
int realSize;
void grow;
};
double Carry::GetAt( int index )
{
assert( index >= 0 && index < realSize && buffer != 0);
return buffer[index];
}
void Carry::grow()
{
int newBufferSize = max( bufferSize * 2, InitialSize );
double* newBuffer = new double[newBufferSize];
for( int i = 0; i < realSize; ++i)
newBuffer[i] = buffer[i];
delete[] buffer;
bufferSize = newBufferSize;
}
void Carry::Add( double element)
{
if( realSize == bufferSize )
grow( arr );
assert( realSize < bufferSize && buffer != 0 );
buffer[realSize++] == element;
}