diff options
Diffstat (limited to 'silx/math/histogramnd')
-rw-r--r-- | silx/math/histogramnd/include/histogramnd_c.h | 313 | ||||
-rw-r--r-- | silx/math/histogramnd/include/msvc/stdint.h | 247 | ||||
-rw-r--r-- | silx/math/histogramnd/include/templates.h | 30 | ||||
-rw-r--r-- | silx/math/histogramnd/src/histogramnd_c.c | 301 | ||||
-rw-r--r-- | silx/math/histogramnd/src/histogramnd_template.c | 260 |
5 files changed, 0 insertions, 1151 deletions
diff --git a/silx/math/histogramnd/include/histogramnd_c.h b/silx/math/histogramnd/include/histogramnd_c.h deleted file mode 100644 index abe464f..0000000 --- a/silx/math/histogramnd/include/histogramnd_c.h +++ /dev/null @@ -1,313 +0,0 @@ -/*########################################################################## -# Copyright (C) 2016 European Synchrotron Radiation Facility -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# ############################################################################*/ - -#ifndef HISTOGRAMND_C_H -#define HISTOGRAMND_C_H - -/* checking for MSVC version because VS 2008 doesnt fully support C99 - so inttypes.h and stdint.h are not provided with the compiler. */ -#if defined(_MSC_VER) && _MSC_VER < 1600 - #include "msvc/stdint.h" -#else - #include <inttypes.h> -#endif - -#include "templates.h" - -/** Allowed flag values for the i_opt_flags arguments. - */ -typedef enum { - HISTO_NONE = 0, /**< No options. */ - HISTO_WEIGHT_MIN = 1, /**< Filter weights with i_weight_min. */ - HISTO_WEIGHT_MAX = 1<<1, /**< Filter weights with i_weight_max. */ - HISTO_LAST_BIN_CLOSED = 1<<2 /**< Last bin is closed. */ -} histo_opt_type; - -/** Return codees for the histogramnd function. - */ -typedef enum { - HISTO_OK = 0, /**< No error. */ - HISTO_ERR_ALLOC /**< Failed to allocate memory. */ -} histo_rc_t; - -/*===================== - * double sample, double cumul - * ==================== -*/ - -int histogramnd_double_double_double(double *i_sample, - double *i_weigths, - int i_n_dim, - int i_n_elem, - double *i_bin_ranges, - int *i_n_bin, - uint32_t *o_histo, - double *o_cumul, - double *o_bin_edges, - int i_opt_flags, - double i_weight_min, - double i_weight_max); - -int histogramnd_double_float_double(double *i_sample, - float *i_weigths, - int i_n_dim, - int i_n_elem, - double *i_bin_ranges, - int *i_n_bin, - uint32_t *o_histo, - double *o_cumul, - double *o_bin_edges, - int i_opt_flags, - float i_weight_min, - float i_weight_max); - -int histogramnd_double_int32_t_double(double *i_sample, - int32_t *i_weigths, - int i_n_dim, - int i_n_elem, - double *i_bin_ranges, - int *i_n_bin, - uint32_t *o_histo, - double *o_cumul, - double *o_bin_edges, - int i_opt_flags, - int32_t i_weight_min, - int32_t i_weight_max); - -/*===================== - * float sample, double cumul - * ==================== -*/ -int histogramnd_float_double_double(float *i_sample, - double *i_weigths, - int i_n_dim, - int i_n_elem, - double *i_bin_ranges, - int *i_n_bin, - uint32_t *o_histo, - double *o_cumul, - double *o_bin_edges, - int i_opt_flags, - double i_weight_min, - double i_weight_max); - -int histogramnd_float_float_double(float *i_sample, - float *i_weigths, - int i_n_dim, - int i_n_elem, - double *i_bin_ranges, - int *i_n_bin, - uint32_t *o_histo, - double *o_cumul, - double *o_bin_edges, - int i_opt_flags, - float i_weight_min, - float i_weight_max); - -int histogramnd_float_int32_t_double(float *i_sample, - int32_t *i_weigths, - int i_n_dim, - int i_n_elem, - double *i_bin_ranges, - int *i_n_bin, - uint32_t *o_histo, - double *o_cumul, - double *o_bin_edges, - int i_opt_flags, - int32_t i_weight_min, - int32_t i_weight_max); - -/*===================== - * int32_t sample, double cumul - * ==================== -*/ -int histogramnd_int32_t_double_double(int32_t *i_sample, - double *i_weigths, - int i_n_dim, - int i_n_elem, - double *i_bin_ranges, - int *i_n_bin, - uint32_t *o_histo, - double *o_cumul, - double *o_bin_edges, - int i_opt_flags, - double i_weight_min, - double i_weight_max); - -int histogramnd_int32_t_float_double(int32_t *i_sample, - float *i_weigths, - int i_n_dim, - int i_n_elem, - double *i_bin_ranges, - int *i_n_bin, - uint32_t *o_histo, - double *o_cumul, - double *o_bin_edges, - int i_opt_flags, - float i_weight_min, - float i_weight_max); - -int histogramnd_int32_t_int32_t_double(int32_t *i_sample, - int32_t *i_weigths, - int i_n_dim, - int i_n_elem, - double *i_bin_ranges, - int *i_n_bin, - uint32_t *o_histo, - double *o_cumul, - double *o_bin_edges, - int i_opt_flags, - int32_t i_weight_min, - int32_t i_weight_max); - -/*===================== - * double sample, float cumul - * ==================== -*/ - -int histogramnd_double_double_float(double *i_sample, - double *i_weigths, - int i_n_dim, - int i_n_elem, - double *i_bin_ranges, - int *i_n_bin, - uint32_t *o_histo, - float *o_cumul, - double *o_bin_edges, - int i_opt_flags, - double i_weight_min, - double i_weight_max); - -int histogramnd_double_float_float(double *i_sample, - float *i_weigths, - int i_n_dim, - int i_n_elem, - double *i_bin_ranges, - int *i_n_bin, - uint32_t *o_histo, - float *o_cumul, - double *o_bin_edges, - int i_opt_flags, - float i_weight_min, - float i_weight_max); - -int histogramnd_double_int32_t_float(double *i_sample, - int32_t *i_weigths, - int i_n_dim, - int i_n_elem, - double *i_bin_ranges, - int *i_n_bin, - uint32_t *o_histo, - float *o_cumul, - double *o_bin_edges, - int i_opt_flags, - int32_t i_weight_min, - int32_t i_weight_max); - -/*===================== - * float sample, float cumul - * ==================== -*/ -int histogramnd_float_double_float(float *i_sample, - double *i_weigths, - int i_n_dim, - int i_n_elem, - double *i_bin_ranges, - int *i_n_bin, - uint32_t *o_histo, - float *o_cumul, - double *o_bin_edges, - int i_opt_flags, - double i_weight_min, - double i_weight_max); - -int histogramnd_float_float_float(float *i_sample, - float *i_weigths, - int i_n_dim, - int i_n_elem, - double *i_bin_ranges, - int *i_n_bin, - uint32_t *o_histo, - float *o_cumul, - double *o_bin_edges, - int i_opt_flags, - float i_weight_min, - float i_weight_max); - -int histogramnd_float_int32_t_float(float *i_sample, - int32_t *i_weigths, - int i_n_dim, - int i_n_elem, - double *i_bin_ranges, - int *i_n_bin, - uint32_t *o_histo, - float *o_cumul, - double *o_bin_edges, - int i_opt_flags, - int32_t i_weight_min, - int32_t i_weight_max); - -/*===================== - * int32_t sample, double cumul - * ==================== -*/ -int histogramnd_int32_t_double_float(int32_t *i_sample, - double *i_weigths, - int i_n_dim, - int i_n_elem, - double *i_bin_ranges, - int *i_n_bin, - uint32_t *o_histo, - float *o_cumul, - double *o_bin_edges, - int i_opt_flags, - double i_weight_min, - double i_weight_max); - -int histogramnd_int32_t_float_float(int32_t *i_sample, - float *i_weigths, - int i_n_dim, - int i_n_elem, - double *i_bin_ranges, - int *i_n_bin, - uint32_t *o_histo, - float *o_cumul, - double *o_bin_edges, - int i_opt_flags, - float i_weight_min, - float i_weight_max); - -int histogramnd_int32_t_int32_t_float(int32_t *i_sample, - int32_t *i_weigths, - int i_n_dim, - int i_n_elem, - double *i_bin_ranges, - int *i_n_bin, - uint32_t *o_histo, - float *o_cumul, - double *o_bin_edges, - int i_opt_flags, - int32_t i_weight_min, - int32_t i_weight_max); - -#endif /* #define HISTOGRAMND_C_H */ diff --git a/silx/math/histogramnd/include/msvc/stdint.h b/silx/math/histogramnd/include/msvc/stdint.h deleted file mode 100644 index e236bb0..0000000 --- a/silx/math/histogramnd/include/msvc/stdint.h +++ /dev/null @@ -1,247 +0,0 @@ -// ISO C9x compliant stdint.h for Microsoft Visual Studio -// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 -// -// Copyright (c) 2006-2008 Alexander Chemeris -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. 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. The name of the author may be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -// OR BUSINESS INTERRUPTION) 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 _MSC_VER // [ -#error "Use this header only with Microsoft Visual C++ compilers!" -#endif // _MSC_VER ] - -#ifndef _MSC_STDINT_H_ // [ -#define _MSC_STDINT_H_ - -#if _MSC_VER > 1000 -#pragma once -#endif - -#include <limits.h> - -// For Visual Studio 6 in C++ mode and for many Visual Studio versions when -// compiling for ARM we should wrap <wchar.h> include with 'extern "C++" {}' -// or compiler give many errors like this: -// error C2733: second C linkage of overloaded function 'wmemchr' not allowed -#ifdef __cplusplus -extern "C" { -#endif -# include <wchar.h> -#ifdef __cplusplus -} -#endif - -// Define _W64 macros to mark types changing their size, like intptr_t. -#ifndef _W64 -# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 -# define _W64 __w64 -# else -# define _W64 -# endif -#endif - - -// 7.18.1 Integer types - -// 7.18.1.1 Exact-width integer types - -// Visual Studio 6 and Embedded Visual C++ 4 doesn't -// realize that, e.g. char has the same size as __int8 -// so we give up on __intX for them. -#if (_MSC_VER < 1300) - typedef char int8_t; - typedef short int16_t; - typedef int int32_t; - typedef unsigned char uint8_t; - typedef unsigned short uint16_t; - typedef unsigned int uint32_t; -#else - typedef __int8 int8_t; - typedef __int16 int16_t; - typedef __int32 int32_t; - typedef unsigned __int8 uint8_t; - typedef unsigned __int16 uint16_t; - typedef unsigned __int32 uint32_t; -#endif -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; - - -// 7.18.1.2 Minimum-width integer types -typedef int8_t int_least8_t; -typedef int16_t int_least16_t; -typedef int32_t int_least32_t; -typedef int64_t int_least64_t; -typedef uint8_t uint_least8_t; -typedef uint16_t uint_least16_t; -typedef uint32_t uint_least32_t; -typedef uint64_t uint_least64_t; - -// 7.18.1.3 Fastest minimum-width integer types -typedef int8_t int_fast8_t; -typedef int16_t int_fast16_t; -typedef int32_t int_fast32_t; -typedef int64_t int_fast64_t; -typedef uint8_t uint_fast8_t; -typedef uint16_t uint_fast16_t; -typedef uint32_t uint_fast32_t; -typedef uint64_t uint_fast64_t; - -// 7.18.1.4 Integer types capable of holding object pointers -#ifdef _WIN64 // [ - typedef __int64 intptr_t; - typedef unsigned __int64 uintptr_t; -#else // _WIN64 ][ - typedef _W64 int intptr_t; - typedef _W64 unsigned int uintptr_t; -#endif // _WIN64 ] - -// 7.18.1.5 Greatest-width integer types -typedef int64_t intmax_t; -typedef uint64_t uintmax_t; - - -// 7.18.2 Limits of specified-width integer types - -#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 - -// 7.18.2.1 Limits of exact-width integer types -#define INT8_MIN ((int8_t)_I8_MIN) -#define INT8_MAX _I8_MAX -#define INT16_MIN ((int16_t)_I16_MIN) -#define INT16_MAX _I16_MAX -#define INT32_MIN ((int32_t)_I32_MIN) -#define INT32_MAX _I32_MAX -#define INT64_MIN ((int64_t)_I64_MIN) -#define INT64_MAX _I64_MAX -#define UINT8_MAX _UI8_MAX -#define UINT16_MAX _UI16_MAX -#define UINT32_MAX _UI32_MAX -#define UINT64_MAX _UI64_MAX - -// 7.18.2.2 Limits of minimum-width integer types -#define INT_LEAST8_MIN INT8_MIN -#define INT_LEAST8_MAX INT8_MAX -#define INT_LEAST16_MIN INT16_MIN -#define INT_LEAST16_MAX INT16_MAX -#define INT_LEAST32_MIN INT32_MIN -#define INT_LEAST32_MAX INT32_MAX -#define INT_LEAST64_MIN INT64_MIN -#define INT_LEAST64_MAX INT64_MAX -#define UINT_LEAST8_MAX UINT8_MAX -#define UINT_LEAST16_MAX UINT16_MAX -#define UINT_LEAST32_MAX UINT32_MAX -#define UINT_LEAST64_MAX UINT64_MAX - -// 7.18.2.3 Limits of fastest minimum-width integer types -#define INT_FAST8_MIN INT8_MIN -#define INT_FAST8_MAX INT8_MAX -#define INT_FAST16_MIN INT16_MIN -#define INT_FAST16_MAX INT16_MAX -#define INT_FAST32_MIN INT32_MIN -#define INT_FAST32_MAX INT32_MAX -#define INT_FAST64_MIN INT64_MIN -#define INT_FAST64_MAX INT64_MAX -#define UINT_FAST8_MAX UINT8_MAX -#define UINT_FAST16_MAX UINT16_MAX -#define UINT_FAST32_MAX UINT32_MAX -#define UINT_FAST64_MAX UINT64_MAX - -// 7.18.2.4 Limits of integer types capable of holding object pointers -#ifdef _WIN64 // [ -# define INTPTR_MIN INT64_MIN -# define INTPTR_MAX INT64_MAX -# define UINTPTR_MAX UINT64_MAX -#else // _WIN64 ][ -# define INTPTR_MIN INT32_MIN -# define INTPTR_MAX INT32_MAX -# define UINTPTR_MAX UINT32_MAX -#endif // _WIN64 ] - -// 7.18.2.5 Limits of greatest-width integer types -#define INTMAX_MIN INT64_MIN -#define INTMAX_MAX INT64_MAX -#define UINTMAX_MAX UINT64_MAX - -// 7.18.3 Limits of other integer types - -#ifdef _WIN64 // [ -# define PTRDIFF_MIN _I64_MIN -# define PTRDIFF_MAX _I64_MAX -#else // _WIN64 ][ -# define PTRDIFF_MIN _I32_MIN -# define PTRDIFF_MAX _I32_MAX -#endif // _WIN64 ] - -#define SIG_ATOMIC_MIN INT_MIN -#define SIG_ATOMIC_MAX INT_MAX - -#ifndef SIZE_MAX // [ -# ifdef _WIN64 // [ -# define SIZE_MAX _UI64_MAX -# else // _WIN64 ][ -# define SIZE_MAX _UI32_MAX -# endif // _WIN64 ] -#endif // SIZE_MAX ] - -// WCHAR_MIN and WCHAR_MAX are also defined in <wchar.h> -#ifndef WCHAR_MIN // [ -# define WCHAR_MIN 0 -#endif // WCHAR_MIN ] -#ifndef WCHAR_MAX // [ -# define WCHAR_MAX _UI16_MAX -#endif // WCHAR_MAX ] - -#define WINT_MIN 0 -#define WINT_MAX _UI16_MAX - -#endif // __STDC_LIMIT_MACROS ] - - -// 7.18.4 Limits of other integer types - -#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 - -// 7.18.4.1 Macros for minimum-width integer constants - -#define INT8_C(val) val##i8 -#define INT16_C(val) val##i16 -#define INT32_C(val) val##i32 -#define INT64_C(val) val##i64 - -#define UINT8_C(val) val##ui8 -#define UINT16_C(val) val##ui16 -#define UINT32_C(val) val##ui32 -#define UINT64_C(val) val##ui64 - -// 7.18.4.2 Macros for greatest-width integer constants -#define INTMAX_C INT64_C -#define UINTMAX_C UINT64_C - -#endif // __STDC_CONSTANT_MACROS ] - - -#endif // _MSC_STDINT_H_ ] diff --git a/silx/math/histogramnd/include/templates.h b/silx/math/histogramnd/include/templates.h deleted file mode 100644 index 490eed3..0000000 --- a/silx/math/histogramnd/include/templates.h +++ /dev/null @@ -1,30 +0,0 @@ -/*########################################################################## -# Copyright (C) 2016 European Synchrotron Radiation Facility -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# ############################################################################*/ - -#ifndef TEMPLATES_H_ -#define TEMPLATES_H_ - -#define CONCAT(X,Y,Z,T) X##_##Y##_##Z##_##T -#define TEMPLATE(X,Y,Z,T) CONCAT(X,Y,Z,T) - -#endif diff --git a/silx/math/histogramnd/src/histogramnd_c.c b/silx/math/histogramnd/src/histogramnd_c.c deleted file mode 100644 index fc9d77e..0000000 --- a/silx/math/histogramnd/src/histogramnd_c.c +++ /dev/null @@ -1,301 +0,0 @@ -/*########################################################################## -# Copyright (C) 2016 European Synchrotron Radiation Facility -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# ############################################################################*/ - -#include "histogramnd_c.h" - -/*===================== - * double sample, double cumul - * ===================== -*/ -#ifdef HISTO_SAMPLE_T -#undef HISTO_SAMPLE_T -#endif -#define HISTO_SAMPLE_T double -#ifdef HISTO_WEIGHT_T -#undef HISTO_WEIGHT_T -#endif -#define HISTO_WEIGHT_T double -#ifdef HISTO_CUMUL_T -#undef HISTO_CUMUL_T -#endif -#define HISTO_CUMUL_T double -#include "histogramnd_template.c" - -#ifdef HISTO_SAMPLE_T -#undef HISTO_SAMPLE_T -#endif -#define HISTO_SAMPLE_T double -#ifdef HISTO_WEIGHT_T -#undef HISTO_WEIGHT_T -#endif -#define HISTO_WEIGHT_T float -#ifdef HISTO_CUMUL_T -#undef HISTO_CUMUL_T -#endif -#define HISTO_CUMUL_T double -#include "histogramnd_template.c" - -#ifdef HISTO_SAMPLE_T -#undef HISTO_SAMPLE_T -#endif -#define HISTO_SAMPLE_T double -#ifdef HISTO_WEIGHT_T -#undef HISTO_WEIGHT_T -#endif -#define HISTO_WEIGHT_T int32_t -#ifdef HISTO_CUMUL_T -#undef HISTO_CUMUL_T -#endif -#define HISTO_CUMUL_T double -#include "histogramnd_template.c" - -/*===================== - * float sample, double cumul - * ===================== -*/ -#ifdef HISTO_SAMPLE_T -#undef HISTO_SAMPLE_T -#endif -#define HISTO_SAMPLE_T float -#ifdef HISTO_WEIGHT_T -#undef HISTO_WEIGHT_T -#endif -#define HISTO_WEIGHT_T double -#ifdef HISTO_CUMUL_T -#undef HISTO_CUMUL_T -#endif -#define HISTO_CUMUL_T double -#include "histogramnd_template.c" - -#ifdef HISTO_SAMPLE_T -#undef HISTO_SAMPLE_T -#endif -#define HISTO_SAMPLE_T float -#ifdef HISTO_WEIGHT_T -#undef HISTO_WEIGHT_T -#endif -#define HISTO_WEIGHT_T float -#ifdef HISTO_CUMUL_T -#undef HISTO_CUMUL_T -#endif -#define HISTO_CUMUL_T double -#include "histogramnd_template.c" - -#ifdef HISTO_SAMPLE_T -#undef HISTO_SAMPLE_T -#endif -#define HISTO_SAMPLE_T float -#ifdef HISTO_WEIGHT_T -#undef HISTO_WEIGHT_T -#endif -#define HISTO_WEIGHT_T int32_t -#ifdef HISTO_CUMUL_T -#undef HISTO_CUMUL_T -#endif -#define HISTO_CUMUL_T double -#include "histogramnd_template.c" - -/*===================== - * int32_t sample, double cumul - * ===================== -*/ -#ifdef HISTO_SAMPLE_T -#undef HISTO_SAMPLE_T -#endif -#define HISTO_SAMPLE_T int32_t -#ifdef HISTO_WEIGHT_T -#undef HISTO_WEIGHT_T -#endif -#define HISTO_WEIGHT_T double -#ifdef HISTO_CUMUL_T -#undef HISTO_CUMUL_T -#endif -#define HISTO_CUMUL_T double -#include "histogramnd_template.c" - -#ifdef HISTO_SAMPLE_T -#undef HISTO_SAMPLE_T -#endif -#define HISTO_SAMPLE_T int32_t -#ifdef HISTO_WEIGHT_T -#undef HISTO_WEIGHT_T -#endif -#define HISTO_WEIGHT_T float -#ifdef HISTO_CUMUL_T -#undef HISTO_CUMUL_T -#endif -#define HISTO_CUMUL_T double -#include "histogramnd_template.c" - -#ifdef HISTO_SAMPLE_T -#undef HISTO_SAMPLE_T -#endif -#define HISTO_SAMPLE_T int32_t -#ifdef HISTO_WEIGHT_T -#undef HISTO_WEIGHT_T -#endif -#define HISTO_WEIGHT_T int32_t -#ifdef HISTO_CUMUL_T -#undef HISTO_CUMUL_T -#endif -#define HISTO_CUMUL_T double -#include "histogramnd_template.c" - - -/*===================== - * double sample, float cumul - * ===================== -*/ -#ifdef HISTO_SAMPLE_T -#undef HISTO_SAMPLE_T -#endif -#define HISTO_SAMPLE_T double -#ifdef HISTO_WEIGHT_T -#undef HISTO_WEIGHT_T -#endif -#define HISTO_WEIGHT_T double -#ifdef HISTO_CUMUL_T -#undef HISTO_CUMUL_T -#endif -#define HISTO_CUMUL_T float -#include "histogramnd_template.c" - -#ifdef HISTO_SAMPLE_T -#undef HISTO_SAMPLE_T -#endif -#define HISTO_SAMPLE_T double -#ifdef HISTO_WEIGHT_T -#undef HISTO_WEIGHT_T -#endif -#define HISTO_WEIGHT_T float -#ifdef HISTO_CUMUL_T -#undef HISTO_CUMUL_T -#endif -#define HISTO_CUMUL_T float -#include "histogramnd_template.c" - -#ifdef HISTO_SAMPLE_T -#undef HISTO_SAMPLE_T -#endif -#define HISTO_SAMPLE_T double -#ifdef HISTO_WEIGHT_T -#undef HISTO_WEIGHT_T -#endif -#define HISTO_WEIGHT_T int32_t -#ifdef HISTO_CUMUL_T -#undef HISTO_CUMUL_T -#endif -#define HISTO_CUMUL_T float -#include "histogramnd_template.c" - -/*===================== - * float sample, float cumul - * ===================== -*/ -#ifdef HISTO_SAMPLE_T -#undef HISTO_SAMPLE_T -#endif -#define HISTO_SAMPLE_T float -#ifdef HISTO_WEIGHT_T -#undef HISTO_WEIGHT_T -#endif -#define HISTO_WEIGHT_T double -#ifdef HISTO_CUMUL_T -#undef HISTO_CUMUL_T -#endif -#define HISTO_CUMUL_T float -#include "histogramnd_template.c" - -#ifdef HISTO_SAMPLE_T -#undef HISTO_SAMPLE_T -#endif -#define HISTO_SAMPLE_T float -#ifdef HISTO_WEIGHT_T -#undef HISTO_WEIGHT_T -#endif -#define HISTO_WEIGHT_T float -#ifdef HISTO_CUMUL_T -#undef HISTO_CUMUL_T -#endif -#define HISTO_CUMUL_T float -#include "histogramnd_template.c" - -#ifdef HISTO_SAMPLE_T -#undef HISTO_SAMPLE_T -#endif -#define HISTO_SAMPLE_T float -#ifdef HISTO_WEIGHT_T -#undef HISTO_WEIGHT_T -#endif -#define HISTO_WEIGHT_T int32_t -#ifdef HISTO_CUMUL_T -#undef HISTO_CUMUL_T -#endif -#define HISTO_CUMUL_T float -#include "histogramnd_template.c" - -/*===================== - * int32_t sample, float cumul - * ===================== -*/ -#ifdef HISTO_SAMPLE_T -#undef HISTO_SAMPLE_T -#endif -#define HISTO_SAMPLE_T int32_t -#ifdef HISTO_WEIGHT_T -#undef HISTO_WEIGHT_T -#endif -#define HISTO_WEIGHT_T double -#ifdef HISTO_CUMUL_T -#undef HISTO_CUMUL_T -#endif -#define HISTO_CUMUL_T float -#include "histogramnd_template.c" - -#ifdef HISTO_SAMPLE_T -#undef HISTO_SAMPLE_T -#endif -#define HISTO_SAMPLE_T int32_t -#ifdef HISTO_WEIGHT_T -#undef HISTO_WEIGHT_T -#endif -#define HISTO_WEIGHT_T float -#ifdef HISTO_CUMUL_T -#undef HISTO_CUMUL_T -#endif -#define HISTO_CUMUL_T float -#include "histogramnd_template.c" - -#ifdef HISTO_SAMPLE_T -#undef HISTO_SAMPLE_T -#endif -#define HISTO_SAMPLE_T int32_t -#ifdef HISTO_WEIGHT_T -#undef HISTO_WEIGHT_T -#endif -#define HISTO_WEIGHT_T int32_t -#ifdef HISTO_CUMUL_T -#undef HISTO_CUMUL_T -#endif -#define HISTO_CUMUL_T float -#include "histogramnd_template.c" diff --git a/silx/math/histogramnd/src/histogramnd_template.c b/silx/math/histogramnd/src/histogramnd_template.c deleted file mode 100644 index 0276bb4..0000000 --- a/silx/math/histogramnd/src/histogramnd_template.c +++ /dev/null @@ -1,260 +0,0 @@ -/*########################################################################## -# Copyright (C) 2016 European Synchrotron Radiation Facility -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# ############################################################################*/ - -#include "templates.h" - -#include <stdio.h> -#include <stdlib.h> -#include <math.h> -#include <stdarg.h> - -#ifdef HISTO_SAMPLE_T -#ifdef HISTO_WEIGHT_T -#ifdef HISTO_CUMUL_T - -int TEMPLATE(histogramnd, HISTO_SAMPLE_T, HISTO_WEIGHT_T, HISTO_CUMUL_T) - (HISTO_SAMPLE_T *i_sample, - HISTO_WEIGHT_T *i_weights, - int i_n_dim, - int i_n_elem, - double *i_bin_ranges, - int *i_n_bins, - uint32_t *o_histo, - HISTO_CUMUL_T *o_cumul, - double *o_bin_edges, - int i_opt_flags, - HISTO_WEIGHT_T i_weight_min, - HISTO_WEIGHT_T i_weight_max) -{ - /* some counters */ - int i = 0, j = 0; - long elem_idx = 0; - - HISTO_WEIGHT_T * weight_ptr = 0; - HISTO_SAMPLE_T elem_coord = 0.; - - /* computed bin index (i_sample -> grid) */ - long bin_idx = 0; - - double * g_min = 0; - double * g_max = 0; - double * range = 0; - - /* ================================ - * Parsing options, if any. - * ================================ - */ - - int filt_min_weight = 0; - int filt_max_weight = 0; - int last_bin_closed = 0; - - /* Testing the option flags */ - if(i_opt_flags & HISTO_WEIGHT_MIN) - { - filt_min_weight = 1; - } - - if(i_opt_flags & HISTO_WEIGHT_MAX) - { - filt_max_weight = 1; - } - - if(i_opt_flags & HISTO_LAST_BIN_CLOSED) - { - last_bin_closed = 1; - } - - /* storing the min & max bin coordinates in their own arrays because - * i_bin_ranges = [[min0, max0], [min1, max1], ...] - * (mostly for the sake of clarity) - * (maybe faster access too?) - */ - g_min = (double *) malloc(i_n_dim *sizeof(double)); - g_max = (double *) malloc(i_n_dim * sizeof(double)); - /* range used to convert from i_coords to bin indices in the grid */ - range = (double *) malloc(i_n_dim * sizeof(double)); - - if(!g_min || !g_max || !range) - { - free(g_min); - free(g_max); - free(range); - return HISTO_ERR_ALLOC; - } - - j = 0; - for(i=0; i<i_n_dim; i++) - { - g_min[i] = i_bin_ranges[i*2]; - g_max[i] = i_bin_ranges[i*2+1]; - range[i] = g_max[i]-g_min[i]; - - for(bin_idx=0; bin_idx<i_n_bins[i]; j++, bin_idx++) - { - o_bin_edges[j] = g_min[i] + - bin_idx * (range[i] / i_n_bins[i]); - } - o_bin_edges[j++] = g_max[i]; - } - - weight_ptr = i_weights; - - if(!i_weights) - { - /* if weights are not provided there no point in trying to filter them - * (!! careful if you change this, some code below relies on it !!) - */ - filt_min_weight = 0; - filt_max_weight = 0; - - /* If the weights array is not provided then there is no point - * updating the weighted histogram, only the bin counts (o_histo) - * will be filled. - * (!! careful if you change this, some code below relies on it !!) - */ - o_cumul = 0; - } - - /* tried to use pointers instead of indices here, but it didn't - * seem any faster (probably because the compiler - * optimizes stuff anyway), - * so i'm keeping the "indices" version, for the sake of clarity - */ - for(elem_idx=0; - elem_idx<i_n_elem*i_n_dim; - elem_idx+=i_n_dim, weight_ptr++) - { - /* no testing the validity of weight_ptr here, because if it is NULL - * then filt_min_weight/filt_max_weight will be 0. - * (see code above) - */ - if(filt_min_weight && *weight_ptr<i_weight_min) - { - continue; - } - if(filt_max_weight && *weight_ptr>i_weight_max) - { - continue; - } - - bin_idx = 0; - - for(i=0; i<i_n_dim; i++) - { - elem_coord = i_sample[elem_idx+i]; - - /* ===================== - * Element is rejected if any of the following is NOT true : - * 1. coordinate is >= than the minimum value - * 2. coordinate is <= than the maximum value - * 3. coordinate==maximum value and last_bin_closed is True - * ===================== - */ - if(elem_coord<g_min[i]) - { - bin_idx = -1; - break; - } - - /* Here we make the assumption that most of the time - * there will be more coordinates inside the grid interval - * (one test) - * than coordinates higher or equal to the max - * (two tests) - */ - if(elem_coord<g_max[i]) - { - /* Warning : the following factorization seems to - * increase the effect of precision error. - * bin_idx = (long)floor( - * (bin_idx + - * (elem_coord-g_min[i])/range[i]) * - * i_n_bins[i] - * ); - */ - - /* Not using floor to speed up things. - * We don't (?) need all the error checking provided by - * the built-in floor(). - * Also the value is supposed to be always positive. - */ - bin_idx = bin_idx * i_n_bins[i] + - (long)( - ((elem_coord-g_min[i]) * i_n_bins[i]) / - range[i] - ); - } - else /* ===> elem_coord>=g_max[i] */ - { - /* if equal and the last bin is closed : - * put it in the last bin - * else : discard - */ - if(last_bin_closed && elem_coord==g_max[i]) - { - bin_idx = (bin_idx + 1) * i_n_bins[i] - 1; - } - else - { - bin_idx = -1; - break; - } - } /* if(elem_coord<g_max[i]) */ - - } /* for(i=0; i<i_n_dim; i++) */ - - /* element is out of the grid */ - if(bin_idx==-1) - { - continue; - } - - if(o_histo) - { - o_histo[bin_idx] += 1; - } - if(o_cumul) - { - /* not testing the pointer since o_cumul is null if - * i_weights is null. - */ - o_cumul[bin_idx] += (HISTO_CUMUL_T) *weight_ptr; - } - - } /* for(elem_idx=0; elem_idx<i_n_elem*i_n_dim; elem_idx+=i_n_dim) */ - - free(g_min); - free(g_max); - free(range); - - /* For now just returning 0 (OK) since all the checks are done in - * python. This might change later if people want to call this - * function directly from C (might have to implement error codes). - */ - return HISTO_OK; -} - -#endif -#endif -#endif |