From 5b865061d5ed8ff5aa943287b9ce5218769df267 Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Thu, 19 Oct 2023 19:46:59 +0200 Subject: core: Added basic array class to avoid exceptions --- c++/core/array.h | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 c++/core/array.h (limited to 'c++/core') diff --git a/c++/core/array.h b/c++/core/array.h new file mode 100644 index 0000000..362130e --- /dev/null +++ b/c++/core/array.h @@ -0,0 +1,93 @@ +#pragma once + +#include + +namespace saw { +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{}; + } +}; +} -- cgit v1.2.3