Richard Boegli's CnC_Generals_Zero_Hour Fork WIP
This is documentation of Richard Boegil's Zero Hour Fork
 
Loading...
Searching...
No Matches
endian.h
Go to the documentation of this file.
1/*
2** Command & Conquer Generals Zero Hour(tm)
3** Copyright 2025 Electronic Arts Inc.
4**
5** This program is free software: you can redistribute it and/or modify
6** it under the terms of the GNU General Public License as published by
7** the Free Software Foundation, either version 3 of the License, or
8** (at your option) any later version.
9**
10** This program is distributed in the hope that it will be useful,
11** but WITHOUT ANY WARRANTY; without even the implied warranty of
12** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13** GNU General Public License for more details.
14**
15** You should have received a copy of the GNU General Public License
16** along with this program. If not, see <http://www.gnu.org/licenses/>.
17*/
18
19#ifndef __ENDIAN_H__
20#define __ENDIAN_H__
21
22
23
24/*
25** Network order is big-endian.
26**
27** Packet router and mangler order is big or little endian depending on server platform.
28**
29** Game client order is little endian.
30*/
31extern bool BigEndian;
32
33template<class T> inline T Endian(T val)
34{
35 if (!BigEndian) {
36 return(val);
37 }
38
39/*
40 char temp[sizeof(T)];
41 *((T*)(&temp[0])) = val;
42*/
43
44 T retval = 0;
45
46/*
47 for (int i=0 ; i<sizeof(T) ; i++) {
48 retval <<= 8;
49 retval |= temp[i];
50 }
51*/
52
53 int len = sizeof(T);
54 unsigned char *c = (unsigned char *)(&val);
55 for (int i=0; i<len; i++)
56 {
57 retval |= ( (*c++) << (8*i) );
58 }
59
60 return (retval);
61}
62
63
64#endif //__ENDIAN_H__
65
bool BigEndian
T Endian(T val)
Definition endian.h:33