Jolt Physics
A multi core friendly Game Physics Engine
Loading...
Searching...
No Matches
StreamIn.h
Go to the documentation of this file.
1// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
2// SPDX-FileCopyrightText: 2021 Jorrit Rouwe
3// SPDX-License-Identifier: MIT
4
5#pragma once
6
8
10
13{
14public:
16 virtual ~StreamIn() = default;
17
19 virtual void ReadBytes(void *outData, size_t inNumBytes) = 0;
20
23 virtual bool IsEOF() const = 0;
24
26 virtual bool IsFailed() const = 0;
27
29 template <class T, std::enable_if_t<std::is_trivially_copyable_v<T>, bool> = true>
30 void Read(T &outT)
31 {
32 ReadBytes(&outT, sizeof(outT));
33 }
34
36 template <class T, class A, std::enable_if_t<std::is_trivially_copyable_v<T>, bool> = true>
37 void Read(Array<T, A> &outT)
38 {
39 uint32 len = uint32(outT.size()); // Initialize to previous array size, this is used for validation in the StateRecorder class
40 Read(len);
41 if (!IsEOF() && !IsFailed())
42 {
43 outT.resize(len);
44 if constexpr (std::is_same_v<T, Vec3> || std::is_same_v<T, DVec3> || std::is_same_v<T, DMat44>)
45 {
46 // These types have unused components that we don't want to read
47 for (typename Array<T, A>::size_type i = 0; i < len; ++i)
48 Read(outT[i]);
49 }
50 else
51 {
52 // Read all elements at once
53 ReadBytes(outT.data(), len * sizeof(T));
54 }
55 }
56 else
57 outT.clear();
58 }
59
61 template <class Type, class Traits, class Allocator>
62 void Read(std::basic_string<Type, Traits, Allocator> &outString)
63 {
64 uint32 len = 0;
65 Read(len);
66 if (!IsEOF() && !IsFailed())
67 {
68 outString.resize(len);
69 ReadBytes(outString.data(), len * sizeof(Type));
70 }
71 else
72 outString.clear();
73 }
74
76 template <class T, class A, typename F>
77 void Read(Array<T, A> &outT, const F &inReadElement)
78 {
79 uint32 len = uint32(outT.size()); // Initialize to previous array size, this is used for validation in the StateRecorder class
80 Read(len);
81 if (!IsEOF() && !IsFailed())
82 {
83 outT.resize(len);
84 for (typename Array<T, A>::size_type i = 0; i < len; ++i)
85 inReadElement(*this, outT[i]);
86 }
87 else
88 outT.clear();
89 }
90
92 void Read(Vec3 &outVec)
93 {
94 ReadBytes(&outVec, 3 * sizeof(float));
95 outVec = Vec3::sFixW(outVec.mValue);
96 }
97
99 void Read(DVec3 &outVec)
100 {
101 ReadBytes(&outVec, 3 * sizeof(double));
102 outVec = DVec3::sFixW(outVec.mValue);
103 }
104
106 void Read(DMat44 &outVec)
107 {
108 Vec4 x, y, z;
109 Read(x);
110 Read(y);
111 Read(z);
112
113 DVec3 t;
114 Read(t);
115
116 outVec = DMat44(x, y, z, t);
117 }
118};
119
#define JPH_EXPORT
Definition Core.h:271
#define JPH_NAMESPACE_END
Definition Core.h:414
std::uint32_t uint32
Definition Core.h:484
#define JPH_NAMESPACE_BEGIN
Definition Core.h:408
Definition Array.h:36
void resize(size_type inNewSize)
Resize array to new length.
Definition Array.h:120
size_t size_type
Definition Array.h:40
const T * data() const
Definition Array.h:444
size_type size() const
Returns amount of elements in the array.
Definition Array.h:320
void clear()
Destruct all elements and set length to zero.
Definition Array.h:145
Holds a 4x4 matrix of floats with the last column consisting of doubles.
Definition DMat44.h:13
Definition DVec3.h:14
static JPH_INLINE Type sFixW(TypeArg inValue)
Internal helper function that ensures that the Z component is replicated to the W component to preven...
Definition DVec3.inl:92
Type mValue
Definition DVec3.h:282
Class that makes another class non-copyable. Usage: Inherit from NonCopyable.
Definition NonCopyable.h:11
Simple binary input stream.
Definition StreamIn.h:13
virtual ~StreamIn()=default
Virtual destructor.
void Read(T &outT)
Read a primitive (e.g. float, int, etc.) from the binary stream.
Definition StreamIn.h:30
void Read(Array< T, A > &outT, const F &inReadElement)
Read a vector of primitives from the binary stream using a custom function to read the elements.
Definition StreamIn.h:77
void Read(std::basic_string< Type, Traits, Allocator > &outString)
Read a string from the binary stream (reads the number of characters and then the characters)
Definition StreamIn.h:62
void Read(Vec3 &outVec)
Read a Vec3 (don't read W)
Definition StreamIn.h:92
virtual void ReadBytes(void *outData, size_t inNumBytes)=0
Read a string of bytes from the binary stream.
virtual bool IsEOF() const =0
virtual bool IsFailed() const =0
Returns true if there was an IO failure.
void Read(DMat44 &outVec)
Read a DMat44 (don't read W component of translation)
Definition StreamIn.h:106
void Read(Array< T, A > &outT)
Read a vector of primitives from the binary stream.
Definition StreamIn.h:37
void Read(DVec3 &outVec)
Read a DVec3 (don't read W)
Definition StreamIn.h:99
Definition Vec3.h:17
static JPH_INLINE Type sFixW(Type inValue)
Internal helper function that ensures that the Z component is replicated to the W component to preven...
Type mValue
Definition Vec3.h:289
Definition Vec4.h:14