mirror of
https://github.com/reactos/reactos.git
synced 2024-11-20 14:30:57 +00:00
a7fddf9c07
svn path=/trunk/; revision=29689
101 lines
1.1 KiB
C++
101 lines
1.1 KiB
C++
#ifndef _VECTOR_H
|
|
#define _VECTOR_H
|
|
#include "goo/gtypes.h"
|
|
|
|
|
|
template<class T>
|
|
class GooVector{
|
|
private:
|
|
|
|
int _size;
|
|
T* last;
|
|
T* storage;
|
|
|
|
void resize(){
|
|
if (_size==0) _size=2;else _size=2*_size;
|
|
T *tmp=new T[_size];
|
|
if (storage){
|
|
last=copy(storage,last,tmp);
|
|
delete [] storage;
|
|
}
|
|
else last=tmp;
|
|
storage=tmp;
|
|
}
|
|
|
|
T* copy(T* src1,T* src2,T* dest){
|
|
T* tmp=src1;
|
|
T* d=dest;
|
|
while(tmp!=src2){
|
|
*d=*tmp;
|
|
d++;tmp++;
|
|
}
|
|
return d;
|
|
}
|
|
|
|
public:
|
|
typedef T* iterator;
|
|
|
|
GooVector(){
|
|
_size=0;
|
|
last=0;
|
|
storage=0;
|
|
}
|
|
|
|
|
|
|
|
virtual ~GooVector(){
|
|
delete[] storage ;
|
|
}
|
|
|
|
void reset(){
|
|
last=storage;
|
|
}
|
|
|
|
int size(){
|
|
return (last-storage);
|
|
}
|
|
void push_back(const T& elem){
|
|
if (!storage||(size() >=_size)) resize();
|
|
*last=elem;
|
|
last++;
|
|
|
|
|
|
}
|
|
|
|
|
|
T pop_back() {
|
|
if (last!=storage) last--;
|
|
|
|
return *last;
|
|
}
|
|
|
|
|
|
T operator[](unsigned int i){
|
|
return *(storage+i);
|
|
}
|
|
|
|
|
|
GBool isEmpty() const{
|
|
return !_size || (last==storage) ;
|
|
}
|
|
|
|
|
|
|
|
iterator begin() const{
|
|
return storage;
|
|
}
|
|
|
|
iterator end() const {
|
|
return last;
|
|
}
|
|
};
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|