Added dataAt() to TypelessBuffer and elementSize() to UntypedVector.

This commit is contained in:
Patrick 2025-01-22 11:47:28 +01:00
parent 461d3ec694
commit 6d2a57485e
2 changed files with 30 additions and 0 deletions

View File

@ -61,6 +61,12 @@ public:
template<typename T> template<typename T>
void append(std::span<const T> data); void append(std::span<const T> data);
template<typename T>
[[nodiscard]] T& dataAt(size_type offset) MIJIN_NOEXCEPT;
template<typename T>
[[nodiscard]] const T& dataAt(size_type offset) const MIJIN_NOEXCEPT;
}; };
template<typename T> template<typename T>
@ -158,6 +164,24 @@ void TypelessBuffer::append(std::span<const T> data)
bytes_.resize(bytes_.size() + data.size_bytes()); bytes_.resize(bytes_.size() + data.size_bytes());
std::memcpy(bytes_.data() + bytes_.size() - data.size_bytes(), data.data(), data.size_bytes()); std::memcpy(bytes_.data() + bytes_.size() - data.size_bytes(), data.data(), data.size_bytes());
} }
template<typename T>
T& TypelessBuffer::dataAt(size_type offset) MIJIN_NOEXCEPT
{
MIJIN_ASSERT(offset % alignof(T) == 0, "Offset must be correctly aligned.");
MIJIN_ASSERT(offset + sizeof(T) < bytes_.size(), "Buffer access out-of-range.");
return *std::bit_cast<T*>(bytes_.data() + offset);
}
template<typename T>
const T& TypelessBuffer::dataAt(size_type offset) const MIJIN_NOEXCEPT
{
MIJIN_ASSERT(offset % alignof(T) == 0, "Offset must be correctly aligned.");
MIJIN_ASSERT(offset + sizeof(T) < bytes_.size(), "Buffer access out-of-range.");
return *std::bit_cast<const T*>(bytes_.data() + offset);
}
} // namespace mijin } // namespace mijin
#endif // !defined(MIJIN_CONTAINER_TYPELESS_BUFFER_HPP_INCLUDED) #endif // !defined(MIJIN_CONTAINER_TYPELESS_BUFFER_HPP_INCLUDED)

View File

@ -85,6 +85,12 @@ public:
} }
return buffer_.byteCapacity() / elementSize_; return buffer_.byteCapacity() / elementSize_;
} }
[[nodiscard]]
std::size_t elementSize() const MIJIN_NOEXCEPT
{
return elementSize_;
}
}; };
} }