From a14896f9ed209dd3f9597722e5a5697bd7dbf531 Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Mon, 4 Dec 2023 12:18:14 +0100 Subject: meta: Renamed folder containing source --- modules/core/array.h | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 modules/core/array.h (limited to 'modules/core/array.h') diff --git a/modules/core/array.h b/modules/core/array.h new file mode 100644 index 0000000..f82b8d6 --- /dev/null +++ b/modules/core/array.h @@ -0,0 +1,96 @@ +#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{}; + } +}; +} -- cgit v1.2.3