#pragma once #include namespace saw { /** * Array container avoiding exceptions */ template class array { private: std::vector data_; public: array() = default; SAW_FORBID_COPY(array); T& at(size_t i) noexcept { return data_.at(i); } const T& at(size_t i) noexcept const { return data_.at(i); } size_t size() noexcept const { return data_.size(); } T& front() noexcept { return data_.front(); } const T& front() noexcept const { return data_.front(); } T& back() noexcept { return data_.back(); } const T& back() noexcept const { return data_.back(); } error_or push(T val) noexcept { try{ data_.push_back(std::move(val)); }catch(std::exception& e){ return make_error(); } return void_t{}; } error_or pop() noexcept { try{ data_.pop_back(); }catch(std::exception& e){ return make_error(); } return void_t{}; } error_or resize(size_t i) noexcept { try{ data_.resize(i); }catch(std::exception& e){ return make_error(); } return void_t{}; } error_or reserve(size_t i) noexcept { try{ data_.reserve(i); }catch(std::exception& e){ return make_error(); } return void_t{}; } error_or shrink_to_fit() noexcept { try{ data_.shrink_to_fit(); }catch(std::exception& e){ return make_error(); } return void_t{}; } }; }