37 #ifndef VIGRA_CONFIG_HXX
38 #define VIGRA_CONFIG_HXX
40 #include "config_version.hxx"
53 #if(_MSC_VER < 1100) // before VisualC++ 5.0
54 #error "Need VisualC++ 5.0, Service Pack 2, or later"
55 #endif // _MSC_VER < 1100
58 #define NO_TYPENAME // no 'typename' keyword
59 #define TEMPLATE_COPY_CONSTRUCTOR_BUG
60 #define NO_STL_MEMBER_TEMPLATES
61 #define NO_INLINE_STATIC_CONST_DEFINITION
62 #define CMATH_NOT_IN_STD
63 #define NO_COVARIANT_RETURN_TYPES
65 #ifdef VIGRA_NO_STD_MINMAX // activate if necessary
69 const T& min(
const T& x,
const T& y)
77 const T& max(
const T& x,
const T& y)
84 #endif // VIGRA_NO_STD_MINMAX
85 #endif // (_MSC_VER < 1300)
88 #pragma warning( disable : 4786 4250 4244 4305)
90 #define NO_PARTIAL_TEMPLATE_SPECIALIZATION
91 #define NO_OUT_OF_LINE_MEMBER_TEMPLATES
94 #ifdef _MSC_EXTENSIONS
95 #ifndef CMATH_NOT_IN_STD
97 #endif // CMATH_NOT_IN_STD
98 inline double abs(
double v) {
return fabs(v); }
99 inline float abs(
float v) {
return fabs(v); }
100 #ifndef CMATH_NOT_IN_STD
102 #endif // CMATH_NOT_IN_STD
103 #endif // _MSC_EXTENSIONS
104 #endif // _MSC_VER < 1310
107 #define VIGRA_NO_WORKING_STRINGSTREAM
111 #define VIGRA_NO_UNIQUE_PTR
115 #define VIGRA_NO_VARIADIC_TEMPLATES
118 #define VIGRA_NEED_BIN_STREAMS
120 #define VIGRA_NO_THREADSAFE_STATIC_INIT // at least up to _MSC_VER <= 1600, probably higher
125 #define VIGRA_SAFE_STATIC(p, v) \
126 0; while(p == 0) ::vigra::detail::safeStaticInit(&p, v)
128 namespace vigra {
namespace detail {
130 inline void safeStaticInit(T ** p, T * v)
132 if (InterlockedCompareExchangePointer((PVOID *)p, v, 0) != 0)
137 #ifndef VIGRA_ENABLE_ANNOYING_WARNINGS
138 #pragma warning ( disable: 4244 4267) // implicit integer conversion warnings
142 #define VIGRA_EXPORT __declspec(dllexport)
143 #elif defined(VIGRA_STATIC_LIB)
146 #define VIGRA_EXPORT __declspec(dllimport)
156 #if defined(__GNUC__) && !defined(__clang__)
157 #if __GNUC__ < 2 || ((__GNUC__ == 2) && (__GNUC_MINOR__ <= 8))
158 #error "Need at least g++ 2.95"
161 #define VIGRA_NO_WORKING_STRINGSTREAM
163 #define HAS_HASH_CONTAINERS
166 #pragma GCC diagnostic ignored "-Wshadow"
168 #if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L
169 #if defined(__APPLE__)
170 #define VIGRA_NO_UNIQUE_PTR
174 #define VIGRA_NO_UNIQUE_PTR
175 #define VIGRA_SHARED_PTR_IN_TR1
184 #if defined(__clang__)
187 #if defined(__apple_build_version__)
190 #define VIGRA_NO_UNIQUE_PTR
191 #if __cplusplus >= 201103L
194 #if !((__clang_major__ >= 4) && defined(_LIBCPP_VERSION))
195 #define VIGRA_SHARED_PTR_IN_TR1
199 #define VIGRA_NO_UNIQUE_PTR
200 #if !defined(_LIBCPP_VERSION)
201 #define VIGRA_SHARED_PTR_IN_TR1
208 #if __cplusplus >= 201103L
209 #if (__clang_major__ < 3) || ((__clang_major__ == 3) && (__clang_minor__ < 3))
210 #define VIGRA_SHARED_PTR_IN_TR1
211 #define VIGRA_NO_UNIQUE_PTR
215 #define VIGRA_NO_UNIQUE_PTR
216 #define VIGRA_SHARED_PTR_IN_TR1
227 #if defined(__MINGW32__)
228 #define VIGRA_NEED_BIN_STREAMS
231 #define VIGRA_EXPORT __declspec(dllexport)
232 #elif defined(VIGRA_STATIC_LIB)
235 #define VIGRA_EXPORT __declspec(dllimport)
237 #endif // __MINGW32__
245 #if defined(__sgi) && !defined(__GNUC__)
246 #if _COMPILER_VERSION < 720
247 #error "Need SGI C++ 7.2 or later"
249 #if (_COMPILER_VERSION == 720) || (_COMPILER_VERSION == 721)
250 #define SPECIAL_STDEXCEPTION_DEFINITION_NEEDED
253 typedef std::exception StdException;
256 #define NO_NAMESPACE_STD
257 #endif // _COMPILER_VERSION
258 #define HAS_HASH_CONTAINERS
267 #if defined(__sun) && !defined(__GNUC__)
268 #define VIGRA_HAS_ERF
277 #ifdef CMATH_NOT_IN_STD
280 #define VIGRA_CSTD std
295 #ifdef VIGRA_NO_UNIQUE_PTR
296 # define VIGRA_UNIQUE_PTR std::auto_ptr
298 # ifdef _GLIBCXX_INCLUDE_AS_TR1
299 # define VIGRA_UNIQUE_PTR std::tr1::unique_ptr
301 # define VIGRA_UNIQUE_PTR std::unique_ptr
305 #ifdef VIGRA_SHARED_PTR_IN_TR1
306 # define VIGRA_SHARED_PTR std::tr1::shared_ptr
308 # define VIGRA_SHARED_PTR std::shared_ptr
311 #ifndef VIGRA_NO_THREADSAFE_STATIC_INIT
315 #define VIGRA_SAFE_STATIC(p, v) v
320 #ifndef SPECIAL_STDEXCEPTION_DEFINITION_NEEDED
321 typedef std::exception StdException;
327 # define doxygen_overloaded_function(fun) fun(...);
329 # define doxygen_overloaded_function(fun)
333 #endif // VIGRA_CONFIG_HXX
FFTWComplex< R >::NormType abs(const FFTWComplex< R > &a)
absolute value (= magnitude)
Definition: fftw3.hxx:1002