Jolt Physics
A multi core friendly Game Physics Engine
Loading...
Searching...
No Matches
StreamOut.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 ~StreamOut() = default;
17
19 virtual void WriteBytes(const void *inData, size_t inNumBytes) = 0;
20
22 virtual bool IsFailed() const = 0;
23
25 template <class T>
26 void Write(const T &inT)
27 {
28 WriteBytes(&inT, sizeof(inT));
29 }
30
32 template <class T, class A>
33 void Write(const std::vector<T, A> &inT)
34 {
35 typename Array<T>::size_type len = inT.size();
36 Write(len);
37 if (!IsFailed())
38 for (typename Array<T>::size_type i = 0; i < len; ++i)
39 Write(inT[i]);
40 }
41
43 template <class Type, class Traits, class Allocator>
44 void Write(const std::basic_string<Type, Traits, Allocator> &inString)
45 {
46 typename std::basic_string<Type, Traits, Allocator>::size_type len = inString.size();
47 Write(len);
48 if (!IsFailed())
49 WriteBytes(inString.data(), len * sizeof(Type));
50 }
51
53 template <class T, class A, typename F>
54 void Write(const std::vector<T, A> &inT, const F &inWriteElement)
55 {
56 typename Array<T>::size_type len = inT.size();
57 Write(len);
58 if (!IsFailed())
59 for (typename Array<T>::size_type i = 0; i < len; ++i)
60 inWriteElement(inT[i], *this);
61 }
62
64 void Write(const Vec3 &inVec)
65 {
66 WriteBytes(&inVec, 3 * sizeof(float));
67 }
68
70 void Write(const DVec3 &inVec)
71 {
72 WriteBytes(&inVec, 3 * sizeof(double));
73 }
74
76 void Write(const DMat44 &inVec)
77 {
78 Write(inVec.GetColumn4(0));
79 Write(inVec.GetColumn4(1));
80 Write(inVec.GetColumn4(2));
81
82 Write(inVec.GetTranslation());
83 }
84};
85
#define JPH_EXPORT
Definition: Core.h:227
#define JPH_NAMESPACE_END
Definition: Core.h:367
#define JPH_NAMESPACE_BEGIN
Definition: Core.h:361
std::vector< T, STLAllocator< T > > Array
Definition: STLAllocator.h:81
Holds a 4x4 matrix of floats with the last column consisting of doubles.
Definition: DMat44.h:13
JPH_INLINE Vec4 GetColumn4(uint inCol) const
Definition: DMat44.h:115
JPH_INLINE DVec3 GetTranslation() const
Definition: DMat44.h:111
Definition: DVec3.h:14
Class that makes another class non-copyable. Usage: Inherit from NonCopyable.
Definition: NonCopyable.h:11
Simple binary output stream.
Definition: StreamOut.h:13
void Write(const Vec3 &inVec)
Write a Vec3 (don't write W)
Definition: StreamOut.h:64
void Write(const DMat44 &inVec)
Write a DMat44 (don't write W component of translation)
Definition: StreamOut.h:76
void Write(const std::vector< T, A > &inT, const F &inWriteElement)
Write a vector of primitives to the binary stream using a custom write function.
Definition: StreamOut.h:54
void Write(const std::vector< T, A > &inT)
Write a vector of primitives to the binary stream.
Definition: StreamOut.h:33
virtual bool IsFailed() const =0
Returns true if there was an IO failure.
void Write(const DVec3 &inVec)
Write a DVec3 (don't write W)
Definition: StreamOut.h:70
virtual void WriteBytes(const void *inData, size_t inNumBytes)=0
Write a string of bytes to the binary stream.
void Write(const T &inT)
Write a primitive (e.g. float, int, etc.) to the binary stream.
Definition: StreamOut.h:26
void Write(const std::basic_string< Type, Traits, Allocator > &inString)
Write a string to the binary stream (writes the number of characters and then the characters)
Definition: StreamOut.h:44
virtual ~StreamOut()=default
Virtual destructor.
Definition: Vec3.h:16