metaforce/Runtime/rstl.hpp

50 lines
1.0 KiB
C++
Raw Normal View History

2015-08-21 18:58:41 -07:00
#ifndef __RSTL_HPP__
#define __RSTL_HPP__
#include <vector>
#include <stdlib.h>
2016-04-29 03:08:46 -07:00
#include "optional.hpp"
2015-08-21 18:58:41 -07:00
namespace rstl
{
2016-04-29 03:08:46 -07:00
template <typename T>
using optional_object = std::experimental::optional<T>;
2015-08-21 18:58:41 -07:00
/**
* @brief Vector reserved on construction
*/
template <class T, size_t N>
class reserved_vector : public std::vector<T>
{
public:
2017-01-06 17:58:05 -08:00
reserved_vector() { this->reserve(N); }
reserved_vector(size_t n, const T& val) : std::vector<T>(n, val) {}
2015-08-21 18:58:41 -07:00
};
2017-01-06 17:58:05 -08:00
template <class T, size_t N>
class prereserved_vector
{
size_t x0_size = 1;
T x4_data[N];
public:
void set_size(size_t n)
{
if (n <= N)
x0_size = n;
}
void set_data(const T* data) { memmove(x4_data, data, sizeof(T) * x0_size); }
size_t size() const { return x0_size; }
T& back() const { x4_data[(x0_size == 0) ? 0 : x0_size - 1]; }
T& front() const { return x4_data[0]; }
2017-04-01 20:03:37 -07:00
T& operator[](size_t idx) { return x4_data[idx]; }
2017-04-08 13:40:36 -07:00
const T& operator[](size_t idx) const { return x4_data[idx]; }
2017-01-06 17:58:05 -08:00
};
2015-08-21 18:58:41 -07:00
}
#endif // __RSTL_HPP__