diff options
author | Claudius "keldu" Holeksa <mail@keldu.de> | 2023-10-19 19:46:59 +0200 |
---|---|---|
committer | Claudius "keldu" Holeksa <mail@keldu.de> | 2023-10-19 19:46:59 +0200 |
commit | 5b865061d5ed8ff5aa943287b9ce5218769df267 (patch) | |
tree | 094927f799857b24b57f02fc992e138dd4397034 /c++ | |
parent | a0fd3902ebd44b71505c71ab9efcf1b8da74d104 (diff) |
core: Added basic array class to avoid exceptions
Diffstat (limited to 'c++')
-rw-r--r-- | c++/core/array.h | 93 |
1 files changed, 93 insertions, 0 deletions
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 <vector> + +namespace saw { +template<typename T> +class array { +private: + std::vector<T> 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<void> push(T val) noexcept { + try{ + data_.push_back(std::move(val)); + }catch(std::exception& e){ + return make_error<err::out_of_memory>(); + } + + return void_t{}; + } + + error_or<void> pop() noexcept { + try{ + data_.pop_back(); + }catch(std::exception& e){ + return make_error<err::out_of_memory>(); + } + + return void_t{}; + } + + error_or<void> resize(size_t i) noexcept { + try{ + data_.resize(i); + }catch(std::exception& e){ + return make_error<err::out_of_memory>(); + } + + return void_t{}; + } + + error_or<void> reserve(size_t i) noexcept { + try{ + data_.reserve(i); + }catch(std::exception& e){ + return make_error<err::out_of_memory>(); + } + + return void_t{}; + } + + error_or<void> shrink_to_fit() noexcept { + try{ + data_.shrink_to_fit(); + }catch(std::exception& e){ + return make_error<err::out_of_memory>(); + } + + return void_t{}; + } +}; +} |