/****************************************************************************
 *
 *  Copyright (C) 2000-2001 RealNetworks, Inc. All rights reserved.
 *
 *  This program is free software.  It may be distributed under the terms
 *  in the file LICENSE, found in the top level of the source distribution.
 *
 */

#ifndef _TVEC_H
#define _TVEC_H

#include <assert.h>

template <class T>
class TGrowingVector
{
public:
    TGrowingVector( void ) : m_len(0), m_vec(NULL) {}
    ~TGrowingVector( void ) { delete[] m_vec; }
    const T& operator[]( unsigned n ) const
    {
        assert( m_len && n < m_len );
        return m_vec[n];
    }
    T operator[]( unsigned n )
    {
        if( m_len < n )
        {
            lenNew = m_len * 2;
            if( !lenNew ) lenNew = DEF_VEC_SIZE;
            T* vecNew = new T[ lenNew ];
            assert( vecNew );
            if( m_len ) memcpy( vecNew, m_vec, m_len*sizeof(T) );
            memset( vecNew+m_len, 0, (lenNew-m_len)*sizeof(T) );
            m_len = lenNew;
            delete[] m_vec;
            m_vec = vecNew;
        }
        return m_vec[n];
    }
protected:
    unsigned m_len;
    T*       m_vec;
};

#endif //ndef _TVEC_H


syntax highlighted by Code2HTML, v. 0.9.1