Shamrock
2025.10.0
Astrophysical Code
Loading...
Searching...
No Matches
shamalgs
include
shamalgs
details
SerializeHelperMember.hpp
Go to the documentation of this file.
1
// -------------------------------------------------------//
2
//
3
// SHAMROCK code for hydrodynamics
4
// Copyright (c) 2021-2026 Timothée David--Cléris <tim.shamrock@proton.me>
5
// SPDX-License-Identifier: CeCILL Free Software License Agreement v2.1
6
// Shamrock is licensed under the CeCILL 2.1 License, see LICENSE for more information
7
//
8
// -------------------------------------------------------//
9
10
#pragma once
11
19
#include "
shambase/memory.hpp
"
20
#include "
shambackends/sycl.hpp
"
21
#include "
shambackends/typeAliasVec.hpp
"
22
#include <type_traits>
23
#include <memory>
24
25
namespace
shamalgs::details {
26
27
template
<
class
T>
28
class
SerializeHelperMember
{
29
public
:
30
static
constexpr
u64
szrepr =
sizeof
(T);
31
inline
static
void
store(
u8
*ptr_store, T val) {
32
T *ptr = (T *) ptr_store;
33
*ptr = val;
34
}
35
inline
static
T load(
const
u8
*ptr_load) {
36
T *ptr = (T *) ptr_load;
37
return
*ptr;
38
}
39
};
40
41
template
<
class
T>
42
class
SerializeHelperMember
<sycl::vec<T, 2>> {
43
public
:
44
static
constexpr
i32
n = 2;
45
static
constexpr
u64
szrepr =
sizeof
(T) * n;
46
47
inline
static
void
store(
u8
*ptr_store, sycl::vec<T, n> val) {
48
T *ptr = (T *) ptr_store;
49
ptr[0] = val.x();
50
ptr[1] = val.y();
51
}
52
inline
static
sycl::vec<T, n> load(
const
u8
*ptr_load) {
53
T *ptr = (T *) ptr_load;
54
return
sycl::vec<T, n>{ptr[0], ptr[1]};
55
}
56
};
57
58
template
<
class
T>
59
class
SerializeHelperMember
<sycl::vec<T, 3>> {
60
public
:
61
static
constexpr
i32
n = 3;
62
static
constexpr
u64
szrepr =
sizeof
(T) * n;
63
64
inline
static
void
store(
u8
*ptr_store, sycl::vec<T, n> val) {
65
T *ptr = (T *) ptr_store;
66
ptr[0] = val.x();
67
ptr[1] = val.y();
68
ptr[2] = val.z();
69
}
70
inline
static
sycl::vec<T, n> load(
const
u8
*ptr_load) {
71
T *ptr = (T *) ptr_load;
72
return
sycl::vec<T, n>{ptr[0], ptr[1], ptr[2]};
73
}
74
};
75
76
template
<
class
T>
77
class
SerializeHelperMember
<sycl::vec<T, 4>> {
78
public
:
79
static
constexpr
i32
n = 4;
80
static
constexpr
u64
szrepr =
sizeof
(T) * n;
81
82
inline
static
void
store(
u8
*ptr_store, sycl::vec<T, n> val) {
83
T *ptr = (T *) ptr_store;
84
ptr[0] = val.x();
85
ptr[1] = val.y();
86
ptr[2] = val.z();
87
ptr[3] = val.w();
88
}
89
inline
static
sycl::vec<T, n> load(
const
u8
*ptr_load) {
90
T *ptr = (T *) ptr_load;
91
return
sycl::vec<T, n>{ptr[0], ptr[1], ptr[2], ptr[3]};
92
}
93
};
94
95
template
<
class
T>
96
class
SerializeHelperMember
<sycl::vec<T, 8>> {
97
public
:
98
static
constexpr
i32
n = 8;
99
static
constexpr
u64
szrepr =
sizeof
(T) * n;
100
101
inline
static
void
store(
u8
*ptr_store, sycl::vec<T, n> val) {
102
T *ptr = (T *) ptr_store;
103
ptr[0] = val.s0();
104
ptr[1] = val.s1();
105
ptr[2] = val.s2();
106
ptr[3] = val.s3();
107
ptr[4] = val.s4();
108
ptr[5] = val.s5();
109
ptr[6] = val.s6();
110
ptr[7] = val.s7();
111
}
112
inline
static
sycl::vec<T, n> load(
const
u8
*ptr_load) {
113
T *ptr = (T *) ptr_load;
114
return
sycl::vec<T, n>{ptr[0], ptr[1], ptr[2], ptr[3], ptr[4], ptr[5], ptr[6], ptr[7]};
115
}
116
};
117
118
template
<
class
T>
119
class
SerializeHelperMember
<sycl::vec<T, 16>> {
120
public
:
121
static
constexpr
i32
n = 16;
122
static
constexpr
u64
szrepr =
sizeof
(T) * n;
123
124
inline
static
void
store(
u8
*ptr_store, sycl::vec<T, n> val) {
125
T *ptr = (T *) ptr_store;
126
ptr[0] = val.s0();
127
ptr[1] = val.s1();
128
ptr[2] = val.s2();
129
ptr[3] = val.s3();
130
ptr[4] = val.s4();
131
ptr[5] = val.s5();
132
ptr[6] = val.s6();
133
ptr[7] = val.s7();
134
ptr[8] = val.s8();
135
ptr[9] = val.s9();
136
ptr[10] = val.sA();
137
ptr[11] = val.sB();
138
ptr[12] = val.sC();
139
ptr[13] = val.sD();
140
ptr[14] = val.sE();
141
ptr[15] = val.sF();
142
}
143
inline
static
sycl::vec<T, n> load(
const
u8
*ptr_load) {
144
T *ptr = (T *) ptr_load;
145
return
sycl::vec<T, n>{
146
ptr[0],
147
ptr[1],
148
ptr[2],
149
ptr[3],
150
ptr[4],
151
ptr[5],
152
ptr[6],
153
ptr[7],
154
ptr[8],
155
ptr[9],
156
ptr[10],
157
ptr[11],
158
ptr[12],
159
ptr[13],
160
ptr[14],
161
ptr[15]};
162
}
163
};
164
165
}
// namespace shamalgs::details
u8
std::uint8_t u8
8 bit unsigned integer
Definition
aliases_int.hpp:29
u64
std::uint64_t u64
64 bit unsigned integer
Definition
aliases_int.hpp:26
i32
std::int32_t i32
32 bit integer
Definition
aliases_int.hpp:23
shamalgs::details::SerializeHelperMember
Definition
SerializeHelperMember.hpp:28
memory.hpp
sycl.hpp
typeAliasVec.hpp
Generated on Wed May 13 2026 13:21:48 for Shamrock by
1.9.8