Mercurial > minori
comparison include/core/byte_stream.h @ 369:47c9f8502269
*: clang-format all the things
I've edited the formatting a bit. Now pointer asterisks (and reference
ampersands) are on the variable instead of the type, as well as having
newlines for function braces (but nothing else)
| author | Paper <paper@tflc.us> |
|---|---|
| date | Fri, 25 Jul 2025 10:16:02 -0400 |
| parents | 99c961c91809 |
| children | 963047512d34 |
comparison
equal
deleted
inserted
replaced
| 368:6d37a998cf91 | 369:47c9f8502269 |
|---|---|
| 1 #ifndef MINORI_CORE_BYTE_STREAM_H_ | 1 #ifndef MINORI_CORE_BYTE_STREAM_H_ |
| 2 #define MINORI_CORE_BYTE_STREAM_H_ | 2 #define MINORI_CORE_BYTE_STREAM_H_ |
| 3 | 3 |
| 4 #include "core/endian.h" | 4 #include "core/endian.h" |
| 5 | 5 |
| 6 #include <cstdint> | |
| 7 #include <cstdlib> | |
| 6 #include <string> | 8 #include <string> |
| 9 #include <type_traits> | |
| 7 #include <vector> | 10 #include <vector> |
| 8 #include <cstdint> | |
| 9 #include <type_traits> | |
| 10 | 11 |
| 11 struct ByteStream { | 12 struct ByteStream { |
| 12 public: | 13 public: |
| 13 enum class ByteOrder { | 14 enum class ByteOrder { |
| 14 Little, | 15 Little, |
| 19 | 20 |
| 20 void ResetOffset(); | 21 void ResetOffset(); |
| 21 void SetEndianness(ByteOrder endian); | 22 void SetEndianness(ByteOrder endian); |
| 22 | 23 |
| 23 template<typename T> | 24 template<typename T> |
| 24 bool ReadBinary(T& ret) { | 25 bool ReadBinary(T &ret) |
| 26 { | |
| 25 if (offset_ + sizeof(T) >= size_) | 27 if (offset_ + sizeof(T) >= size_) |
| 26 return false; | 28 return false; |
| 27 | 29 |
| 28 ret = *reinterpret_cast<T*>(bytes_ + offset_); | 30 std::memcpy(&ret, bytes_ + offset_, sizeof(ret)); |
| 29 Advance(sizeof(T)); | 31 Advance(sizeof(T)); |
| 30 return true; | 32 return true; |
| 31 } | 33 } |
| 32 | 34 |
| 33 template<typename T> | 35 template<typename T> |
| 34 bool ReadInt(T& ret) { | 36 bool ReadInt(T &ret) |
| 37 { | |
| 35 static_assert(std::is_integral<T>::value); | 38 static_assert(std::is_integral<T>::value); |
| 36 | 39 |
| 37 if (!ReadBinary<T>(ret)) | 40 if (!ReadBinary<T>(ret)) |
| 38 return false; | 41 return false; |
| 39 | 42 |
| 58 } | 61 } |
| 59 | 62 |
| 60 return true; | 63 return true; |
| 61 } | 64 } |
| 62 | 65 |
| 63 bool ReadString(std::string& str, std::size_t size); | 66 bool ReadString(std::string &str, std::size_t size); |
| 64 bool Advance(std::size_t amount); | 67 bool Advance(std::size_t amount); |
| 65 | 68 |
| 66 private: | 69 private: |
| 67 /* raw data */ | 70 /* raw data */ |
| 68 std::uint8_t *bytes_ = nullptr; | 71 std::uint8_t *bytes_ = nullptr; |
