1
0
Fork 0
forked from suyu/suyu

renderer_vulkan/wrapper: Address feedback

This commit is contained in:
ReinUsesLisp 2020-03-28 04:04:29 -03:00
parent 2694552b7f
commit b6c9fba81c

View file

@ -28,6 +28,16 @@ namespace Vulkan::vk {
template <typename T> template <typename T>
class Span { class Span {
public: public:
using value_type = T;
using size_type = u32;
using difference_type = std::ptrdiff_t;
using reference = const T&;
using const_reference = const T&;
using pointer = const T*;
using const_pointer = const T*;
using iterator = const T*;
using const_iterator = const T*;
/// Construct an empty span. /// Construct an empty span.
constexpr Span() noexcept = default; constexpr Span() noexcept = default;
@ -50,6 +60,7 @@ public:
} }
/// Returns the number of elements in the span. /// Returns the number of elements in the span.
/// @note Returns a 32 bits integer because most Vulkan functions expect this type.
constexpr u32 size() const noexcept { constexpr u32 size() const noexcept {
return static_cast<u32>(num); return static_cast<u32>(num);
} }
@ -75,6 +86,16 @@ public:
return ptr + num; return ptr + num;
} }
/// Returns an iterator to the beginning of the span.
constexpr const T* cbegin() const noexcept {
return ptr;
}
/// Returns an iterator to the end of the span.
constexpr const T* cend() const noexcept {
return ptr + num;
}
private: private:
const T* ptr = nullptr; const T* ptr = nullptr;
std::size_t num = 0; std::size_t num = 0;
@ -325,7 +346,7 @@ public:
/// Returns the address of the held object. /// Returns the address of the held object.
/// Intended for Vulkan structures that expect a pointer to an array. /// Intended for Vulkan structures that expect a pointer to an array.
const Type* address() const noexcept { const Type* address() const noexcept {
return &handle; return std::addressof(handle);
} }
/// Returns the held Vulkan handle. /// Returns the held Vulkan handle.
@ -334,7 +355,7 @@ public:
} }
/// Returns true when there's a held object. /// Returns true when there's a held object.
operator bool() const noexcept { explicit operator bool() const noexcept {
return handle != nullptr; return handle != nullptr;
} }
@ -396,7 +417,7 @@ public:
/// Returns the address of the held object. /// Returns the address of the held object.
/// Intended for Vulkan structures that expect a pointer to an array. /// Intended for Vulkan structures that expect a pointer to an array.
const Type* address() const noexcept { const Type* address() const noexcept {
return &handle; return std::addressof(handle);
} }
/// Returns the held Vulkan handle. /// Returns the held Vulkan handle.