|
|
|
@ -208,7 +208,7 @@ public:
|
|
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
|
size_t ReadArray(T* data, size_t length) const {
|
|
|
|
|
static_assert(std::is_trivially_copyable<T>(),
|
|
|
|
|
static_assert(std::is_trivially_copyable_v<T>,
|
|
|
|
|
"Given array does not consist of trivially copyable objects");
|
|
|
|
|
|
|
|
|
|
if (!IsOpen()) {
|
|
|
|
@ -220,7 +220,7 @@ public:
|
|
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
|
size_t WriteArray(const T* data, size_t length) {
|
|
|
|
|
static_assert(std::is_trivially_copyable<T>(),
|
|
|
|
|
static_assert(std::is_trivially_copyable_v<T>,
|
|
|
|
|
"Given array does not consist of trivially copyable objects");
|
|
|
|
|
if (!IsOpen()) {
|
|
|
|
|
return std::numeric_limits<size_t>::max();
|
|
|
|
@ -231,19 +231,19 @@ public:
|
|
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
|
size_t ReadBytes(T* data, size_t length) const {
|
|
|
|
|
static_assert(std::is_trivially_copyable<T>(), "T must be trivially copyable");
|
|
|
|
|
static_assert(std::is_trivially_copyable_v<T>, "T must be trivially copyable");
|
|
|
|
|
return ReadArray(reinterpret_cast<char*>(data), length);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
|
size_t WriteBytes(const T* data, size_t length) {
|
|
|
|
|
static_assert(std::is_trivially_copyable<T>(), "T must be trivially copyable");
|
|
|
|
|
static_assert(std::is_trivially_copyable_v<T>, "T must be trivially copyable");
|
|
|
|
|
return WriteArray(reinterpret_cast<const char*>(data), length);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
|
size_t WriteObject(const T& object) {
|
|
|
|
|
static_assert(!std::is_pointer<T>::value, "Given object is a pointer");
|
|
|
|
|
static_assert(!std::is_pointer_v<T>, "WriteObject arguments must not be a pointer");
|
|
|
|
|
return WriteArray(&object, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|