1 
2 
3 // ===============================================================================
4 // May be included multiple times - sets structure packing to 1
5 // for all supported compilers. #include <poppack1.h> reverts the changes.
6 //
7 // Currently this works on the following compilers:
8 // MSVC 7,8,9
9 // GCC
10 // BORLAND (complains about 'pack state changed but not reverted', but works)
11 // Clang
12 //
13 //
14 // USAGE:
15 //
16 // struct StructToBePacked {
17 // } PACK_STRUCT;
18 //
19 // ===============================================================================
20 
21 #ifdef AI_PUSHPACK_IS_DEFINED
22 #	error poppack1.h must be included after pushpack1.h
23 #endif
24 
25 #if defined(_MSC_VER) ||  defined(__BORLANDC__) ||	defined (__BCPLUSPLUS__)
26 #	pragma pack(push,1)
27 #	define PACK_STRUCT
28 #elif defined( __GNUC__ )
29 #	if !defined(HOST_MINGW)
30 #		define PACK_STRUCT	__attribute__((__packed__))
31 #	else
32 #		define PACK_STRUCT	__attribute__((gcc_struct, __packed__))
33 #	endif
34 #else
35 #	error Compiler not supported
36 #endif
37 
38 #if defined(_MSC_VER)
39 
40 // C4103: Packing was changed after the inclusion of the header, propably missing #pragma pop
41 #	pragma warning (disable : 4103)
42 #endif
43 
44 #define AI_PUSHPACK_IS_DEFINED
45 
46 
47