8 #ifndef vtkInterpolationMath_h
9 #define vtkInterpolationMath_h
11 #include "vtkEndian.h"
14 VTK_ABI_NAMESPACE_BEGIN
21 static int Floor(
double x, F& f);
24 static int Round(
double x);
27 static int Clamp(
int a,
int b,
int c);
28 static int Wrap(
int a,
int b,
int c);
29 static int Mirror(
int a,
int b,
int c);
73 #define VTK_INTERPOLATE_FLOOR_TOL 7.62939453125e-06
79 #if VTK_SIZEOF_VOID_P >= 8
82 long long i =
static_cast<long long>(x);
83 f =
static_cast<F
>(x - i);
84 return static_cast<int>(i - 103079215104LL);
85 #elif !defined VTK_WORDS_BIGENDIAN
93 dual.d = x + 103079215104.0;
94 f = dual.s[0] * 0.0000152587890625;
95 return static_cast<int>((dual.i[1] << 16) | ((dual.i[0]) >> 16));
104 dual.d = x + 103079215104.0;
105 f = dual.s[3] * 0.0000152587890625;
106 return static_cast<int>((dual.i[0] << 16) | ((dual.i[1]) >> 16));
112 #if VTK_SIZEOF_VOID_P >= 8
115 long long i =
static_cast<long long>(x);
116 return static_cast<int>(i - 103079215104LL);
117 #elif !defined VTK_WORDS_BIGENDIAN
124 dual.d = x + 103079215104.5;
125 return static_cast<int>((dual.i[1] << 16) | ((dual.i[0]) >> 16));
133 dual.d = x + 103079215104.5;
134 return static_cast<int>((dual.i[0] << 16) | ((dual.i[1]) >> 16));
143 a = (a <= c ? a : c);
145 a = (a >= 0 ? a : 0);
154 int range = c - b + 1;
158 a = (a >= 0 ? a : a +
range);
167 #ifndef VTK_IMAGE_BORDER_LEGACY_MIRROR
169 int ifzero = (range == 0);
170 int range2 = 2 * range + ifzero;
172 a = (a >= 0 ? a : -a);
174 a = (a <= range ? a : range2 - a);
177 int range = c - b + 1;
178 int range2 = 2 *
range;
180 a = (a >= 0 ? a : -a - 1);
182 a = (a < range ? a : range2 - a - 1);
187 VTK_ABI_NAMESPACE_END
#define VTK_INTERPOLATE_FLOOR_TOL
static int Round(double x)
static int Mirror(int a, int b, int c)
static int Clamp(int a, int b, int c)
static int Wrap(int a, int b, int c)
math code for image interpolators
static int Floor(double x, F &f)