84 lines
1.3 KiB
C++
84 lines
1.3 KiB
C++
#pragma once
|
|
#include <stdint.h>
|
|
|
|
template<typename T, size_t size> class SVector
|
|
{
|
|
private:
|
|
size_t stored = 0;
|
|
|
|
T array[size];
|
|
|
|
public:
|
|
|
|
T* data()
|
|
{
|
|
return array;
|
|
}
|
|
|
|
T& operator[](size_t i)
|
|
{
|
|
return array[i];
|
|
}
|
|
|
|
T& at(size_t i)
|
|
{
|
|
return array[i];
|
|
}
|
|
|
|
T& front()
|
|
{
|
|
return array[0];
|
|
}
|
|
|
|
T& back()
|
|
{
|
|
return array[stored-1];
|
|
}
|
|
|
|
bool empty() const
|
|
{
|
|
return stored == 0 ? true : false;
|
|
}
|
|
|
|
size_t count() const
|
|
{
|
|
return stored;
|
|
}
|
|
|
|
constexpr size_t maxSize() const
|
|
{
|
|
return size;
|
|
}
|
|
|
|
size_t remainingCapacity() const
|
|
{
|
|
return size - stored;
|
|
}
|
|
|
|
bool push_back(const T in)
|
|
{
|
|
if( remainingCapacity() != 0)
|
|
{
|
|
array[stored] = in;
|
|
++stored;
|
|
return true;
|
|
}
|
|
else return false;
|
|
}
|
|
|
|
bool erase(size_t position)
|
|
{
|
|
if(position > stored) return false;
|
|
array[position].~T();
|
|
--stored;
|
|
for( size_t i = position; i < stored; i++ ) array[i] = array[i+1];
|
|
return true;
|
|
}
|
|
|
|
void clear()
|
|
{
|
|
for( size_t i = 0; i < stored; i++ ) array[i].~T();
|
|
stored = 0;
|
|
}
|
|
};
|