]> git.mxchange.org Git - flightgear.git/blob - src/MultiPlayer/tiny_xdr.cxx
returning addresses of auto vars is *dangerous* (ask Vasilii! :-)
[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 <plib/ul.h>
15
16 #include "tiny_xdr.hxx"
17
18 /* XDR 8bit integers */
19 xdr_data_t
20 XDR_encode_int8 ( const int8_t & n_Val )
21 {
22     return (SWAP32(static_cast<xdr_data_t> (n_Val)));
23 }
24
25 xdr_data_t
26 XDR_encode_uint8 ( const uint8_t & n_Val )
27 {
28     return (SWAP32(static_cast<xdr_data_t> (n_Val)));
29 }
30
31 int8_t
32 XDR_decode_int8 ( const xdr_data_t & n_Val )
33 {
34     return (static_cast<int8_t> (SWAP32(n_Val)));
35 }
36
37 uint8_t
38 XDR_decode_uint8 ( const xdr_data_t & n_Val )
39 {
40     return (static_cast<uint8_t> (SWAP32(n_Val)));
41 }
42
43 /* XDR 16bit integers */
44 xdr_data_t
45 XDR_encode_int16 ( const int16_t & n_Val )
46 {
47     return (SWAP32(static_cast<xdr_data_t> (n_Val)));
48 }
49
50 xdr_data_t
51 XDR_encode_uint16 ( const uint16_t & n_Val )
52 {
53     return (SWAP32(static_cast<xdr_data_t> (n_Val)));
54 }
55
56 int16_t
57 XDR_decode_int16 ( const xdr_data_t & n_Val )
58 {
59     return (static_cast<int16_t> (SWAP32(n_Val)));
60 }
61
62 uint16_t
63 XDR_decode_uint16 ( const xdr_data_t & n_Val )
64 {
65     return (static_cast<uint16_t> (SWAP32(n_Val)));
66 }
67
68
69 /* XDR 32bit integers */
70 xdr_data_t
71 XDR_encode_int32 ( const int32_t & n_Val )
72 {
73     return (SWAP32(static_cast<xdr_data_t> (n_Val)));
74 }
75
76 xdr_data_t
77 XDR_encode_uint32 ( const uint32_t & n_Val )
78 {
79     return (SWAP32(static_cast<xdr_data_t> (n_Val)));
80 }
81
82 int32_t
83 XDR_decode_int32 ( const xdr_data_t & n_Val )
84 {
85     return (static_cast<int32_t> (SWAP32(n_Val)));
86 }
87
88 uint32_t
89 XDR_decode_uint32 ( const xdr_data_t & n_Val )
90 {
91     return (static_cast<uint32_t> (SWAP32(n_Val)));
92 }
93
94
95 /* XDR 64bit integers */
96 xdr_data2_t
97 XDR_encode_int64 ( const int64_t & n_Val )
98 {
99     return (SWAP64(static_cast<xdr_data2_t> (n_Val)));
100 }
101
102 xdr_data2_t
103 XDR_encode_uint64 ( const uint64_t & n_Val )
104 {
105     return (SWAP64(static_cast<xdr_data2_t> (n_Val)));
106 }
107
108 int64_t
109 XDR_decode_int64 ( const xdr_data2_t & n_Val )
110 {
111     return (static_cast<int64_t> (SWAP64(n_Val)));
112 }
113
114 uint64_t
115 XDR_decode_uint64 ( const xdr_data2_t & n_Val )
116 {
117     return (static_cast<uint64_t> (SWAP64(n_Val)));
118 }
119
120
121 /* float */
122 xdr_data_t
123 XDR_encode_float ( const float & f_Val )
124 {
125     xdr_data_t* tmp;
126
127     tmp = (xdr_data_t*) &f_Val;
128     return (XDR_encode_int32 (*tmp));
129 }
130
131 float
132 XDR_decode_float ( const xdr_data_t & f_Val )
133 {
134     float* tmp;
135     static xdr_data_t dummy;
136
137     dummy = XDR_decode_int32 (f_Val);
138     tmp = (float*) &dummy;
139     return (*tmp);
140 }
141
142 /* double */
143 xdr_data2_t
144 XDR_encode_double ( const double & d_Val )
145 {
146     xdr_data2_t* tmp;
147
148     tmp = (xdr_data2_t*) &d_Val;
149     return (XDR_encode_int64 (*tmp));
150 }
151
152 double
153 XDR_decode_double ( const xdr_data2_t & d_Val )
154 {
155     double* tmp;
156     static xdr_data2_t dummy;
157
158     dummy = XDR_decode_int64 (d_Val);
159     tmp = (double*) &dummy;
160     return (*tmp);
161 }
162
163