diff options
Diffstat (limited to 'externals/ace/OS_NS_math.h')
-rw-r--r-- | externals/ace/OS_NS_math.h | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/externals/ace/OS_NS_math.h b/externals/ace/OS_NS_math.h new file mode 100644 index 00000000000..9ba3b6632ad --- /dev/null +++ b/externals/ace/OS_NS_math.h @@ -0,0 +1,121 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file OS_NS_math.h + * + * $Id: OS_NS_math.h 89470 2010-03-12 12:12:12Z olli $ + * + * @author Douglas C. Schmidt <schmidt@cs.wustl.edu> + * @author Jesper S. M|ller<stophph@diku.dk> + * @author and a cast of thousands... + * + * Originally in OS.h. + */ +//============================================================================= + +#ifndef ACE_OS_NS_MATH_H +# define ACE_OS_NS_MATH_H + +# include /**/ "ace/pre.h" + +# include "ace/config-all.h" + +# if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +# endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/os_include/os_math.h" + +#include /**/ "ace/ACE_export.h" + +#if defined (ACE_EXPORT_MACRO) +# undef ACE_EXPORT_MACRO +#endif +#define ACE_EXPORT_MACRO ACE_Export + + +/* + * We inline and undef some functions that may be implemented + * as macros on some platforms. This way macro definitions will + * be usable later as there is no way to save the macro definition + * using the pre-processor. + * + */ +inline double ace_log2_helper (double x) +{ +#if defined (log2) + return log2 (x); +#undef log2 +#else +# if !defined (ACE_LACKS_LOG2) + return ACE_STD_NAMESPACE::log2 (x); +# else + /* + ================================================================== + + log (x) + k + log (x) = ------- + b log (b) + k + + meaning the binary logarithm of x using the natural logarithm, for + example, is: + + + log (x) + e + log (x) = ------- + 2 log (2) + e + + ================================================================== + */ + + // Precomputed value of 1/log(2.0). Saves an expensive division and + // computing log(2.0) in each call. + double const _1_ln2 = 1.442695040888963407359924681002; + + return log (x) * _1_ln2; +# endif /* !ACE_LACKS_LOG2 */ +#endif /* defined (log2) */ +} + + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +namespace ACE_OS +{ + /// This method computes the largest integral value not greater than x. + template <typename T> + T floor (T x) + { + return ACE_STD_NAMESPACE::floor (x); + } + + /// This method computes the smallest integral value not less than x. + template <typename T> + T ceil (T x) + { + return ACE_STD_NAMESPACE::ceil (x); + } + + /// This method computes the base-2 logarithm of x. + ACE_NAMESPACE_INLINE_FUNCTION + double log2 (double x); + +} /* namespace ACE_OS */ + +ACE_END_VERSIONED_NAMESPACE_DECL + +# if defined (ACE_HAS_INLINED_OSCALLS) +# if defined (ACE_INLINE) +# undef ACE_INLINE +# endif /* ACE_INLINE */ +# define ACE_INLINE inline +# include "ace/OS_NS_math.inl" +# endif /* ACE_HAS_INLINED_OSCALLS */ + +# include /**/ "ace/post.h" +#endif /* ACE_OS_NS_MATH_H */ |