summaryrefslogtreecommitdiff
path: root/include/irrpack.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/irrpack.h')
-rw-r--r--include/irrpack.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/include/irrpack.h b/include/irrpack.h
new file mode 100644
index 0000000..ff922d0
--- /dev/null
+++ b/include/irrpack.h
@@ -0,0 +1,39 @@
+// Copyright (C) 2007-2012 Nikolaus Gebhardt
+// This file is part of the "Irrlicht Engine".
+// For conditions of distribution and use, see copyright notice in irrlicht.h
+
+// include this file right before the data structures to be 1-aligned
+// and add to each structure the PACK_STRUCT define just like this:
+// struct mystruct
+// {
+// ...
+// } PACK_STRUCT;
+// Always include the irrunpack.h file right after the last type declared
+// like this, and do not put any other types with different alignment
+// in between!
+
+// byte-align structures
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined (__BCPLUSPLUS__)
+# pragma warning(disable: 4103)
+# pragma pack( push, packing )
+# pragma pack( 1 )
+# define PACK_STRUCT
+#elif defined( __DMC__ )
+# pragma pack( push, 1 )
+# define PACK_STRUCT
+#elif defined( __GNUC__ )
+ // Using pragma pack might work with earlier gcc versions already, but
+ // it started to be necessary with gcc 4.7 on mingw unless compiled with -mno-ms-bitfields.
+ // And I found some hints on the web that older gcc versions on the other hand had sometimes
+ // trouble with pragma pack while they worked with __attribute__((packed)).
+# if (__GNUC__ > 4 ) || ((__GNUC__ == 4 ) && (__GNUC_MINOR__ >= 7))
+# pragma pack( push, packing )
+# pragma pack( 1 )
+# define PACK_STRUCT
+# else
+# define PACK_STRUCT __attribute__((packed))
+ #endif
+#else
+# error compiler not supported
+#endif
+