diff --git a/deps/ox/src/ox/model/walk.hpp b/deps/ox/src/ox/model/walk.hpp index 713e3165..21b3c015 100644 --- a/deps/ox/src/ox/model/walk.hpp +++ b/deps/ox/src/ox/model/walk.hpp @@ -28,7 +28,8 @@ class DataWalker { public: DataWalker(DescriptorType *type, T fieldHandler); - [[nodiscard]] const DescriptorType *type() const noexcept; + [[nodiscard]] + Result type() const noexcept; Error read(const DescriptorField&, Reader *rdr); @@ -49,8 +50,9 @@ DataWalker::DataWalker(DescriptorType *type, T fieldHandler): m_field } template -const DescriptorType *DataWalker::type() const noexcept { - return m_typeStack.back(); +Result DataWalker::type() const noexcept { + oxRequire(out, m_typeStack.back()); + return out; } template @@ -132,10 +134,7 @@ static Error parseField(const DescriptorField &field, Reader *rdr, DataWalker Error model(Reader *rdr, DataWalker *walker) { - auto type = walker->type(); - if (!type) { - return OxError(1); - } + oxRequire(type, walker->type()); auto typeName = type->typeName.c_str(); auto &fields = type->fieldList; rdr->setTypeInfo(typeName, fields.size()); diff --git a/deps/ox/src/ox/std/test/tests.cpp b/deps/ox/src/ox/std/test/tests.cpp index b8e98b2a..04352902 100644 --- a/deps/ox/src/ox/std/test/tests.cpp +++ b/deps/ox/src/ox/std/test/tests.cpp @@ -18,7 +18,7 @@ std::map> tests = { "malloc", [] { ox::Vector buff(ox::units::MB); - ox::heapmgr::initHeap(&buff.front(), &buff.back()); + ox::heapmgr::initHeap(&buff[0], &buff[buff.size()-1]); oxAssert(ox::heapmgr::malloc(5) != nullptr, "malloc is broken"); oxAssert(ox::heapmgr::malloc(5) != nullptr, "malloc is broken"); return OxError(0); diff --git a/deps/ox/src/ox/std/vector.hpp b/deps/ox/src/ox/std/vector.hpp index 78965de7..6b65c75e 100644 --- a/deps/ox/src/ox/std/vector.hpp +++ b/deps/ox/src/ox/std/vector.hpp @@ -26,11 +26,11 @@ class Vector { public: Vector() noexcept = default; - explicit Vector(std::size_t size); + explicit Vector(std::size_t size) noexcept; Vector(const Vector &other); - Vector(Vector &&other); + Vector(Vector &&other) noexcept; ~Vector(); @@ -44,17 +44,17 @@ class Vector { [[nodiscard]] const T &operator[](std::size_t i) const noexcept; - [[nodiscard]] T &front() noexcept; + [[nodiscard]] Result front() noexcept; - [[nodiscard]] const T &front() const noexcept; + [[nodiscard]] Result front() const noexcept; - [[nodiscard]] T &back() noexcept; + [[nodiscard]] Result back() noexcept; - [[nodiscard]] const T &back() const noexcept; + [[nodiscard]] Result back() const noexcept; [[nodiscard]] std::size_t size() const noexcept; - [[nodiscard]] bool empty() const; + [[nodiscard]] bool empty() const noexcept; void clear(); @@ -70,7 +70,7 @@ class Vector { return m_items; } - [[nodiscard]] bool contains(T) const; + [[nodiscard]] bool contains(const T&) const; void insert(std::size_t pos, const T &val); @@ -100,7 +100,7 @@ class Vector { }; template -Vector::Vector(std::size_t size) { +Vector::Vector(std::size_t size) noexcept { m_size = size; m_cap = m_size; m_items = bit_cast(new AllocAlias[m_cap]); @@ -120,7 +120,7 @@ Vector::Vector(const Vector &other) { } template -Vector::Vector(Vector &&other) { +Vector::Vector(Vector &&other) noexcept { m_size = other.m_size; m_cap = other.m_cap; m_items = other.m_items; @@ -185,22 +185,38 @@ const T &Vector::operator[](std::size_t i) const noexcept { } template -T &Vector::front() noexcept { +Result Vector::front() noexcept { + if (!m_size) { + AllocAlias v; + return {*bit_cast(&v), OxError(1)}; + } return m_items[0]; } template -const T &Vector::front() const noexcept { +Result Vector::front() const noexcept { + if (!m_size) { + AllocAlias v; + return {*bit_cast(&v), OxError(1)}; + } return m_items[0]; } template -T &Vector::back() noexcept { +Result Vector::back() noexcept { + if (!m_size) { + AllocAlias v; + return {*bit_cast(&v), OxError(1)}; + } return m_items[m_size - 1]; } template -const T &Vector::back() const noexcept { +Result Vector::back() const noexcept { + if (!m_size) { + AllocAlias v; + return {*bit_cast(&v), OxError(1)}; + } return m_items[m_size - 1]; } @@ -210,7 +226,7 @@ std::size_t Vector::size() const noexcept { } template -bool Vector::empty() const { +bool Vector::empty() const noexcept { return !m_size; } @@ -237,7 +253,7 @@ void Vector::resize(std::size_t size) { } template -bool Vector::contains(T v) const { +bool Vector::contains(const T &v) const { for (std::size_t i = 0; i < m_size; i++) { if (m_items[i] == v) { return true;