]> git.mxchange.org Git - flightgear.git/blob - src/MultiPlayer/tiny_xdr.cxx
Merge commit 'refs/merge-requests/1551' of git://gitorious.org/fg/flightgear into...
[flightgear.git] / src / MultiPlayer / tiny_xdr.cxx
1 //////////////////////////////////////////////////////////////////////
2 //
3 //      Tiny XDR implementation for flightgear
4 //      written by Oliver Schroeder
5 //      released to the public domain
6 //
7 //      This implementation is not complete, but implements
8 //      everything we need.
9 //
10 //      For further reading on XDR read RFC 1832.
11 //
12 //////////////////////////////////////////////////////////////////////
13
14 #include <string>
15
16 #include <plib/ul.h>
17 #include <plib/netSocket.h>
18
19 #include "tiny_xdr.hxx"
20
21 /* XDR 8bit integers */
22 xdr_data_t
23 XDR_encode_int8 ( const int8_t & n_Val )
24 {
25     return (SWAP32(static_cast<xdr_data_t> (n_Val)));
26 }
27
28 xdr_data_t
29 XDR_encode_uint8 ( const uint8_t & n_Val )
30 {
31     return (SWAP32(static_cast<xdr_data_t> (n_Val)));
32 }
33
34 int8_t
35 XDR_decode_int8 ( const xdr_data_t & n_Val )
36 {
37     return (static_cast<int8_t> (SWAP32(n_Val)));
38 }
39
40 uint8_t
41 XDR_decode_uint8 ( const xdr_data_t & n_Val )
42 {
43     return (static_cast<uint8_t> (SWAP32(n_Val)));
44 }
45
46 /* XDR 16bit integers */
47 xdr_data_t
48 XDR_encode_int16 ( const int16_t & n_Val )
49 {
50     return (SWAP32(static_cast<xdr_data_t> (n_Val)));
51 }
52
53 xdr_data_t
54 XDR_encode_uint16 ( const uint16_t & n_Val )
55 {
56     return (SWAP32(static_cast<xdr_data_t> (n_Val)));
57 }
58
59 int16_t
60 XDR_decode_int16 ( const xdr_data_t & n_Val )
61 {
62     return (static_cast<int16_t> (SWAP32(n_Val)));
63 }
64
65 uint16_t
66 XDR_decode_uint16 ( const xdr_data_t & n_Val )
67 {
68     return (static_cast<uint16_t> (SWAP32(n_Val)));
69 }
70
71
72 /* XDR 32bit integers */
73 xdr_data_t
74 XDR_encode_int32 ( const int32_t & n_Val )
75 {
76     return (SWAP32(static_cast<xdr_data_t> (n_Val)));
77 }
78
79 xdr_data_t
80 XDR_encode_uint32 ( const uint32_t & n_Val )
81 {
82     return (SWAP32(static_cast<xdr_data_t> (n_Val)));
83 }
84
85 int32_t
86 XDR_decode_int32 ( const xdr_data_t & n_Val )
87 {
88     return (static_cast<int32_t> (SWAP32(n_Val)));
89 }
90
91 uint32_t
92 XDR_decode_uint32 ( const xdr_data_t & n_Val )
93 {
94     return (static_cast<uint32_t> (SWAP32(n_Val)));
95 }
96
97
98 /* XDR 64bit integers */
99 xdr_data2_t
100 XDR_encode_int64 ( const int64_t & n_Val )
101 {
102     return (SWAP64(static_cast<xdr_data2_t> (n_Val)));
103 }
104
105 xdr_data2_t
106 XDR_encode_uint64 ( const uint64_t & n_Val )
107 {
108     return (SWAP64(static_cast<xdr_data2_t> (n_Val)));
109 }
110
111 int64_t
112 XDR_decode_int64 ( const xdr_data2_t & n_Val )
113 {
114     return (static_cast<int64_t> (SWAP64(n_Val)));
115 }
116
117 uint64_t
118 XDR_decode_uint64 ( const xdr_data2_t & n_Val )
119 {
120     return (static_cast<uint64_t> (SWAP64(n_Val)));
121 }
122
123
124 /* float */
125 xdr_data_t
126 XDR_encode_float ( const float & f_Val )
127 {
128     union {
129         xdr_data_t x;
130         float f;
131     } tmp;
132
133     tmp.f = f_Val;
134     return (XDR_encode_int32 (tmp.x));
135 }
136
137 float
138 XDR_decode_float ( const xdr_data_t & f_Val )
139 {
140     union {
141         xdr_data_t x;
142         float f;
143     } tmp;
144
145     tmp.x = XDR_decode_int32 (f_Val);
146     return tmp.f;
147 }
148
149 /* double */
150 xdr_data2_t
151 XDR_encode_double ( const double & d_Val )
152 {
153     union {
154         xdr_data2_t x;
155         double d;
156     } tmp;
157
158     tmp.d = d_Val;
159     return (XDR_encode_int64 (tmp.x));
160 }
161
162 double
163 XDR_decode_double ( const xdr_data2_t & d_Val )
164 {
165     union {
166         xdr_data2_t x;
167         double d;
168     } tmp;
169
170     tmp.x = XDR_decode_int64 (d_Val);
171     return tmp.d;
172 }
173