util/WritableBuffer: add cast methods
This commit is contained in:
parent
e5a2efaa65
commit
f2a20a0a80
@ -32,7 +32,11 @@
|
|||||||
|
|
||||||
#include "Compiler.h"
|
#include "Compiler.h"
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <cstddef>
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
#include <assert.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A reference to a memory area that is writable.
|
* A reference to a memory area that is writable.
|
||||||
@ -52,6 +56,8 @@ struct WritableBuffer {
|
|||||||
|
|
||||||
WritableBuffer() = default;
|
WritableBuffer() = default;
|
||||||
|
|
||||||
|
constexpr WritableBuffer(std::nullptr_t):data(nullptr), size(0) {}
|
||||||
|
|
||||||
constexpr WritableBuffer(pointer_type _data, size_type _size)
|
constexpr WritableBuffer(pointer_type _data, size_type _size)
|
||||||
:data(_data), size(_size) {}
|
:data(_data), size(_size) {}
|
||||||
|
|
||||||
@ -59,6 +65,29 @@ struct WritableBuffer {
|
|||||||
return { nullptr, 0 };
|
return { nullptr, 0 };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cast a WritableBuffer<void> to a WritableBuffer<T>. A "void"
|
||||||
|
* buffer records its size in bytes, and when casting to "T",
|
||||||
|
* the assertion below ensures that the size is a multiple of
|
||||||
|
* sizeof(T).
|
||||||
|
*/
|
||||||
|
#ifdef NDEBUG
|
||||||
|
constexpr
|
||||||
|
#endif
|
||||||
|
static WritableBuffer<T> FromVoid(WritableBuffer<void> other) {
|
||||||
|
static_assert(sizeof(T) > 0, "Empty base type");
|
||||||
|
#ifndef NDEBUG
|
||||||
|
assert(other.size % sizeof(T) == 0);
|
||||||
|
#endif
|
||||||
|
return WritableBuffer<T>(pointer_type(other.data),
|
||||||
|
other.size / sizeof(T));
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr WritableBuffer<void> ToVoid() const {
|
||||||
|
static_assert(sizeof(T) > 0, "Empty base type");
|
||||||
|
return WritableBuffer<void>(data, size * sizeof(T));
|
||||||
|
}
|
||||||
|
|
||||||
constexpr bool IsNull() const {
|
constexpr bool IsNull() const {
|
||||||
return data == nullptr;
|
return data == nullptr;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user