Added dataAt() to TypelessBuffer and elementSize() to UntypedVector.
This commit is contained in:
parent
461d3ec694
commit
6d2a57485e
@ -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)
|
||||||
|
@ -85,6 +85,12 @@ public:
|
|||||||
}
|
}
|
||||||
return buffer_.byteCapacity() / elementSize_;
|
return buffer_.byteCapacity() / elementSize_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[[nodiscard]]
|
||||||
|
std::size_t elementSize() const MIJIN_NOEXCEPT
|
||||||
|
{
|
||||||
|
return elementSize_;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user