| 92 | */ |
| 93 | template <typename T> |
| 94 | class MPVector { |
| 95 | public: |
| 96 | MPVector() : m_allocated( 0 ), m_size( 0 ), m_buf ( 0 ) {} |
| 97 | ~MPVector() { delete [] m_buf; } |
| 98 | |
| 99 | void clear() { m_size = 0; } // see warning above |
| 100 | void resize( unsigned s ) { capacity( s ); |
| 101 | m_size = s; |
| 102 | } |
| 103 | T& operator[](unsigned i) { MPASSERT( i>=0 && i<m_size ); |
| 104 | return m_buf[i]; |
| 105 | } |
| 106 | const T& operator[](unsigned i) const { MPASSERT( i>=0 && i<m_size ); |
| 107 | return m_buf[i]; |
| 108 | } |
| 109 | void push_back( const T& t ) { capacity( m_size+1 ); |
| 110 | m_buf[m_size++] = t; |
| 111 | } |
| 112 | unsigned size() const { return m_size; } |
| 113 | |
| 114 | private: |
| 115 | void capacity( unsigned cap ) { |
| 116 | if ( m_allocated < cap ) { |
| 117 | unsigned newAllocated = cap * 3/2 + 16; |
| 118 | T* newBuf = new T[newAllocated]; |
| 119 | MPASSERT( m_size <= m_allocated ); |
| 120 | MPASSERT( m_size < newAllocated ); |
| 121 | memcpy( newBuf, m_buf, sizeof(T)*m_size ); |
| 122 | delete [] m_buf; |
| 123 | m_buf = newBuf; |
| 124 | m_allocated = newAllocated; |
| 125 | } |
| 126 | } |
| 127 | unsigned m_allocated; |
| 128 | unsigned m_size; |
| 129 | T* m_buf; |
| 130 | }; |
| 131 | #endif |
| 132 | |
| 133 | /** |
nothing calls this directly
no outgoing calls
no test coverage detected