aboutsummaryrefslogtreecommitdiff
path: root/src/common/file_util.h
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2018-04-29 18:18:39 -0400
committerLioncash <mathew1800@gmail.com>2018-04-29 18:24:12 -0400
commit40d2dcabd7e5b978c0e1e5c76000de01e2d0c270 (patch)
tree7749359774badad9b2bd602a69aa4a625fcb46ee /src/common/file_util.h
parent869075867bf7bda1323ee2bb32ec45a89dfdb0ca (diff)
file_util: Add static assertions to ReadBytes() and WriteBytes()
Ensure that the actual types being passed in are trivially copyable. The internal call to ReadArray() and WriteArray() will always succeed, since they're passed a pointer to char* which is always trivially copyable.
Diffstat (limited to 'src/common/file_util.h')
-rw-r--r--src/common/file_util.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/common/file_util.h b/src/common/file_util.h
index 4c11849eea..32ff4d8ca2 100644
--- a/src/common/file_util.h
+++ b/src/common/file_util.h
@@ -202,11 +202,15 @@ public:
return items_written;
}
- size_t ReadBytes(void* data, size_t length) {
+ template <typename T>
+ size_t ReadBytes(T* data, size_t length) {
+ static_assert(std::is_trivially_copyable<T>(), "T must be trivially copyable");
return ReadArray(reinterpret_cast<char*>(data), length);
}
- size_t WriteBytes(const void* data, size_t 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");
return WriteArray(reinterpret_cast<const char*>(data), length);
}