Add clear to vector and static_vector
This commit is contained in:
parent
2b224f262b
commit
b4a357e44f
|
@ -22,7 +22,7 @@ public:
|
||||||
{
|
{
|
||||||
T * data = (T*)_space;
|
T * data = (T*)_space;
|
||||||
for(size_t i=0; i<n; i++)
|
for(size_t i=0; i<n; i++)
|
||||||
new (data + i) T;
|
new (data + i) T();
|
||||||
}
|
}
|
||||||
|
|
||||||
static_vector(const static_vector & v)
|
static_vector(const static_vector & v)
|
||||||
|
@ -76,6 +76,8 @@ public:
|
||||||
|
|
||||||
void resize(size_t n);
|
void resize(size_t n);
|
||||||
|
|
||||||
|
void clear(void);
|
||||||
|
|
||||||
T & at(size_t at)
|
T & at(size_t at)
|
||||||
{
|
{
|
||||||
return ((T*)_space)[at];
|
return ((T*)_space)[at];
|
||||||
|
@ -177,6 +179,14 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <class T, int N>
|
||||||
|
void static_vector<T, N>::clear(void)
|
||||||
|
{
|
||||||
|
T * data = (T*)_space;
|
||||||
|
for(size_t i=0; i<_size; i++)
|
||||||
|
data[i].~T();
|
||||||
|
_size = 0;
|
||||||
|
}
|
||||||
|
|
||||||
template <class T, int N>
|
template <class T, int N>
|
||||||
void static_vector<T, N>::resize(size_t n)
|
void static_vector<T, N>::resize(size_t n)
|
||||||
|
@ -186,14 +196,13 @@ void static_vector<T, N>::resize(size_t n)
|
||||||
{
|
{
|
||||||
for(size_t i=n; i<_size; i++)
|
for(size_t i=n; i<_size; i++)
|
||||||
data[i].~T();
|
data[i].~T();
|
||||||
_size = n;
|
|
||||||
}
|
}
|
||||||
else
|
else if (n > 0)
|
||||||
{
|
{
|
||||||
for(size_t i=_size; i<n; i++)
|
for(size_t i=_size; i<n; i++)
|
||||||
new(data + i)T;
|
new(data + i)T();
|
||||||
_size = n;
|
|
||||||
}
|
}
|
||||||
|
_size = n;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T, int N>
|
template <class T, int N>
|
||||||
|
@ -219,7 +228,7 @@ template <class T, int N>
|
||||||
void static_vector<T, N>::insert(size_t at, const T & t)
|
void static_vector<T, N>::insert(size_t at, const T & t)
|
||||||
{
|
{
|
||||||
T * data = (T*)_space;
|
T * data = (T*)_space;
|
||||||
new (data + _size)T;
|
new (data + _size)T();
|
||||||
for(size_t i=_size; i>at; i--)
|
for(size_t i=_size; i>at; i--)
|
||||||
data[i] = move(data[i - 1]);
|
data[i] = move(data[i - 1]);
|
||||||
data[at] = t;
|
data[at] = t;
|
||||||
|
@ -242,7 +251,7 @@ T * static_vector<T, N>::insert(T * at, const T & t)
|
||||||
{
|
{
|
||||||
T * data = (T*)_space;
|
T * data = (T*)_space;
|
||||||
T * dp = data + _size;
|
T * dp = data + _size;
|
||||||
new (dp)T;
|
new (dp)T();
|
||||||
while (dp != at)
|
while (dp != at)
|
||||||
{
|
{
|
||||||
dp--;
|
dp--;
|
||||||
|
|
|
@ -94,6 +94,8 @@ public:
|
||||||
return _capacity;
|
return _capacity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void clear(void);
|
||||||
|
|
||||||
void resize(size_t n);
|
void resize(size_t n);
|
||||||
|
|
||||||
void reserve(size_t n);
|
void reserve(size_t n);
|
||||||
|
@ -220,6 +222,14 @@ void vector<T>::reserve(size_t n)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
void vector<T>::clear(void)
|
||||||
|
{
|
||||||
|
for(size_t i=0; i<_size; i++)
|
||||||
|
_data[i].~T();
|
||||||
|
_size = 0;
|
||||||
|
}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
void vector<T>::resize(size_t n)
|
void vector<T>::resize(size_t n)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue