// ____ ______ __
// / __ \ / ____// /
// / /_/ // / / /
// / ____// /___ / /___ PixInsight Class Library
// /_/ \____//_____/ PCL 2.4.23
// ----------------------------------------------------------------------------
// pcl/Defs.h - Released 2022-03-12T18:59:29Z
// ----------------------------------------------------------------------------
// This file is part of the PixInsight Class Library (PCL).
// PCL is a multiplatform C++ framework for development of PixInsight modules.
//
// Copyright (c) 2003-2022 Pleiades Astrophoto S.L. All Rights Reserved.
//
// Redistribution and use in both source and binary forms, with or without
// modification, is permitted provided that the following conditions are met:
//
// 1. All redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// 2. All redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// 3. Neither the names "PixInsight" and "Pleiades Astrophoto", nor the names
// of their contributors, may be used to endorse or promote products derived
// from this software without specific prior written permission. For written
// permission, please contact info@pixinsight.com.
//
// 4. All products derived from this software, in any form whatsoever, must
// reproduce the following acknowledgment in the end-user documentation
// and/or other materials provided with the product:
//
// "This product is based on software from the PixInsight project, developed
// by Pleiades Astrophoto and its contributors (https://pixinsight.com/)."
//
// Alternatively, if that is where third-party acknowledgments normally
// appear, this acknowledgment must be reproduced in the product itself.
//
// THIS SOFTWARE IS PROVIDED BY PLEIADES ASTROPHOTO AND ITS CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL PLEIADES ASTROPHOTO OR ITS
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, BUSINESS
// INTERRUPTION; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; AND LOSS OF USE,
// DATA OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
// ----------------------------------------------------------------------------
#ifndef __PCL_Defs_h
#define __PCL_Defs_h
/// \file pcl/Defs.h
/*!
* \mainpage notitle
*
*
*
* PixInsight Class Library
*
*
* Reference Documentation
*
*
* Copyright (c) 2003-2021, The PixInsight Development Team.
* All Rights Reserved
*
*
*
*
* PixInsight is an advanced image
* processing software platform designed specifically for astronomical
* applications and other technical imaging fields. PixInsight is a
* modular, open-architecture system where the entire processing and file
* handling capabilities are implemented as external installable modules.
*
*
* The PixInsight core application provides the infrastructure on top of
* which external modules can implement processes, image file formats,
* and their associated user interfaces. The
* PixInsight Class
* Library (PCL) is a C++ development framework to build PixInsight
* modules.
*
*
* PixInsight modules are special shared libraries (.so files on FreeBSD
* and Linux; .dylib under macOS; .dll files on Windows) that communicate
* with the PixInsight core application through a high-level API provided
* by PCL. Along with a core communication API, PCL includes a
* comprehensive set of image processing algorithms, ranging from
* geometrical transformations to multiscale analysis algorithms, most of
* them available as multithreaded parallel implementations. PCL provides
* also rigorous and efficient implementations of essential astronomical
* algorithms, including state-of-the-art solar system ephemerides,
* vector astrometry, and reduction of positions of solar system and
* stellar objects.
*
*
* PCL is highly portable code. As of writing this document, it is
* available on the same platforms supported by the PixInsight core
* application: 64-bit FreeBSD, Linux, Mac OS X, and Windows. PixInsight
* modules written around PCL are directly portable to all supported
* platforms without changing a single line of source code. This
* is possible because PCL is a high-level framework. PCL isolates your
* module from platform-specific implementation details: all
* platform-dependent complexities are handled behind the scenes by the
* PixInsight core application and internal PCL routines.
*
*
* Starting from version 2.0, which was published in December of 2012,
* PCL is an open-source library released under the
* PixInsight
* Class Library License (PCLL). In essence, PCLL is a liberal
* BSD-like license that allows you to develop open-source and
* closed-source, free and commercial PixInsight modules without
* restrictions. As long as you observe all PCLL terms, you can modify
* PCL and use your modified version with or without releasing your
* source code.
*
*
* The entire source code of PCL, along with all PixInsight modules
* released as open-source products, are available in the
* official PixInsight
* repositories at GitLab. Open-source modules are a good starting
* point for developing new PixInsight modules. PixInsight and PCL are
* supported by a vibrant community on
* PixInsight Forum, which also
* includes a software development section.
*
*
*/
/*!
* \namespace pcl
* \brief PCL root namespace.
*
* pcl is the main namespace of the PixInsight Class Library (PCL), where all
* public PCL classes, functions and data are defined.
*/
// ----------------------------------------------------------------------------
// General definitions used by all PixInsight modules and programs.
// Included directly by PCL API and PixInsight source modules.
// ----------------------------------------------------------------------------
/*
* One and only one platform selection macro has to be defined.
*/
#ifndef __PCL_FREEBSD
# ifndef __PCL_LINUX
# ifndef __PCL_MACOS
# ifndef __PCL_MACOSX
# ifndef __PCL_WINDOWS
# error No platform selection macro has been defined.
# endif
# endif
# endif
# endif
#endif
/*
* __PCL_MACOS and __PCL_MACOSX are synonyms and both always defined on macOS.
*/
#ifdef __PCL_MACOS
# ifndef __PCL_MACOSX
# define __PCL_MACOSX
# endif
#endif
#ifdef __PCL_MACOSX
# ifndef __PCL_MACOS
# define __PCL_MACOS
# endif
#endif
/*
* Check for conflicting platform selection macros.
*/
#ifdef __PCL_FREEBSD
# if defined( __PCL_LINUX ) || defined( __PCL_MACOSX ) || defined( __PCL_WINDOWS )
# error Multiple platform selection macros have been defined.
# endif
#endif
#ifdef __PCL_LINUX
# if defined( __PCL_FREEBSD ) || defined( __PCL_MACOSX ) || defined( __PCL_WINDOWS )
# error Multiple platform selection macros have been defined.
# endif
#endif
#ifdef __PCL_MACOSX
# if defined( __PCL_FREEBSD ) || defined( __PCL_LINUX ) || defined( __PCL_WINDOWS )
# error Multiple platform selection macros have been defined.
# endif
#endif
#ifdef __PCL_WINDOWS
# if defined( __PCL_FREEBSD ) || defined( __PCL_LINUX ) || defined( __PCL_MACOSX )
# error Multiple platform selection macros have been defined.
# endif
#endif
/*
* __PCL_UNIX is always defined on FreeBSD, Linux and macOS platforms.
*/
#if defined( __PCL_LINUX ) || defined( __PCL_FREEBSD ) || defined( __PCL_MACOSX )
# ifndef __PCL_UNIX
# define __PCL_UNIX
# endif
#endif
/*
* __PCL_X11 is always defined on FreeBSD and Linux platforms.
*/
#if defined( __PCL_LINUX ) || defined( __PCL_FREEBSD )
# ifndef __PCL_X11
# define __PCL_X11
# endif
#endif
/*
* Platform architecture requirements:
*
* - x86_64 / EM64T / AMD64 architecture.
*/
#ifndef __x86_64__
# ifndef __x86_64
# ifndef __amd64__
# ifndef __amd64
# ifndef _M_X64
# ifndef _M_AMD64
# error This version of PCL requires an x86_64 / EM64T / AMD64 architecture.
# endif
# endif
# endif
# endif
# endif
#endif
#ifndef __PCL_X64
# define __PCL_X64
#endif
/*
* Compiler requirements:
*
* - GCC >= 7 on UNIX/Linux
* - Clang >= 5 on UNIX/Linux
* - MSVC++ >= 15.0 / Visual Studio 2017 on Windows
*/
#ifdef __PCL_WINDOWS
# ifdef _MSC_VER
# if _MSC_VER < 1910
# error This version of PCL requires MSVC++ 15.0 / Visual Studio 2017 or higher on MS Windows platforms.
# endif
# elif __MINGW32__
# else
# error Unsupported C++ compiler on MS Windows platform.
# endif
#else
# ifdef _MSC_VER
# error _MSC_VER should not be #defined on UNIX/Linux platforms.
# else
# ifdef __clang__
# if ( __clang_major__ < 5 )
# error This version of PCL requires Clang 5 or higher on UNIX/Linux platforms.
# endif
# else
# ifdef __GNUC__
# if ( __GNUC__ < 7 )
# error This version of PCL requires GCC 7 or higher on UNIX/Linux platforms.
# endif
# else
# error Unsupported C++ compiler on UNIX/Linux platform.
# endif
# endif
# endif
#endif
/*
* Brain-damaged compilers emit particularly useless warning messages.
* N.B.: This must be done *before* including windows.h
*/
#ifndef __PCL_NO_WARNING_MUTE_PRAGMAS
# ifdef _MSC_VER
# define _CRT_SECURE_NO_DEPRECATE 1 // Deal with MS's attempt at deprecating C standard runtime functions
# pragma warning( disable: 4996 ) // ...
# pragma warning( disable: 4018 ) // '<' : signed/unsigned mismatch
# pragma warning( disable: 4049 ) // More than 64k source lines
# pragma warning( disable: 4150 ) // Deletion of pointer to incomplete type 'type'; no destructor called
# pragma warning( disable: 4244 ) // Conversion from 'type1' to 'type2', possible loss of data
# pragma warning( disable: 4345 ) // Behavior change: an object of POD type constructed...
# pragma warning( disable: 4355 ) // 'this' : used in base member initializer list
# pragma warning( disable: 4521 ) // Multiple copy constructors defined
# pragma warning( disable: 4522 ) // Multiple assignment operators defined
# pragma warning( disable: 4710 ) // Function not inlined
# pragma warning( disable: 4723 ) // Potential divide by 0
# pragma warning( disable: 4800 ) // 'boolean' : forcing value to bool 'true' or 'false' (performance warning)
# endif
#endif
/*
* Compiler warning management macros
*/
#ifdef _MSC_VER
# define PCL_WARNINGS_PUSH \
__pragma(warning(push))
#else
# define PCL_WARNINGS_PUSH \
_Pragma("GCC diagnostic push")
#endif
#ifdef _MSC_VER
# define PCL_WARNINGS_POP \
__pragma(warning(pop))
#else
# define PCL_WARNINGS_POP \
_Pragma("GCC diagnostic pop")
#endif
#ifdef _MSC_VER
# define PCL_WARNINGS_DISABLE_UNINITIALIZED_VARIABLE \
__pragma(warning( disable: 6001 )) \
__pragma(warning( disable: 4700 ))
#else
# define PCL_WARNINGS_DISABLE_UNINITIALIZED_VARIABLE \
_Pragma("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
#endif
// Disable C4267: 'initializing' : conversion from 'size_t' to 'int', possible loss of data
#ifdef _MSC_VER
# define PCL_WARNINGS_DISABLE_SIZE_T_TO_INT_LOSS \
__pragma(warning( disable: 4267 ))
#endif
/*
* Disable unused variable warnings. This solution is portable for all
* compilers supporting C++11 or newer. The function call should be optimized
* away by any reasonable compiler (including MSVC :).
*/
template inline void __pcl_unused__( Args&&... ) {}
#define PCL_UNUSED( x ) __pcl_unused__( x );
/*
* Code optimization with unlikely/likely macros: Help the compiler to optimize
* for execution paths that are more likely to run.
*/
#ifndef __PCL_NO_BRANCH_OPTIMIZATION_MACROS
# if defined( __GNUC__ ) || defined( __clang__ )
# define unlikely( expr ) __builtin_expect( !!(expr), 0 )
# define likely( expr ) __builtin_expect( !!(expr), 1 )
# else
# define unlikely( expr ) (expr)
# define likely( expr ) (expr)
# endif
#endif
/*
* On Windows/MSVC++, _CRT_RAND_S must be #defined for rand_s() to work:
* http://msdn.microsoft.com/en-us/library/sxtz2fa8.aspx
*/
#ifdef _MSC_VER
# define _CRT_RAND_S
#endif
/*
* C standard definitions.
*/
#ifndef __stddef_h
# include
# ifndef __stddef_h
# define __stddef_h
# endif
#endif
/*
* C++11: Utility functions.
*/
#ifndef __utility_h
# include
# ifndef __utility_h
# define __utility_h
# endif
#endif
/*
* C++11: Compile-time type information classes.
*/
#ifndef __type_traits_h
# include
# ifndef __type_traits_h
# define __type_traits_h
# endif
#endif
/*
* C++11: std::initializer_list.
*/
#ifndef __initializer_list_h
# include
# ifndef __initializer_list_h
# define __initializer_list_h
# endif
#endif
/*
* Macros that control global symbol visibility.
*
* On UNIX/Linux, compilation with -fvisibility=hidden is required for PCL and
* all PixInsight modules and applications.
*/
#ifdef _MSC_VER // Windows
# define PCL_EXPORT __declspec(dllexport)
# define PCL_MODULE_EXPORT extern "C" PCL_EXPORT
# define PCL_IMPORT __declspec(dllimport)
# define PCL_LOCAL
# define PCL_BEGIN_LOCAL
# define PCL_END_LOCAL
# define PCL_INTERNAL
# define PCL_BEGIN_INTERNAL
# define PCL_END_INTERNAL
#else // Linux/X11, FreeBSD/X11 and Mac OS X
# define PCL_EXPORT __attribute__((visibility ("default")))
# if defined( __clang__ ) // Clang does not have the "externally_visible" attribute
# define PCL_MODULE_EXPORT extern "C" __attribute__((visibility ("default")))
# else
# define PCL_MODULE_EXPORT extern "C" __attribute__((visibility ("default"), externally_visible))
# endif
# define PCL_IMPORT __attribute__((visibility ("default")))
# define PCL_LOCAL __attribute__((visibility ("hidden")))
# define PCL_BEGIN_LOCAL _Pragma ( "GCC visibility push( hidden )" )
# define PCL_END_LOCAL _Pragma ( "GCC visibility pop" )
# define PCL_INTERNAL __attribute__((visibility ("internal")))
# define PCL_BEGIN_INTERNAL _Pragma ( "GCC visibility push( internal )" )
# define PCL_END_INTERNAL _Pragma ( "GCC visibility pop" )
#endif
#ifdef __PCL_DSO // Using PCL as a dynamic shared object - ### untested/experimental
# ifdef __PCL_BUILDING_PCL_DSO // building the PCL DSO
# define PCL_PUBLIC PCL_EXPORT
# else // linking against the PCL DSO
# define PCL_PUBLIC PCL_IMPORT
# endif
#else // Using PCL as a static library
# define PCL_PUBLIC
#endif
/*
* The PCL_CLASS, PCL_FUNC and PCL_DATA macros allow us to modify attributes in
* all declarations of PCL API classes, functions and data items, respectively.
*/
#define PCL_CLASS PCL_PUBLIC
#define PCL_FUNC PCL_PUBLIC
#define PCL_DATA PCL_PUBLIC
/*
* Stringification of macro-expanded arguments needs two levels of macros.
*/
#define PCL_STRINGIFY( x ) #x
/*
* Fastcall calling convention.
*/
#ifndef __PCL_NO_FASTCALL
# ifdef _MSC_VER
# define PCL_FASTCALL __fastcall
# else
# define PCL_FASTCALL __attribute__((fastcall))
# endif
#else
# define PCL_FASTCALL
#endif
/*
* Always inline functions.
*/
#ifndef __PCL_NO_FORCE_INLINE
# ifdef _MSC_VER // Visual Studio
# define PCL_FORCE_INLINE __forceinline
# else
# define PCL_FORCE_INLINE inline __attribute__((always_inline))
# endif
#else
# define PCL_FORCE_INLINE
#endif
/*
* Special GCC function optimizations.
*/
#ifndef __PCL_NO_HOT_FUNCTIONS
# ifdef _MSC_VER
# define PCL_HOT_FUNCTION
# else
# define PCL_HOT_FUNCTION __attribute__((hot))
# endif
#else
# define PCL_HOT_FUNCTION
#endif
/*
* Aligned memory allocation functions.
*/
#ifdef _MSC_VER
# define PCL_ALIGNED_MALLOC _aligned_malloc
# define PCL_ALIGNED_FREE _aligned_free
#else
# define PCL_ALIGNED_MALLOC _mm_malloc
# define PCL_ALIGNED_FREE _mm_free
#endif
/*
* 16/32-byte aligned blocks for automatic vectorization.
*/
#ifdef _MSC_VER // Windows
# define PCL_ALIGNED_16 __declspec(align(16))
# define PCL_ASSUME_ALIGNED_16( x ) x
# define PCL_ALIGNED_32 __declspec(align(32))
# define PCL_ASSUME_ALIGNED_32( x ) x
#else // GCC and Clang
# define PCL_ALIGNED_16 __attribute__((aligned(16)))
# define PCL_ASSUME_ALIGNED_16( x ) __builtin_assume_aligned( x, 16 )
# define PCL_ALIGNED_32 __attribute__((aligned(32)))
# define PCL_ASSUME_ALIGNED_32( x ) __builtin_assume_aligned( x, 32 )
#endif
/*
* Let the restrict type qualifier be the same for all supported C++ compilers.
*/
#ifdef _MSC_VER
# define __restrict__ __restrict
#endif
/*
* Compiler pragmas to assume iteration independence for vectorization.
*/
#ifdef _MSC_VER
# define PCL_IVDEP __pragma(loop( ivdep ))
#else
# ifdef __clang__
# define PCL_IVDEP
# else
# ifdef __GNUC__
# define PCL_IVDEP _Pragma("GCC ivdep")
# endif
# endif
#endif
/*
* Loop unrolling pragmas.
*/
#define PCL_PRAGMA( x ) _Pragma( #x )
#ifdef _MSC_VER
# define PCL_UNROLL( n )
#else
# ifdef __clang__
# define PCL_UNROLL( n ) PCL_PRAGMA( clang loop unroll_count( n ) )
# else
# ifdef __GNUC__
# define PCL_UNROLL( n ) PCL_PRAGMA( GCC unroll n )
# endif
# endif
#endif
/*
* Current function name.
*/
#ifdef _MSC_VER
# define PCL_FUNCTION_NAME __FUNCTION__
#else
# define PCL_FUNCTION_NAME __func__
#endif
/*
* MSVC defines 'max' and 'min' macros that conflict with several standard
* library functions, such as std::numeric_limits<>::max().
*/
#ifdef _MSC_VER
# ifndef NOMINMAX
# define NOMINMAX 1 // needs to be defined before #include windows.h
# endif
# ifdef max
# undef max
# endif
# ifdef min
# undef min
# endif
#endif
/*
* Minimum Win32 versions supported.
*/
#ifdef __PCL_WINDOWS
# ifndef __PCL_NO_WIN32_MINIMUM_VERSIONS
# define WINVER 0x0601 // Windows 7
# define _WIN32_WINNT 0x0601
# endif
#endif
/*
* Size and distance types.
*/
#ifndef __PCL_NO_SIZE_AND_DISTANCE_TYPES
namespace pcl
{
/*!
* \defgroup size_distance_types Size and Distance Types
*/
/*!
* A type used to represent block sizes, lengths and absolute positions.
* \ingroup size_distance_types
*/
typedef size_t size_type;
/*!
* A type used to represent distances and relative positions.
* \ingroup size_distance_types
*/
typedef ptrdiff_t distance_type;
} // pcl
#endif // !__PCL_NO_SIZE_AND_DISTANCE_TYPES
/*
* Portable integer types
*/
#ifndef __PCL_NO_PORTABLE_INTEGER_TYPES
namespace pcl
{
/*!
* \defgroup portable_integer_types Portable Integer Types
*/
/*!
* Signed two's complement 8-bit integer type.
* \ingroup portable_integer_types
*/
typedef signed char int8;
/*!
* Unsigned 8-bit integer type.
* \ingroup portable_integer_types
*/
typedef unsigned char uint8;
/*!
* Signed two's complement 16-bit integer type.
* \ingroup portable_integer_types
*/
typedef signed short int16;
/*!
* Unsigned 16-bit integer type.
* \ingroup portable_integer_types
*/
typedef unsigned short uint16;
/*!
* Signed two's complement 32-bit integer type.
* \ingroup portable_integer_types
*/
typedef signed int int32;
/*!
* Unsigned 32-bit integer type.
* \ingroup portable_integer_types
*/
typedef unsigned int uint32;
#ifdef _MSC_VER // Valid for MS Visual C++
typedef signed __int64 int64;
typedef unsigned __int64 uint64;
#else // Valid for gcc
/*!
* Signed two's complement 64-bit integer type.
* \ingroup portable_integer_types
*/
typedef signed long long int64;
/*!
* Unsigned 64-bit integer type.
* \ingroup portable_integer_types
*/
typedef unsigned long long uint64;
#endif // _MSC_VER
struct PCL_AssertScalarSizes
{
static_assert( sizeof( int8 ) == 1, "Invalid sizeof( int8 )" );
static_assert( sizeof( uint8 ) == 1, "Invalid sizeof( uint8 )" );
static_assert( sizeof( int16 ) == 2, "Invalid sizeof( int16 )" );
static_assert( sizeof( uint16 ) == 2, "Invalid sizeof( uint16 )" );
static_assert( sizeof( int32 ) == 4, "Invalid sizeof( int32 )" );
static_assert( sizeof( uint32 ) == 4, "Invalid sizeof( uint32 )" );
static_assert( sizeof( int64 ) == 8, "Invalid sizeof( int64 )" );
static_assert( sizeof( uint64 ) == 8, "Invalid sizeof( uint64 )" );
static_assert( sizeof( float ) == sizeof( uint32 ), "Invalid sizeof( float )" );
static_assert( sizeof( double ) == sizeof( uint64 ), "Invalid sizeof( double )" );
};
} // pcl
/*
* Integer limits
*/
#ifndef __PCL_NO_INTEGER_LIMITS
/*!
* \defgroup integer_limits Integer Limits
*/
/*!
* \defgroup integer_conversion_factors Integer Conversion Factors
*/
#ifdef _MSC_VER // Valid for MS Visual C++
#define int8_min (-127i8-1)
#define int8_max 127i8
#define int8_ofs 128ui8
#define char_min int8_min
#define char_max int8_max
#define uint8_max 0xffui8
#define int16_min (-32767i16-1)
#define int16_max 32767i16
#define int16_ofs 32768ui16
#define short_min int16_min
#define short_max int16_max
#define uint16_max 0xffffui16
#define ushort_max uint16_max
#define uint20_max 0xfffffui32
#define uint22_max 0x3fffffui32
#define uint24_max 0xffffffui32
#define int32_min (-2147483647i32-1)
#define int32_max 2147483647i32
#define int32_ofs 2147483648ui32
#define int_min int32_min
#define int_max int32_max
#define uint32_max 0xffffffffui32
#define uint_max uint32_max
#define int64_min (-9223372036854775807i64-1)
#define int64_max 9223372036854775807i64
#define int64_ofs 9223372036854775808ui64
#define longlong_min int64_min
#define longlong_max int64_max
#define uint64_max 0xffffffffffffffffui64
#define ulonglong_max uint64_max
#define uint8_to_uint16 257ui16
#define uint8_to_uint20 4.1120588235294117647058823529412e+03
#define uint8_to_uint24 65793ui32
#define uint8_to_uint32 16843009ui32
#define uint8_to_uint64 72340172838076673ui64
#define uint16_to_uint8 3.8910505836575875486381322957198e-03
#define uint16_to_uint20 1.6000228885328450446326390478370e+01
#define uint16_to_uint24 2.5600389105058365758754863813230e+02
#define uint16_to_uint32 65537ui32
#define uint16_to_uint64 281479271743489ui64
#define uint20_to_uint8 2.4318718260496387955081896860024e-04
#define uint20_to_uint16 6.2499105929475717044560474930262e-02
#define uint20_to_uint24 1.6000014305128388527287032401116e+01
#define uint20_to_uint32 4.0960039053000500679493598455046e+03
#define uint20_to_uint64 1.7592202821648000014305128388527e+13
#define uint24_to_uint8 1.5199185323666651467481343000015e-05
#define uint24_to_uint16 3.9061906281823294271427051510039e-03
#define uint24_to_uint20 6.2499944120642192402016663671533e-02
#define uint24_to_uint32 2.5600001519918532366665146748134e+02
#define uint24_to_uint64 1.0995116933120039061906281823294e+12
#define uint32_to_uint8 5.9371814145560333073502484027646e-08
#define uint32_to_uint16 1.5258556235409005599890138395105e-05
#define uint32_to_uint20 2.4414039222619971079430536152662e-04
#define uint32_to_uint24 3.9062497680788509939049489316309e-03
#define uint32_to_uint64 4294967297ui64
#define uint64_to_uint8 1.3823577699190181534344400859741e-17
#define uint64_to_uint16 3.5526594686918766543265110209534e-15
#define uint64_to_uint20 5.6843364650699390597549726005894e-14
#define uint64_to_uint24 9.0949464756281961368912116576494e-13
#define uint64_to_uint32 2.3283064359965952029459655278022e-10
#else // Non-MS C++, i.e. GCC or compatible
/*!
* The smallest 8-bit signed integer.
* \ingroup integer_limits
*/
#define int8_min (-int8( 127 )-1)
/*!
* The largest 8-bit signed integer.
* \ingroup integer_limits
*/
#define int8_max int8( 127 )
#define int8_ofs uint8( 128u )
#define char_min int8_min
#define char_max int8_max
/*!
* The largest 8-bit unsigned integer.
* \ingroup integer_limits
*/
#define uint8_max uint8( 0xffu )
/*!
* The smallest 16-bit signed integer.
* \ingroup integer_limits
*/
#define int16_min (-int16( 32767 )-1)
/*!
* The largest 16-bit signed integer.
* \ingroup integer_limits
*/
#define int16_max int16( 32767 )
#define int16_ofs uint16( 32768u )
#define short_min int16_min
#define short_max int16_max
/*!
* The largest 16-bit unsigned integer.
* \ingroup integer_limits
*/
#define uint16_max uint16( 0xffffu )
#define ushort_max uint16_max
/*!
* The largest 20-bit unsigned integer.
* \ingroup integer_limits
*/
#define uint20_max uint32( 0xfffffu )
/*!
* The largest 22-bit unsigned integer.
* \ingroup integer_limits
*/
#define uint22_max uint32( 0x3fffffu )
/*!
* The largest 24-bit unsigned integer.
* \ingroup integer_limits
*/
#define uint24_max uint32( 0xffffffu )
/*!
* The smallest 32-bit signed integer.
* \ingroup integer_limits
*/
#define int32_min (-int32( 2147483647 )-1)
/*!
* The largest 32-bit signed integer.
* \ingroup integer_limits
*/
#define int32_max int32( 2147483647 )
#define int32_ofs uint32( 2147483648u )
#define int_min int32_min
#define int_max int32_max
/*!
* The largest 32-bit unsigned integer.
* \ingroup integer_limits
*/
#define uint32_max uint32( 0xffffffffu )
#define uint_max uint32_max
/*!
* The smallest 64-bit signed integer.
* \ingroup integer_limits
*/
#define int64_min (-int64( 9223372036854775807ll )-1)
/*!
* The largest 64-bit signed integer.
* \ingroup integer_limits
*/
#define int64_max int64( 9223372036854775807ll )
#define int64_ofs uint64( 9223372036854775808ull )
#define longlong_min int64_min
#define longlong_max int64_max
/*!
* The largest 64-bit unsigned integer.
* \ingroup integer_limits
*/
#define uint64_max uint64( 0xffffffffffffffffull )
#define ulonglong_max uint64_max
/*!
* Conversion factor from 8-bit unsigned integer to 16-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint8_to_uint16 uint16( 257u )
/*!
* Conversion factor from 8-bit unsigned integer to 20-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint8_to_uint20 4.1120588235294117647058823529412e+03
/*!
* Conversion factor from 8-bit unsigned integer to 24-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint8_to_uint24 uint32( 65793u )
/*!
* Conversion factor from 8-bit unsigned integer to 32-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint8_to_uint32 uint32( 16843009u )
/*!
* Conversion factor from 8-bit unsigned integer to 64-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint8_to_uint64 uint64( 72340172838076673ull )
/*!
* Conversion factor from 16-bit unsigned integer to 8-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint16_to_uint8 3.8910505836575875486381322957198e-03
/*!
* Conversion factor from 16-bit unsigned integer to 20-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint16_to_uint20 1.6000228885328450446326390478370e+01
/*!
* Conversion factor from 16-bit unsigned integer to 24-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint16_to_uint24 2.5600389105058365758754863813230e+02
/*!
* Conversion factor from 16-bit unsigned integer to 32-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint16_to_uint32 uint32( 65537u )
/*!
* Conversion factor from 16-bit unsigned integer to 64-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint16_to_uint64 uint64( 281479271743489ull )
/*!
* Conversion factor from 20-bit unsigned integer to 8-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint20_to_uint8 2.4318718260496387955081896860024e-04
/*!
* Conversion factor from 20-bit unsigned integer to 16-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint20_to_uint16 6.2499105929475717044560474930262e-02
/*!
* Conversion factor from 20-bit unsigned integer to 24-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint20_to_uint24 1.6000014305128388527287032401116e+01
/*!
* Conversion factor from 20-bit unsigned integer to 32-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint20_to_uint32 4.0960039053000500679493598455046e+03
/*!
* Conversion factor from 20-bit unsigned integer to 64-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint20_to_uint64 1.7592202821648000014305128388527e+13
/*!
* Conversion factor from 24-bit unsigned integer to 8-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint24_to_uint8 1.5199185323666651467481343000015e-05
/*!
* Conversion factor from 24-bit unsigned integer to 16-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint24_to_uint16 3.9061906281823294271427051510039e-03
/*!
* Conversion factor from 24-bit unsigned integer to 20-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint24_to_uint20 6.2499944120642192402016663671533e-02
/*!
* Conversion factor from 24-bit unsigned integer to 32-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint24_to_uint32 2.5600001519918532366665146748134e+02
/*!
* Conversion factor from 24-bit unsigned integer to 64-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint24_to_uint64 1.0995116933120039061906281823294e+12
/*!
* Conversion factor from 32-bit unsigned integer to 8-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint32_to_uint8 5.9371814145560333073502484027646e-08
/*!
* Conversion factor from 32-bit unsigned integer to 16-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint32_to_uint16 1.5258556235409005599890138395105e-05
/*!
* Conversion factor from 32-bit unsigned integer to 20-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint32_to_uint20 2.4414039222619971079430536152662e-04
/*!
* Conversion factor from 32-bit unsigned integer to 24-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint32_to_uint24 3.9062497680788509939049489316309e-03
/*!
* Conversion factor from 32-bit unsigned integer to 64-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint32_to_uint64 uint64( 4294967297ull )
/*!
* Conversion factor from 64-bit unsigned integer to 8-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint64_to_uint8 1.3823577699190181534344400859741e-17
/*!
* Conversion factor from 64-bit unsigned integer to 16-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint64_to_uint16 3.5526594686918766543265110209534e-15
/*!
* Conversion factor from 64-bit unsigned integer to 20-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint64_to_uint20 5.6843364650699390597549726005894e-14
/*!
* Conversion factor from 64-bit unsigned integer to 24-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint64_to_uint24 9.0949464756281961368912116576494e-13
/*!
* Conversion factor from 64-bit unsigned integer to 32-bit unsigned integer.
* \ingroup integer_conversion_factors
*/
#define uint64_to_uint32 2.3283064359965952029459655278022e-10
#endif // _MSC_VER
namespace pcl
{
inline double BitMin( int n )
{
switch ( n )
{
case 8: return double( int8_min );
case 16: return double( int16_min );
case 32: return double( int32_min );
case 64: return double( int64_min );
default: return -double( (uint64( 1 ) << n) >> 1 );
}
}
inline double BitMax( int n )
{
switch ( n )
{
case 8: return double( int8_max );
case 16: return double( int16_max );
case 32: return double( int32_max );
case 64: return double( int64_max );
default: return double( ((uint64( 1 ) << n) >> 1) - 1 );
}
}
inline double UBitMax( int n )
{
switch ( n )
{
case 8: return double( uint8_max );
case 16: return double( uint16_max );
case 32: return double( uint32_max );
case 64: return double( uint64_max );
default: return double( (uint64( 1 ) << n) - 1 );
}
}
} // pcl
#endif // !__PCL_NO_INTEGER_LIMITS
/*
* Unicode character types.
*/
#ifndef __PCL_NO_UNICODE_CHARACTER_TYPES
namespace pcl
{
/*!
* \defgroup unicode_char_types Unicode Character Types
*/
/*!
* 16-bit Unicode character (UTF-16)
* \ingroup unicode_char_types
*/
typedef uint16 char16_type;
/*!
* 32-bit Unicode character (UTF-32)
* \ingroup unicode_char_types
*/
typedef uint32 char32_type;
} // pcl
#endif // !__PCL_NO_UNICODE_CHARACTER_TYPES
/*
* File size and position types.
*/
#ifndef __PCL_NO_FILE_SIZE_AND_POSITION_TYPES
#ifndef __PCL_WINDOWS
# ifndef _FILE_OFFSET_BITS
# define _FILE_OFFSET_BITS 64
# endif
# define _LARGEFILE_SOURCE 1
# define _LARGEFILE64_SOURCE 1
#endif
namespace pcl
{
/*!
* \defgroup file_size_and_pos_types File Size and Position Types
*
* File positions are always signed numbers. We support 64-bit file systems.
*/
/*!
* A type used to store a byte position or a byte offset in a file.
* \ingroup file_size_and_pos_types
*/
typedef int64 fpos_type;
/*!
* A type used to store the length of a file in bytes.
* \ingroup file_size_and_pos_types
*/
typedef int64 fsize_type;
} // pcl
#endif // !__PCL_NO_FILE_SIZE_AND_POSITION_TYPES
#endif // !__PCL_NO_PORTABLE_INTEGER_TYPES
/*
* Maximum number of processors allowed.
*/
#define PCL_MAX_PROCESSORS 1023
#define PCL_MAX_PROCESSORS_BITCOUNT 10
// ----------------------------------------------------------------------------
#endif // __PCL_Defs_h
// ----------------------------------------------------------------------------
// EOF pcl/Defs.h - Released 2022-03-12T18:59:29Z