#pragma once #include "utils/using.hpp" namespace hr { class fvec_t { public: fvec_t() = default; fvec_t(std::size_t size, base_t v); fvec_t(const fvec_t&) = default; fvec_t& operator=(const fvec_t&) = default; fvec_t(fvec_t&&) noexcept = default; fvec_t& operator=(fvec_t&&) noexcept = default; ~fvec_t() = default; public: // FOR READING const base_t& operator[](std::size_t index) const { return m_data[index]; } const base_t* data() const noexcept { return m_data.data(); } auto begin() const noexcept { return m_data.begin(); } auto end() const noexcept { return m_data.end(); } public: // FOR CHANGING base_t* data() noexcept { return m_data.data(); } std::vector& src() noexcept { return m_data; } base_t& operator[](std::size_t index) { return m_data[index]; } auto begin() noexcept { return m_data.begin(); } auto end() noexcept { return m_data.end(); } public: std::size_t size() const; bool empty() const; void push_back(const base_t& v); void resize(std::size_t new_size, const base_t el); void reserve(std::size_t size); void shift(); private: std::vector m_data; }; }