Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/jolt_physics/Jolt/Core/ByteBuffer.h
9906 views
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
7
#include <Jolt/Core/STLAlignedAllocator.h>
8
9
JPH_NAMESPACE_BEGIN
10
11
/// Underlying data type for ByteBuffer
12
using ByteBufferVector = Array<uint8, STLAlignedAllocator<uint8, JPH_CACHE_LINE_SIZE>>;
13
14
/// Simple byte buffer, aligned to a cache line
15
class ByteBuffer : public ByteBufferVector
16
{
17
public:
18
/// Align the size to a multiple of inSize, returns the length after alignment
19
size_t Align(size_t inSize)
20
{
21
// Assert power of 2
22
JPH_ASSERT(IsPowerOf2(inSize));
23
24
// Calculate new size and resize buffer
25
size_t s = AlignUp(size(), inSize);
26
resize(s, 0);
27
28
return s;
29
}
30
31
/// Allocate block of data of inSize elements and return the pointer
32
template <class Type>
33
Type * Allocate(size_t inSize = 1)
34
{
35
// Reserve space
36
size_t s = size();
37
resize(s + inSize * sizeof(Type));
38
39
// Get data pointer
40
Type *data = reinterpret_cast<Type *>(&at(s));
41
42
// Construct elements
43
for (Type *d = data, *d_end = data + inSize; d < d_end; ++d)
44
new (d) Type;
45
46
// Return pointer
47
return data;
48
}
49
50
/// Append inData to the buffer
51
template <class Type>
52
void AppendVector(const Array<Type> &inData)
53
{
54
size_t size = inData.size() * sizeof(Type);
55
uint8 *data = Allocate<uint8>(size);
56
memcpy(data, &inData[0], size);
57
}
58
59
/// Get object at inPosition (an offset in bytes)
60
template <class Type>
61
const Type * Get(size_t inPosition) const
62
{
63
return reinterpret_cast<const Type *>(&at(inPosition));
64
}
65
66
/// Get object at inPosition (an offset in bytes)
67
template <class Type>
68
Type * Get(size_t inPosition)
69
{
70
return reinterpret_cast<Type *>(&at(inPosition));
71
}
72
};
73
74
JPH_NAMESPACE_END
75
76