/usr/include/itpp/base/itcompat.h is in libitpp-dev 4.3.1-6.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 | /*!
* \file
* \brief IT++ compatibility types and functions
* \author Adam Piatyszek
*
* -------------------------------------------------------------------------
*
* Copyright (C) 1995-2010 (see AUTHORS file for a list of contributors)
*
* This file is part of IT++ - a C++ library of mathematical, signal
* processing, speech processing, and communications classes and functions.
*
* IT++ is free software: you can redistribute it and/or modify it under the
* terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any
* later version.
*
* IT++ is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along
* with IT++. If not, see <http://www.gnu.org/licenses/>.
*
* -------------------------------------------------------------------------
*/
#ifndef ITCOMPAT_H
#define ITCOMPAT_H
#ifndef _MSC_VER
# include <itpp/config.h>
#else
# include <itpp/config_msvc.h>
#endif
//! \cond
// Microsoft Visual C++ underscore prefixed functions
#if defined(_MSC_VER)
# include <cfloat>
# define finite(x) _finite(x)
# define isfinite(x) _finite(x)
# define isnan(x) _isnan(x)
# define fpclass(x) _fpclass(x)
# define FP_NINF _FPCLASS_NINF
# define FP_PINF _FPCLASS_PINF
# define jn(a, b) _jn(a, b)
# define yn(a, b) _yn(a, b)
# define j0(a) _j0(a)
# define j1(a) _j1(a)
#endif // defined(_MSC_VER)
// Solaris uses <ieeefp.h> for declaring isnan() and finite() functions
#if defined(HAVE_IEEEFP_H)
# include <ieeefp.h>
#endif
// These definitions would collide with IT++ functions
#if defined(min)
# undef min
#endif
#if defined(max)
# undef max
#endif
#if defined(log2)
# undef log2
#endif
namespace std
{
#ifndef HAVE_STD_ISINF
#if (HAVE_DECL_ISINF == 1) || defined(HAVE_ISINF)
inline int isinf(double x) { return ::isinf(x); }
#elif defined(FPCLASS)
inline int isinf(double x)
{
if (::fpclass(a) == FP_NINF) return -1;
else if (::fpclass(a) == FP_PINF) return 1;
else return 0;
}
#else
inline int isinf(double x)
{
if ((x == x) && ((x - x) != 0.0)) return (x < 0.0 ? -1 : 1);
else return 0;
}
#endif // #if (HAVE_DECL_ISINF == 1) || defined(HAVE_ISINF)
#endif // #ifndef HAVE_STD_ISINF
#ifndef HAVE_STD_ISNAN
#if (HAVE_DECL_ISNAN == 1) || defined(HAVE_ISNAN)
inline int isnan(double x) { return ::isnan(x); }
#else
inline int isnan(double x) { return ((x != x) ? 1 : 0); }
#endif // #if (HAVE_DECL_ISNAN == 1) || defined(HAVE_ISNAN)
#endif // #ifndef HAVE_STD_ISNAN
#ifndef HAVE_STD_ISFINITE
#if (HAVE_DECL_ISFINITE == 1) || defined(HAVE_ISFINITE)
inline int isfinite(double x) { return ::isfinite(x); }
#elif defined(HAVE_FINITE)
inline int isfinite(double x) { return ::finite(x); }
#else
inline int isfinite(double x)
{
return ((!std::isnan(x) && !std::isinf(x)) ? 1 : 0);
}
#endif // #if (HAVE_DECL_ISFINITE == 1) || defined(HAVE_ISFINITE)
#endif // #ifndef HAVE_STD_ISFINITE
} // namespace std
#ifndef HAVE_TGAMMA
//! True gamma function
double tgamma(double x);
#endif
#if !defined(HAVE_LGAMMA) || (HAVE_DECL_SIGNGAM != 1)
//! Lograrithm of an absolute gamma function
double lgamma(double x);
//! Global variable needed by \c lgamma function
extern int signgam;
#endif
#ifndef HAVE_CBRT
//! Cubic root
double cbrt(double x);
#endif
#ifndef HAVE_LOG1P
//! Lograrithm of an argument \c x plus one
inline double log1p(double x) { return std::log(1.0 + x); }
#endif
#ifndef HAVE_LOG2
//! Base-2 logarithm
inline double log2(double x)
{
static const double one_over_log2 = 1.0 / std::log(2.0);
return std::log(x) * one_over_log2;
}
#endif
#ifndef HAVE_EXPM1
//! C99 exponential minus one (exp(x) - 1.0)
double expm1(double x);
#endif // HAVE_EXPM1
#ifndef HAVE_ERFC
//! Complementary error function
double erfc(double x);
#endif
#ifndef HAVE_ERF
//! Error function
inline double erf(double x) { return (1.0 - ::erfc(x)); }
#endif
#ifndef HAVE_ASINH
//! Arcus sinhyp
double asinh(double x);
#endif
#ifndef HAVE_ACOSH
//! Arcus coshyp
double acosh(double x);
#endif
#ifndef HAVE_ATANH
//! Arcus tanhyp
double atanh(double x);
#endif
#ifndef HAVE_RINT
double rint(double x);
#endif
// Represent GCC version in a concise form
#define GCC_VERSION (__GNUC__ * 10000 \
+ __GNUC_MINOR__ * 100 \
+ __GNUC_PATCHLEVEL__)
//! \endcond
#endif // ITCOMPAT_H
|