xref: /aosp_15_r20/external/lzma/CPP/Common/Common0.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
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