2001-09-21 Dietmar Maurer <dietmar@ximian.com>
[mono.git] / mono / metadata / endian.h
1 #ifndef _MONO_METADATA_ENDIAN_H_
2 #define _MONO_METADATA_ENDIAN_H_ 1
3
4 #include <glib.h>
5
6 /* FIXME: implement support for misaligned reads */
7
8 typedef union {
9         guint32 ival;
10         float fval;
11 } mono_rfloat;
12
13 typedef union {
14         guint64 ival;
15         double fval;
16 } mono_rdouble;
17
18 #define read16(x) GUINT16_FROM_LE (*((guint16 *) (x)))
19 #define read32(x) GUINT32_FROM_LE (*((guint32 *) (x)))
20 #define read64(x) GUINT64_FROM_LE (*((guint64 *) (x)))
21
22 #define readr4(x,dest)  \
23         do {    \
24                 mono_rfloat mf; \
25                 mf.ival = read32 ((x)); \
26                 *(dest) = mf.fval;      \
27         } while (0)
28
29 #define readr8(x,dest)  \
30         do {    \
31                 mono_rdouble mf;        \
32                 mf.ival = read64 ((x)); \
33                 *(dest) = mf.fval;      \
34         } while (0)
35
36 #endif /* _MONO_METADATA_ENDIAN_H_ */