1 //////////////////////////////////////////////////////////////////////
3 // Tiny XDR implementation for flightgear
4 // written by Oliver Schroeder
5 // released to the puiblic domain
7 // This implementation is not complete, but implements
10 // For further reading on XDR read RFC 1832.
14 //////////////////////////////////////////////////////////////////////
16 #ifndef TINY_XDR_HEADER
17 #define TINY_XDR_HEADER
19 #if defined HAVE_CONFIG_H
23 #include <simgear/misc/stdint.hxx>
25 #define SWAP32(arg) sgIsLittleEndian() ? sg_bswap_32(arg) : arg
26 #define SWAP64(arg) sgIsLittleEndian() ? sg_bswap_64(arg) : arg
27 #define LOW sgIsLittleEndian()
28 #define HIGH sgIsBigEndian();
30 #define XDR_BYTES_PER_UNIT 4
32 typedef uint32_t xdr_data_t; /* 4 Bytes */
33 typedef uint64_t xdr_data2_t; /* 8 Bytes */
35 /* XDR 8bit integers */
36 xdr_data_t XDR_encode_int8 ( const int8_t & n_Val );
37 xdr_data_t XDR_encode_uint8 ( const uint8_t & n_Val );
38 int8_t XDR_decode_int8 ( const xdr_data_t & n_Val );
39 uint8_t XDR_decode_uint8 ( const xdr_data_t & n_Val );
41 /* XDR 16bit integers */
42 xdr_data_t XDR_encode_int16 ( const int16_t & n_Val );
43 xdr_data_t XDR_encode_uint16 ( const uint16_t & n_Val );
44 int16_t XDR_decode_int16 ( const xdr_data_t & n_Val );
45 uint16_t XDR_decode_uint16 ( const xdr_data_t & n_Val );
47 /* XDR 32bit integers */
48 xdr_data_t XDR_encode_int32 ( const int32_t & n_Val );
49 xdr_data_t XDR_encode_uint32 ( const uint32_t & n_Val );
50 int32_t XDR_decode_int32 ( const xdr_data_t & n_Val );
51 uint32_t XDR_decode_uint32 ( const xdr_data_t & n_Val );
53 /* XDR 64bit integers */
54 xdr_data2_t XDR_encode_int64 ( const int64_t & n_Val );
55 xdr_data2_t XDR_encode_uint64 ( const uint64_t & n_Val );
56 int64_t XDR_decode_int64 ( const xdr_data2_t & n_Val );
57 uint64_t XDR_decode_uint64 ( const xdr_data2_t & n_Val );
59 //////////////////////////////////////////////////
61 // FIXME: #1 these funtions must be fixed for
62 // none IEEE-encoding architecturs
63 // (eg. vax, big suns etc)
64 // FIXME: #2 some compilers return 'double'
65 // regardless of return-type 'float'
66 // this must be fixed, too
67 // FIXME: #3 some machines may need to use a
68 // different endianess for floats!
70 //////////////////////////////////////////////////
72 xdr_data_t XDR_encode_float ( const float & f_Val );
73 float XDR_decode_float ( const xdr_data_t & f_Val );
76 xdr_data2_t XDR_encode_double ( const double & d_Val );
77 double XDR_decode_double ( const xdr_data2_t & d_Val );