1*f6dc9357SAndroid Build Coastguard Worker // Common0.h 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #if defined(_MSC_VER) && _MSC_VER >= 1800 4*f6dc9357SAndroid Build Coastguard Worker #pragma warning(disable : 4464) // relative include path contains '..' 5*f6dc9357SAndroid Build Coastguard Worker #endif 6*f6dc9357SAndroid Build Coastguard Worker 7*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_COMMON0_H 8*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_COMMON0_H 9*f6dc9357SAndroid Build Coastguard Worker 10*f6dc9357SAndroid Build Coastguard Worker #include "../../C/Compiler.h" 11*f6dc9357SAndroid Build Coastguard Worker 12*f6dc9357SAndroid Build Coastguard Worker /* 13*f6dc9357SAndroid Build Coastguard Worker This file contains compiler related things for cpp files. 14*f6dc9357SAndroid Build Coastguard Worker This file is included to all cpp files in 7-Zip via "Common.h". 15*f6dc9357SAndroid Build Coastguard Worker Also this file is included in "IDecl.h" (that is included in interface files). 16*f6dc9357SAndroid Build Coastguard Worker So external modules can use 7-Zip interfaces without 17*f6dc9357SAndroid Build Coastguard Worker predefined macros defined in "Common.h". 18*f6dc9357SAndroid Build Coastguard Worker */ 19*f6dc9357SAndroid Build Coastguard Worker 20*f6dc9357SAndroid Build Coastguard Worker #ifdef _MSC_VER 21*f6dc9357SAndroid Build Coastguard Worker #pragma warning(disable : 4710) // function not inlined 22*f6dc9357SAndroid Build Coastguard Worker // 'CUncopyable::CUncopyable': 23*f6dc9357SAndroid Build Coastguard Worker #pragma warning(disable : 4514) // unreferenced inline function has been removed 24*f6dc9357SAndroid Build Coastguard Worker #if _MSC_VER < 1300 25*f6dc9357SAndroid Build Coastguard Worker #pragma warning(disable : 4702) // unreachable code 26*f6dc9357SAndroid Build Coastguard Worker #pragma warning(disable : 4714) // function marked as __forceinline not inlined 27*f6dc9357SAndroid Build Coastguard Worker #pragma warning(disable : 4786) // identifier was truncated to '255' characters in the debug information 28*f6dc9357SAndroid Build Coastguard Worker #endif 29*f6dc9357SAndroid Build Coastguard Worker #if _MSC_VER < 1400 30*f6dc9357SAndroid Build Coastguard Worker #pragma warning(disable : 4511) // copy constructor could not be generated // #pragma warning(disable : 4512) // assignment operator could not be generated 31*f6dc9357SAndroid Build Coastguard Worker #pragma warning(disable : 4512) // assignment operator could not be generated 32*f6dc9357SAndroid Build Coastguard Worker #endif 33*f6dc9357SAndroid Build Coastguard Worker #if _MSC_VER > 1400 && _MSC_VER <= 1900 34*f6dc9357SAndroid Build Coastguard Worker // #pragma warning(disable : 4996) 35*f6dc9357SAndroid Build Coastguard Worker // strcat: This function or variable may be unsafe 36*f6dc9357SAndroid Build Coastguard Worker // GetVersion was declared deprecated 37*f6dc9357SAndroid Build Coastguard Worker #endif 38*f6dc9357SAndroid Build Coastguard Worker 39*f6dc9357SAndroid Build Coastguard Worker #if _MSC_VER > 1200 40*f6dc9357SAndroid Build Coastguard Worker // -Wall warnings 41*f6dc9357SAndroid Build Coastguard Worker 42*f6dc9357SAndroid Build Coastguard Worker #if _MSC_VER <= 1600 43*f6dc9357SAndroid Build Coastguard Worker #pragma warning(disable : 4917) // 'OLE_HANDLE' : a GUID can only be associated with a class, interface or namespace 44*f6dc9357SAndroid Build Coastguard Worker #endif 45*f6dc9357SAndroid Build Coastguard Worker 46*f6dc9357SAndroid Build Coastguard Worker // #pragma warning(disable : 4061) // enumerator '' in switch of enum '' is not explicitly handled by a case label 47*f6dc9357SAndroid Build Coastguard Worker // #pragma warning(disable : 4266) // no override available for virtual member function from base ''; function is hidden 48*f6dc9357SAndroid Build Coastguard Worker #pragma warning(disable : 4625) // copy constructor was implicitly defined as deleted 49*f6dc9357SAndroid Build Coastguard Worker #pragma warning(disable : 4626) // assignment operator was implicitly defined as deleted 50*f6dc9357SAndroid Build Coastguard Worker #if _MSC_VER >= 1600 && _MSC_VER < 1920 51*f6dc9357SAndroid Build Coastguard Worker #pragma warning(disable : 4571) // Informational: catch(...) semantics changed since Visual C++ 7.1; structured exceptions (SEH) are no longer caught 52*f6dc9357SAndroid Build Coastguard Worker #endif 53*f6dc9357SAndroid Build Coastguard Worker #if _MSC_VER >= 1600 54*f6dc9357SAndroid Build Coastguard Worker #pragma warning(disable : 4365) // 'initializing' : conversion from 'int' to 'unsigned int', signed / unsigned mismatch 55*f6dc9357SAndroid Build Coastguard Worker #endif 56*f6dc9357SAndroid Build Coastguard Worker #if _MSC_VER < 1800 57*f6dc9357SAndroid Build Coastguard Worker // we disable the warning, if we don't use 'final' in class 58*f6dc9357SAndroid Build Coastguard Worker #pragma warning(disable : 4265) // class has virtual functions, but destructor is not virtual 59*f6dc9357SAndroid Build Coastguard Worker #endif 60*f6dc9357SAndroid Build Coastguard Worker 61*f6dc9357SAndroid Build Coastguard Worker #if _MSC_VER >= 1900 62*f6dc9357SAndroid Build Coastguard Worker #pragma warning(disable : 5026) // move constructor was implicitly defined as deleted 63*f6dc9357SAndroid Build Coastguard Worker #pragma warning(disable : 5027) // move assignment operator was implicitly defined as deleted 64*f6dc9357SAndroid Build Coastguard Worker #endif 65*f6dc9357SAndroid Build Coastguard Worker #if _MSC_VER >= 1912 66*f6dc9357SAndroid Build Coastguard Worker #pragma warning(disable : 5039) // pointer or reference to potentially throwing function passed to 'extern "C"' function under - EHc.Undefined behavior may occur if this function throws an exception. 67*f6dc9357SAndroid Build Coastguard Worker #endif 68*f6dc9357SAndroid Build Coastguard Worker #if _MSC_VER >= 1925 69*f6dc9357SAndroid Build Coastguard Worker // #pragma warning(disable : 5204) // 'ISequentialInStream' : class has virtual functions, but its trivial destructor is not virtual; instances of objects derived from this class may not be destructed correctly 70*f6dc9357SAndroid Build Coastguard Worker #endif 71*f6dc9357SAndroid Build Coastguard Worker #if _MSC_VER >= 1934 72*f6dc9357SAndroid Build Coastguard Worker // #pragma warning(disable : 5264) // const variable is not used 73*f6dc9357SAndroid Build Coastguard Worker #endif 74*f6dc9357SAndroid Build Coastguard Worker 75*f6dc9357SAndroid Build Coastguard Worker #endif // _MSC_VER > 1200 76*f6dc9357SAndroid Build Coastguard Worker #endif // _MSC_VER 77*f6dc9357SAndroid Build Coastguard Worker 78*f6dc9357SAndroid Build Coastguard Worker 79*f6dc9357SAndroid Build Coastguard Worker #if defined(_MSC_VER) // && !defined(__clang__) 80*f6dc9357SAndroid Build Coastguard Worker #define Z7_DECLSPEC_NOTHROW __declspec(nothrow) 81*f6dc9357SAndroid Build Coastguard Worker #elif defined(__clang__) || defined(__GNUC__) 82*f6dc9357SAndroid Build Coastguard Worker #define Z7_DECLSPEC_NOTHROW __attribute__((nothrow)) 83*f6dc9357SAndroid Build Coastguard Worker #else 84*f6dc9357SAndroid Build Coastguard Worker #define Z7_DECLSPEC_NOTHROW 85*f6dc9357SAndroid Build Coastguard Worker #endif 86*f6dc9357SAndroid Build Coastguard Worker 87*f6dc9357SAndroid Build Coastguard Worker /* 88*f6dc9357SAndroid Build Coastguard Worker #if defined (_MSC_VER) && _MSC_VER >= 1900 \ 89*f6dc9357SAndroid Build Coastguard Worker || defined(__clang__) && __clang_major__ >= 6 \ 90*f6dc9357SAndroid Build Coastguard Worker || defined(__GNUC__) && __GNUC__ >= 6 91*f6dc9357SAndroid Build Coastguard Worker #define Z7_noexcept noexcept 92*f6dc9357SAndroid Build Coastguard Worker #else 93*f6dc9357SAndroid Build Coastguard Worker #define Z7_noexcept throw() 94*f6dc9357SAndroid Build Coastguard Worker #endif 95*f6dc9357SAndroid Build Coastguard Worker */ 96*f6dc9357SAndroid Build Coastguard Worker 97*f6dc9357SAndroid Build Coastguard Worker 98*f6dc9357SAndroid Build Coastguard Worker #if defined(__clang__) 99*f6dc9357SAndroid Build Coastguard Worker 100*f6dc9357SAndroid Build Coastguard Worker #if /* defined(_WIN32) && */ __clang_major__ >= 16 101*f6dc9357SAndroid Build Coastguard Worker #pragma GCC diagnostic ignored "-Wc++98-compat-pedantic" 102*f6dc9357SAndroid Build Coastguard Worker #endif 103*f6dc9357SAndroid Build Coastguard Worker 104*f6dc9357SAndroid Build Coastguard Worker #if __clang_major__ >= 4 && __clang_major__ < 12 && !defined(_WIN32) 105*f6dc9357SAndroid Build Coastguard Worker /* 106*f6dc9357SAndroid Build Coastguard Worker if compiled with new GCC libstdc++, GCC libstdc++ can use: 107*f6dc9357SAndroid Build Coastguard Worker 13.2.0/include/c++/ 108*f6dc9357SAndroid Build Coastguard Worker <new> : #define _NEW 109*f6dc9357SAndroid Build Coastguard Worker <stdlib.h> : #define _GLIBCXX_STDLIB_H 1 110*f6dc9357SAndroid Build Coastguard Worker */ 111*f6dc9357SAndroid Build Coastguard Worker #pragma GCC diagnostic ignored "-Wreserved-id-macro" 112*f6dc9357SAndroid Build Coastguard Worker #endif 113*f6dc9357SAndroid Build Coastguard Worker 114*f6dc9357SAndroid Build Coastguard Worker // noexcept, final, = delete 115*f6dc9357SAndroid Build Coastguard Worker #pragma GCC diagnostic ignored "-Wc++98-compat" 116*f6dc9357SAndroid Build Coastguard Worker #if __clang_major__ >= 4 117*f6dc9357SAndroid Build Coastguard Worker // throw() dynamic exception specifications are deprecated 118*f6dc9357SAndroid Build Coastguard Worker #pragma GCC diagnostic ignored "-Wdeprecated-dynamic-exception-spec" 119*f6dc9357SAndroid Build Coastguard Worker #endif 120*f6dc9357SAndroid Build Coastguard Worker 121*f6dc9357SAndroid Build Coastguard Worker #if __clang_major__ <= 6 // check it 122*f6dc9357SAndroid Build Coastguard Worker #pragma GCC diagnostic ignored "-Wsign-conversion" 123*f6dc9357SAndroid Build Coastguard Worker #endif 124*f6dc9357SAndroid Build Coastguard Worker 125*f6dc9357SAndroid Build Coastguard Worker #pragma GCC diagnostic ignored "-Wold-style-cast" 126*f6dc9357SAndroid Build Coastguard Worker #pragma GCC diagnostic ignored "-Wglobal-constructors" 127*f6dc9357SAndroid Build Coastguard Worker #pragma GCC diagnostic ignored "-Wexit-time-destructors" 128*f6dc9357SAndroid Build Coastguard Worker 129*f6dc9357SAndroid Build Coastguard Worker #if defined(Z7_LLVM_CLANG_VERSION) && __clang_major__ >= 18 // 18.1.0RC 130*f6dc9357SAndroid Build Coastguard Worker #pragma GCC diagnostic ignored "-Wswitch-default" 131*f6dc9357SAndroid Build Coastguard Worker #endif 132*f6dc9357SAndroid Build Coastguard Worker // #pragma GCC diagnostic ignored "-Wunused-private-field" 133*f6dc9357SAndroid Build Coastguard Worker // #pragma GCC diagnostic ignored "-Wnonportable-system-include-path" 134*f6dc9357SAndroid Build Coastguard Worker // #pragma GCC diagnostic ignored "-Wsuggest-override" 135*f6dc9357SAndroid Build Coastguard Worker // #pragma GCC diagnostic ignored "-Wsign-conversion" 136*f6dc9357SAndroid Build Coastguard Worker // #pragma GCC diagnostic ignored "-Winconsistent-missing-override" 137*f6dc9357SAndroid Build Coastguard Worker // #pragma GCC diagnostic ignored "-Wsuggest-destructor-override" 138*f6dc9357SAndroid Build Coastguard Worker // #pragma GCC diagnostic ignored "-Wnon-virtual-dtor" 139*f6dc9357SAndroid Build Coastguard Worker // #pragma GCC diagnostic ignored "-Wdeprecated-copy-with-user-provided-dtor" 140*f6dc9357SAndroid Build Coastguard Worker // #pragma GCC diagnostic ignored "-Wdeprecated-copy-dtor" 141*f6dc9357SAndroid Build Coastguard Worker // #ifndef _WIN32 142*f6dc9357SAndroid Build Coastguard Worker // #pragma GCC diagnostic ignored "-Wweak-vtables" 143*f6dc9357SAndroid Build Coastguard Worker // #endif 144*f6dc9357SAndroid Build Coastguard Worker /* 145*f6dc9357SAndroid Build Coastguard Worker #if defined(Z7_GCC_VERSION) && (Z7_GCC_VERSION >= 40400) \ 146*f6dc9357SAndroid Build Coastguard Worker || defined(Z7_CLANG_VERSION) && (Z7_CLANG_VERSION >= 30000) 147*f6dc9357SAndroid Build Coastguard Worker // enumeration values not explicitly handled in switch 148*f6dc9357SAndroid Build Coastguard Worker #pragma GCC diagnostic ignored "-Wswitch-enum" 149*f6dc9357SAndroid Build Coastguard Worker #endif 150*f6dc9357SAndroid Build Coastguard Worker */ 151*f6dc9357SAndroid Build Coastguard Worker #endif // __clang__ 152*f6dc9357SAndroid Build Coastguard Worker 153*f6dc9357SAndroid Build Coastguard Worker 154*f6dc9357SAndroid Build Coastguard Worker #ifdef __GNUC__ 155*f6dc9357SAndroid Build Coastguard Worker // #pragma GCC diagnostic ignored "-Wdelete-non-virtual-dtor" 156*f6dc9357SAndroid Build Coastguard Worker #endif 157*f6dc9357SAndroid Build Coastguard Worker 158*f6dc9357SAndroid Build Coastguard Worker 159*f6dc9357SAndroid Build Coastguard Worker /* There is BUG in MSVC 6.0 compiler for operator new[]: 160*f6dc9357SAndroid Build Coastguard Worker It doesn't check overflow, when it calculates size in bytes for allocated array. 161*f6dc9357SAndroid Build Coastguard Worker So we can use Z7_ARRAY_NEW macro instead of new[] operator. */ 162*f6dc9357SAndroid Build Coastguard Worker 163*f6dc9357SAndroid Build Coastguard Worker #if defined(_MSC_VER) && (_MSC_VER == 1200) && !defined(_WIN64) 164*f6dc9357SAndroid Build Coastguard Worker #define Z7_ARRAY_NEW(p, T, size) p = new T[((size) > 0xFFFFFFFFu / sizeof(T)) ? 0xFFFFFFFFu / sizeof(T) : (size)]; 165*f6dc9357SAndroid Build Coastguard Worker #else 166*f6dc9357SAndroid Build Coastguard Worker #define Z7_ARRAY_NEW(p, T, size) p = new T[size]; 167*f6dc9357SAndroid Build Coastguard Worker #endif 168*f6dc9357SAndroid Build Coastguard Worker 169*f6dc9357SAndroid Build Coastguard Worker #if (defined(__GNUC__) && (__GNUC__ >= 8)) 170*f6dc9357SAndroid Build Coastguard Worker #define Z7_ATTR_NORETURN __attribute__((noreturn)) 171*f6dc9357SAndroid Build Coastguard Worker #elif (defined(__clang__) && (__clang_major__ >= 3)) 172*f6dc9357SAndroid Build Coastguard Worker #if __has_feature(cxx_attributes) 173*f6dc9357SAndroid Build Coastguard Worker #define Z7_ATTR_NORETURN [[noreturn]] 174*f6dc9357SAndroid Build Coastguard Worker #else 175*f6dc9357SAndroid Build Coastguard Worker #define Z7_ATTR_NORETURN __attribute__((noreturn)) 176*f6dc9357SAndroid Build Coastguard Worker #endif 177*f6dc9357SAndroid Build Coastguard Worker #elif (defined(_MSC_VER) && (_MSC_VER >= 1900)) 178*f6dc9357SAndroid Build Coastguard Worker #define Z7_ATTR_NORETURN [[noreturn]] 179*f6dc9357SAndroid Build Coastguard Worker #else 180*f6dc9357SAndroid Build Coastguard Worker #define Z7_ATTR_NORETURN 181*f6dc9357SAndroid Build Coastguard Worker #endif 182*f6dc9357SAndroid Build Coastguard Worker 183*f6dc9357SAndroid Build Coastguard Worker 184*f6dc9357SAndroid Build Coastguard Worker // final in "GCC 4.7.0" 185*f6dc9357SAndroid Build Coastguard Worker // In C++98 and C++03 code the alternative spelling __final can be used instead (this is a GCC extension.) 186*f6dc9357SAndroid Build Coastguard Worker 187*f6dc9357SAndroid Build Coastguard Worker #if defined (__cplusplus) && __cplusplus >= 201103L \ 188*f6dc9357SAndroid Build Coastguard Worker || defined(_MSC_VER) && _MSC_VER >= 1800 \ 189*f6dc9357SAndroid Build Coastguard Worker || defined(__clang__) && __clang_major__ >= 4 \ 190*f6dc9357SAndroid Build Coastguard Worker /* || defined(__GNUC__) && __GNUC__ >= 9 */ 191*f6dc9357SAndroid Build Coastguard Worker #define Z7_final final 192*f6dc9357SAndroid Build Coastguard Worker #if defined(__clang__) && __cplusplus < 201103L 193*f6dc9357SAndroid Build Coastguard Worker #pragma GCC diagnostic ignored "-Wc++11-extensions" 194*f6dc9357SAndroid Build Coastguard Worker #endif 195*f6dc9357SAndroid Build Coastguard Worker #elif defined (__cplusplus) && __cplusplus >= 199711L \ 196*f6dc9357SAndroid Build Coastguard Worker && defined(__GNUC__) && __GNUC__ >= 4 && !defined(__clang__) 197*f6dc9357SAndroid Build Coastguard Worker #define Z7_final __final 198*f6dc9357SAndroid Build Coastguard Worker #else 199*f6dc9357SAndroid Build Coastguard Worker #define Z7_final 200*f6dc9357SAndroid Build Coastguard Worker #if defined(__clang__) && __clang_major__ >= 4 \ 201*f6dc9357SAndroid Build Coastguard Worker || defined(__GNUC__) && __GNUC__ >= 4 202*f6dc9357SAndroid Build Coastguard Worker #pragma GCC diagnostic ignored "-Wnon-virtual-dtor" 203*f6dc9357SAndroid Build Coastguard Worker #pragma GCC diagnostic ignored "-Wdelete-non-virtual-dtor" 204*f6dc9357SAndroid Build Coastguard Worker #endif 205*f6dc9357SAndroid Build Coastguard Worker #endif 206*f6dc9357SAndroid Build Coastguard Worker 207*f6dc9357SAndroid Build Coastguard Worker #define Z7_class_final(c) class c Z7_final 208*f6dc9357SAndroid Build Coastguard Worker 209*f6dc9357SAndroid Build Coastguard Worker 210*f6dc9357SAndroid Build Coastguard Worker #if defined (__cplusplus) && __cplusplus >= 201103L \ 211*f6dc9357SAndroid Build Coastguard Worker || (defined(_MSC_VER) && _MSC_VER >= 1800) 212*f6dc9357SAndroid Build Coastguard Worker #define Z7_CPP_IS_SUPPORTED_default 213*f6dc9357SAndroid Build Coastguard Worker #define Z7_eq_delete = delete 214*f6dc9357SAndroid Build Coastguard Worker // #define Z7_DECL_DEFAULT_COPY_CONSTRUCTOR_IF_SUPPORTED(c) c(const c& k) = default; 215*f6dc9357SAndroid Build Coastguard Worker #else 216*f6dc9357SAndroid Build Coastguard Worker #define Z7_eq_delete 217*f6dc9357SAndroid Build Coastguard Worker // #define Z7_DECL_DEFAULT_COPY_CONSTRUCTOR_IF_SUPPORTED(c) 218*f6dc9357SAndroid Build Coastguard Worker #endif 219*f6dc9357SAndroid Build Coastguard Worker 220*f6dc9357SAndroid Build Coastguard Worker 221*f6dc9357SAndroid Build Coastguard Worker #if defined(__cplusplus) && (__cplusplus >= 201103L) \ 222*f6dc9357SAndroid Build Coastguard Worker || defined(_MSC_VER) && (_MSC_VER >= 1400) /* && (_MSC_VER != 1600) */ \ 223*f6dc9357SAndroid Build Coastguard Worker || defined(__clang__) && __clang_major__ >= 4 224*f6dc9357SAndroid Build Coastguard Worker #if defined(_MSC_VER) && (_MSC_VER == 1600) /* && (_MSC_VER != 1600) */ 225*f6dc9357SAndroid Build Coastguard Worker #pragma warning(disable : 4481) // nonstandard extension used: override specifier 'override' 226*f6dc9357SAndroid Build Coastguard Worker #define Z7_DESTRUCTOR_override 227*f6dc9357SAndroid Build Coastguard Worker #else 228*f6dc9357SAndroid Build Coastguard Worker #define Z7_DESTRUCTOR_override override 229*f6dc9357SAndroid Build Coastguard Worker #endif 230*f6dc9357SAndroid Build Coastguard Worker #define Z7_override override 231*f6dc9357SAndroid Build Coastguard Worker #else 232*f6dc9357SAndroid Build Coastguard Worker #define Z7_override 233*f6dc9357SAndroid Build Coastguard Worker #define Z7_DESTRUCTOR_override 234*f6dc9357SAndroid Build Coastguard Worker #endif 235*f6dc9357SAndroid Build Coastguard Worker 236*f6dc9357SAndroid Build Coastguard Worker 237*f6dc9357SAndroid Build Coastguard Worker 238*f6dc9357SAndroid Build Coastguard Worker #define Z7_CLASS_NO_COPY(cls) \ 239*f6dc9357SAndroid Build Coastguard Worker private: \ 240*f6dc9357SAndroid Build Coastguard Worker cls(const cls &) Z7_eq_delete; \ 241*f6dc9357SAndroid Build Coastguard Worker cls &operator=(const cls &) Z7_eq_delete; 242*f6dc9357SAndroid Build Coastguard Worker 243*f6dc9357SAndroid Build Coastguard Worker class CUncopyable 244*f6dc9357SAndroid Build Coastguard Worker { 245*f6dc9357SAndroid Build Coastguard Worker protected: CUncopyable()246*f6dc9357SAndroid Build Coastguard Worker CUncopyable() {} // allow constructor 247*f6dc9357SAndroid Build Coastguard Worker // ~CUncopyable() {} 248*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_NO_COPY(CUncopyable) 249*f6dc9357SAndroid Build Coastguard Worker }; 250*f6dc9357SAndroid Build Coastguard Worker 251*f6dc9357SAndroid Build Coastguard Worker #define MY_UNCOPYABLE :private CUncopyable 252*f6dc9357SAndroid Build Coastguard Worker // #define MY_UNCOPYABLE 253*f6dc9357SAndroid Build Coastguard Worker 254*f6dc9357SAndroid Build Coastguard Worker 255*f6dc9357SAndroid Build Coastguard Worker // typedef void (*Z7_void_Function)(void); 256*f6dc9357SAndroid Build Coastguard Worker 257*f6dc9357SAndroid Build Coastguard Worker #if defined(__clang__) || defined(__GNUC__) 258*f6dc9357SAndroid Build Coastguard Worker #define Z7_CAST_FUNC(t, e) reinterpret_cast<t>(reinterpret_cast<Z7_void_Function>(e)) 259*f6dc9357SAndroid Build Coastguard Worker #else 260*f6dc9357SAndroid Build Coastguard Worker #define Z7_CAST_FUNC(t, e) reinterpret_cast<t>(reinterpret_cast<void*>(e)) 261*f6dc9357SAndroid Build Coastguard Worker // #define Z7_CAST_FUNC(t, e) reinterpret_cast<t>(e) 262*f6dc9357SAndroid Build Coastguard Worker #endif 263*f6dc9357SAndroid Build Coastguard Worker 264*f6dc9357SAndroid Build Coastguard Worker #define Z7_GET_PROC_ADDRESS(func_type, hmodule, func_name) \ 265*f6dc9357SAndroid Build Coastguard Worker Z7_CAST_FUNC(func_type, GetProcAddress(hmodule, func_name)) 266*f6dc9357SAndroid Build Coastguard Worker 267*f6dc9357SAndroid Build Coastguard Worker // || defined(__clang__) 268*f6dc9357SAndroid Build Coastguard Worker // || defined(__GNUC__) 269*f6dc9357SAndroid Build Coastguard Worker 270*f6dc9357SAndroid Build Coastguard Worker #if defined(_MSC_VER) && (_MSC_VER >= 1400) 271*f6dc9357SAndroid Build Coastguard Worker #define Z7_DECLSPEC_NOVTABLE __declspec(novtable) 272*f6dc9357SAndroid Build Coastguard Worker #else 273*f6dc9357SAndroid Build Coastguard Worker #define Z7_DECLSPEC_NOVTABLE 274*f6dc9357SAndroid Build Coastguard Worker #endif 275*f6dc9357SAndroid Build Coastguard Worker 276*f6dc9357SAndroid Build Coastguard Worker #ifdef __clang__ 277*f6dc9357SAndroid Build Coastguard Worker #define Z7_PURE_INTERFACES_BEGIN \ 278*f6dc9357SAndroid Build Coastguard Worker _Pragma("GCC diagnostic push") \ 279*f6dc9357SAndroid Build Coastguard Worker _Pragma("GCC diagnostic ignored \"-Wnon-virtual-dtor\"") 280*f6dc9357SAndroid Build Coastguard Worker _Pragma("GCC diagnostic ignored \"-Wweak-vtables\"") 281*f6dc9357SAndroid Build Coastguard Worker #define Z7_PURE_INTERFACES_END \ 282*f6dc9357SAndroid Build Coastguard Worker _Pragma("GCC diagnostic pop") 283*f6dc9357SAndroid Build Coastguard Worker #else 284*f6dc9357SAndroid Build Coastguard Worker #define Z7_PURE_INTERFACES_BEGIN 285*f6dc9357SAndroid Build Coastguard Worker #define Z7_PURE_INTERFACES_END 286*f6dc9357SAndroid Build Coastguard Worker #endif 287*f6dc9357SAndroid Build Coastguard Worker 288*f6dc9357SAndroid Build Coastguard Worker // NewHandler.h and NewHandler.cpp redefine operator new() to throw exceptions, if compiled with old MSVC compilers 289*f6dc9357SAndroid Build Coastguard Worker #include "NewHandler.h" 290*f6dc9357SAndroid Build Coastguard Worker 291*f6dc9357SAndroid Build Coastguard Worker /* 292*f6dc9357SAndroid Build Coastguard Worker // #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) 293*f6dc9357SAndroid Build Coastguard Worker #ifndef ARRAY_SIZE 294*f6dc9357SAndroid Build Coastguard Worker #define ARRAY_SIZE(a) Z7_ARRAY_SIZE(a) 295*f6dc9357SAndroid Build Coastguard Worker #endif 296*f6dc9357SAndroid Build Coastguard Worker */ 297*f6dc9357SAndroid Build Coastguard Worker 298*f6dc9357SAndroid Build Coastguard Worker #endif // ZIP7_INC_COMMON0_H 299*f6dc9357SAndroid Build Coastguard Worker 300*f6dc9357SAndroid Build Coastguard Worker 301*f6dc9357SAndroid Build Coastguard Worker 302*f6dc9357SAndroid Build Coastguard Worker // #define Z7_REDEFINE_NULL 303*f6dc9357SAndroid Build Coastguard Worker 304*f6dc9357SAndroid Build Coastguard Worker #if defined(Z7_REDEFINE_NULL) /* && (!defined(__clang__) || defined(_MSC_VER)) */ 305*f6dc9357SAndroid Build Coastguard Worker 306*f6dc9357SAndroid Build Coastguard Worker // NULL is defined in <stddef.h> 307*f6dc9357SAndroid Build Coastguard Worker #include <stddef.h> 308*f6dc9357SAndroid Build Coastguard Worker #undef NULL 309*f6dc9357SAndroid Build Coastguard Worker 310*f6dc9357SAndroid Build Coastguard Worker #ifdef __cplusplus 311*f6dc9357SAndroid Build Coastguard Worker #if defined (__cplusplus) && __cplusplus >= 201103L \ 312*f6dc9357SAndroid Build Coastguard Worker || (defined(_MSC_VER) && _MSC_VER >= 1800) 313*f6dc9357SAndroid Build Coastguard Worker #define NULL nullptr 314*f6dc9357SAndroid Build Coastguard Worker #else 315*f6dc9357SAndroid Build Coastguard Worker #define NULL 0 316*f6dc9357SAndroid Build Coastguard Worker #endif 317*f6dc9357SAndroid Build Coastguard Worker #else 318*f6dc9357SAndroid Build Coastguard Worker #define NULL ((void *)0) 319*f6dc9357SAndroid Build Coastguard Worker #endif 320*f6dc9357SAndroid Build Coastguard Worker 321*f6dc9357SAndroid Build Coastguard Worker #else // Z7_REDEFINE_NULL 322*f6dc9357SAndroid Build Coastguard Worker 323*f6dc9357SAndroid Build Coastguard Worker #if defined(__clang__) && __clang_major__ >= 5 324*f6dc9357SAndroid Build Coastguard Worker #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" 325*f6dc9357SAndroid Build Coastguard Worker #endif 326*f6dc9357SAndroid Build Coastguard Worker 327*f6dc9357SAndroid Build Coastguard Worker #endif // Z7_REDEFINE_NULL 328*f6dc9357SAndroid Build Coastguard Worker 329*f6dc9357SAndroid Build Coastguard Worker // for precompiler: 330*f6dc9357SAndroid Build Coastguard Worker // #include "MyWindows.h" 331