Nebula
Toggle main menu visibility
Loading...
Searching...
No Matches
darwinbyteorder.h
Go to the documentation of this file.
1
#pragma once
2
#ifndef DARWIN_DARWINBYTEORDER_H
3
#define DARWIN_DARWINBYTEORDER_H
4
//------------------------------------------------------------------------------
11
#include "
core/types.h
"
12
#include <libkern/OSByteOrder.h>
13
14
//------------------------------------------------------------------------------
15
namespace
System
16
{
17
class
ByteOrder
18
{
19
public
:
20
// byte orders
21
enum
Type
22
{
23
LittleEndian
= 0,
// e.g. x86
24
BigEndian
,
// e.g. PowerPC
25
Network
=
BigEndian
,
// network byte order
26
27
#if __WIN32__
28
Host
=
LittleEndian
,
29
#else
30
Host
=
BigEndian
,
31
#endif
32
};
33
35
ByteOrder
();
37
ByteOrder
(
Type
fromByteOrder,
Type
toByteOrder);
39
void
SetFromByteOrder
(
Type
fromByteOrder);
41
Type
GetFromByteOrder
()
const
;
43
void
SetToByteOrder
(
Type
toByteOrder);
45
Type
GetToByteOrder
()
const
;
47
template
<
class
TYPE>
void
Convert
(TYPE& val)
const
;
48
49
private
:
50
Type
from
;
51
Type
to
;
52
};
53
54
//------------------------------------------------------------------------------
57
__forceinline
58
ByteOrder::ByteOrder
() :
59
from(Host),
60
to(Host)
61
{
62
// empty
63
}
64
65
//------------------------------------------------------------------------------
68
__forceinline
69
ByteOrder::ByteOrder
(
ByteOrder::Type
fromByteOrder,
ByteOrder::Type
toByteOrder) :
70
from(fromByteOrder),
71
to(toByteOrder)
72
{
73
// empty
74
}
75
76
//------------------------------------------------------------------------------
79
__forceinline
void
80
ByteOrder::SetFromByteOrder
(Type fromByteOrder)
81
{
82
this->
from
= fromByteOrder;
83
}
84
85
//------------------------------------------------------------------------------
88
__forceinline
ByteOrder::Type
89
ByteOrder::GetFromByteOrder
()
const
90
{
91
return
this->
from
;
92
}
93
94
//------------------------------------------------------------------------------
97
__forceinline
void
98
ByteOrder::SetToByteOrder
(Type toByteOrder)
99
{
100
this->
to
= toByteOrder;
101
}
102
103
//------------------------------------------------------------------------------
106
__forceinline
ByteOrder::Type
107
ByteOrder::GetToByteOrder
()
const
108
{
109
return
this->
to
;
110
}
111
112
//------------------------------------------------------------------------------
115
template
<> __forceinline
void
116
ByteOrder::Convert<short>
(
short
& val)
const
117
{
118
if
(this->
from
!= this->
to
)
119
{
120
ushort
res = OSSwapInt16(*(
ushort
*)&val);
121
val = *(
short
*)&res;
122
}
123
}
124
125
//------------------------------------------------------------------------------
128
template
<> __forceinline
void
129
ByteOrder::Convert<ushort>
(
ushort
& val)
const
130
{
131
if
(this->
from
!= this->
to
)
132
{
133
val = OSSwapInt16(val);
134
}
135
}
136
137
//------------------------------------------------------------------------------
140
template
<> __forceinline
void
141
ByteOrder::Convert<int>
(
int
& val)
const
142
{
143
if
(this->
from
!= this->
to
)
144
{
145
uint
res = OSSwapInt32(*(
uint
*)&val);
146
val = *(
int
*)&res;
147
}
148
}
149
150
//------------------------------------------------------------------------------
153
template
<> __forceinline
void
154
ByteOrder::Convert<uint>
(
uint
& val)
const
155
{
156
if
(this->
from
!= this->
to
)
157
{
158
val = OSSwapInt32(val);
159
}
160
}
161
162
//------------------------------------------------------------------------------
165
template
<> __forceinline
void
166
ByteOrder::Convert<float>
(
float
& val)
const
167
{
168
if
(this->
from
!= this->
to
)
169
{
170
uint
res = OSSwapInt32(*(
uint
*)&val);
171
val = *(
float
*)&res;
172
}
173
}
174
175
//------------------------------------------------------------------------------
178
template
<> __forceinline
void
179
ByteOrder::Convert<double>
(
double
& val)
const
180
{
181
if
(this->
from
!= this->
to
)
182
{
183
unsigned
long
long
res = OSSwapInt64(*(
unsigned
long
long
*)&val);
184
val = *(
double
*)&res;
185
}
186
}
187
188
//------------------------------------------------------------------------------
191
template
<> __forceinline
void
192
ByteOrder::Convert<Math::float4>
(
Math::float4
& val)
const
193
{
194
if
(this->from != this->to)
195
{
196
Convert<float>(val.
x
());
197
Convert<float>(val.
y
());
198
Convert<float>(val.
z
());
199
Convert<float>(val.
w
());
200
}
201
}
202
203
//------------------------------------------------------------------------------
206
template
<> __forceinline
void
207
ByteOrder::Convert<Math::matrix44>
(Math::matrix44& val)
const
208
{
209
if
(this->from != this->to)
210
{
211
Math::float4
row0 = val.getrow0();
212
Math::float4
row1 = val.getrow1();
213
Math::float4
row2 = val.getrow2();
214
Math::float4
row3 = val.getrow3();
215
Convert<Math::float4>
(row0);
216
Convert<Math::float4>
(row1);
217
Convert<Math::float4>
(row2);
218
Convert<Math::float4>
(row3);
219
val.setrow0(row0);
220
val.setrow1(row1);
221
val.setrow2(row2);
222
val.setrow3(row3);
223
}
224
}
225
226
}
// namespace System
227
//------------------------------------------------------------------------------
228
#endif
ByteOrder
(C) 2007 Radon Labs GmbH (C) 2013-2018 Individual contributors, see AUTHORS file
System::ByteOrder::SetFromByteOrder
void SetFromByteOrder(Type fromByteOrder)
set from-byte-order
Definition
byteorder.h:113
System::ByteOrder::ByteOrder
ByteOrder()
default constructor
System::ByteOrder::from
Type from
Definition
byteorder.h:72
System::ByteOrder::Convert
void Convert(TYPE &val) const
endian-convert in place
System::ByteOrder::GetToByteOrder
Type GetToByteOrder() const
get to-byte-order
Definition
byteorder.h:140
System::ByteOrder::SetToByteOrder
void SetToByteOrder(Type toByteOrder)
set to-byte-order
System::ByteOrder::to
Type to
Definition
byteorder.h:73
System::ByteOrder::ByteOrder
ByteOrder()
default constructor
Definition
byteorder.h:91
System::ByteOrder::Type
Type
Definition
byteorder.h:37
System::ByteOrder::Network
@ Network
Definition
byteorder.h:40
System::ByteOrder::Host
@ Host
Definition
byteorder.h:46
System::ByteOrder::BigEndian
@ BigEndian
Definition
byteorder.h:39
System::ByteOrder::LittleEndian
@ LittleEndian
Definition
byteorder.h:38
System::ByteOrder::GetFromByteOrder
Type GetFromByteOrder() const
get from-byte-order
Definition
byteorder.h:122
System::ByteOrder::ByteOrder
ByteOrder(Type fromByteOrder, Type toByteOrder)
constructor: set byte order conversion rule
System::ByteOrder::SetFromByteOrder
void SetFromByteOrder(Type fromByteOrder)
set from-byte-order
System::ByteOrder::SetToByteOrder
void SetToByteOrder(Type toByteOrder)
set to-byte-order
Definition
byteorder.h:131
System::ByteOrder::Convert
TYPE Convert(TYPE val) const
endian-convert by copy
System::ByteOrder::GetToByteOrder
Type GetToByteOrder() const
get to-byte-order
System::ByteOrder::GetFromByteOrder
Type GetFromByteOrder() const
get from-byte-order
System
Definition
osxsysfunc.h:15
System::Convert< Math::float4 >
__forceinline void ByteOrder::Convert< Math::float4 >(Math::float4 &val) const
Definition
darwinbyteorder.h:192
Math::float4
Definition
scalar.h:76
Math::float4::x
scalar x
Definition
scalar.h:79
Math::float4::y
scalar y
Definition
scalar.h:79
Math::float4::w
scalar w
Definition
scalar.h:79
Math::float4::z
scalar z
Definition
scalar.h:79
types.h
uint
unsigned int uint
Definition
types.h:33
ushort
unsigned short ushort
Definition
types.h:34
code
foundation
system
darwin
darwinbyteorder.h
Generated on
for Nebula. Dark theme by
Tilen Majerle
. All rights reserved.