Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'extern/curve_fit_nd/intern/curve_fit_inline.h')
-rw-r--r--extern/curve_fit_nd/intern/curve_fit_inline.h262
1 files changed, 262 insertions, 0 deletions
diff --git a/extern/curve_fit_nd/intern/curve_fit_inline.h b/extern/curve_fit_nd/intern/curve_fit_inline.h
new file mode 100644
index 00000000000..17aa02be3e5
--- /dev/null
+++ b/extern/curve_fit_nd/intern/curve_fit_inline.h
@@ -0,0 +1,262 @@
+/*
+ * Copyright (c) 2016, Blender Foundation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * 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.
+ * * Neither the name of the <organization> nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 <COPYRIGHT HOLDER> 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.
+ */
+
+
+/** \file curve_fit_inline.h
+ * \ingroup curve_fit
+ */
+
+/** \name Simple Vector Math Lib
+ * \{ */
+
+#ifdef _MSC_VER
+# define MINLINE static __forceinline
+#else
+# define MINLINE static inline
+#endif
+
+MINLINE double sq(const double d)
+{
+ return d * d;
+}
+
+#ifndef _MSC_VER
+MINLINE double min(const double a, const double b)
+{
+ return b < a ? b : a;
+}
+
+MINLINE double max(const double a, const double b)
+{
+ return a < b ? b : a;
+}
+#endif
+
+MINLINE void zero_vn(
+ double v0[], const uint dims)
+{
+ for (uint j = 0; j < dims; j++) {
+ v0[j] = 0.0;
+ }
+}
+
+MINLINE void flip_vn_vnvn(
+ double v_out[], const double v0[], const double v1[], const uint dims)
+{
+ for (uint j = 0; j < dims; j++) {
+ v_out[j] = v0[j] + (v0[j] - v1[j]);
+ }
+}
+
+MINLINE void copy_vnvn(
+ double v0[], const double v1[], const uint dims)
+{
+ for (uint j = 0; j < dims; j++) {
+ v0[j] = v1[j];
+ }
+}
+
+MINLINE double dot_vnvn(
+ const double v0[], const double v1[], const uint dims)
+{
+ double d = 0.0;
+ for (uint j = 0; j < dims; j++) {
+ d += v0[j] * v1[j];
+ }
+ return d;
+}
+
+MINLINE void add_vn_vnvn(
+ double v_out[], const double v0[], const double v1[], const uint dims)
+{
+ for (uint j = 0; j < dims; j++) {
+ v_out[j] = v0[j] + v1[j];
+ }
+}
+
+MINLINE void sub_vn_vnvn(
+ double v_out[], const double v0[], const double v1[], const uint dims)
+{
+ for (uint j = 0; j < dims; j++) {
+ v_out[j] = v0[j] - v1[j];
+ }
+}
+
+MINLINE void iadd_vnvn(
+ double v0[], const double v1[], const uint dims)
+{
+ for (uint j = 0; j < dims; j++) {
+ v0[j] += v1[j];
+ }
+}
+
+MINLINE void isub_vnvn(
+ double v0[], const double v1[], const uint dims)
+{
+ for (uint j = 0; j < dims; j++) {
+ v0[j] -= v1[j];
+ }
+}
+
+MINLINE void madd_vn_vnvn_fl(
+ double v_out[],
+ const double v0[], const double v1[],
+ const double f, const uint dims)
+{
+ for (uint j = 0; j < dims; j++) {
+ v_out[j] = v0[j] + v1[j] * f;
+ }
+}
+
+MINLINE void msub_vn_vnvn_fl(
+ double v_out[],
+ const double v0[], const double v1[],
+ const double f, const uint dims)
+{
+ for (uint j = 0; j < dims; j++) {
+ v_out[j] = v0[j] - v1[j] * f;
+ }
+}
+
+MINLINE void miadd_vn_vn_fl(
+ double v_out[], const double v0[], double f, const uint dims)
+{
+ for (uint j = 0; j < dims; j++) {
+ v_out[j] += v0[j] * f;
+ }
+}
+
+#if 0
+MINLINE void misub_vn_vn_fl(
+ double v_out[], const double v0[], double f, const uint dims)
+{
+ for (uint j = 0; j < dims; j++) {
+ v_out[j] -= v0[j] * f;
+ }
+}
+#endif
+
+MINLINE void mul_vnvn_fl(
+ double v_out[],
+ const double v0[], const double f, const uint dims)
+{
+ for (uint j = 0; j < dims; j++) {
+ v_out[j] = v0[j] * f;
+ }
+}
+
+MINLINE void imul_vn_fl(double v0[], const double f, const uint dims)
+{
+ for (uint j = 0; j < dims; j++) {
+ v0[j] *= f;
+ }
+}
+
+
+MINLINE double len_squared_vnvn(
+ const double v0[], const double v1[], const uint dims)
+{
+ double d = 0.0;
+ for (uint j = 0; j < dims; j++) {
+ d += sq(v0[j] - v1[j]);
+ }
+ return d;
+}
+
+MINLINE double len_squared_vn(
+ const double v0[], const uint dims)
+{
+ double d = 0.0;
+ for (uint j = 0; j < dims; j++) {
+ d += sq(v0[j]);
+ }
+ return d;
+}
+
+MINLINE double len_vnvn(
+ const double v0[], const double v1[], const uint dims)
+{
+ return sqrt(len_squared_vnvn(v0, v1, dims));
+}
+
+#if 0
+static double len_vn(
+ const double v0[], const uint dims)
+{
+ return sqrt(len_squared_vn(v0, dims));
+}
+
+MINLINE double normalize_vn(
+ double v0[], const uint dims)
+{
+ double d = len_squared_vn(v0, dims);
+ if (d != 0.0 && ((d = sqrt(d)) != 0.0)) {
+ imul_vn_fl(v0, 1.0 / d, dims);
+ }
+ return d;
+}
+#endif
+
+/* v_out = (v0 - v1).normalized() */
+MINLINE double normalize_vn_vnvn(
+ double v_out[],
+ const double v0[], const double v1[], const uint dims)
+{
+ double d = 0.0;
+ for (uint j = 0; j < dims; j++) {
+ double a = v0[j] - v1[j];
+ d += sq(a);
+ v_out[j] = a;
+ }
+ if (d != 0.0 && ((d = sqrt(d)) != 0.0)) {
+ imul_vn_fl(v_out, 1.0 / d, dims);
+ }
+ return d;
+}
+
+MINLINE bool is_almost_zero_ex(double val, double eps)
+{
+ return (-eps < val) && (val < eps);
+}
+
+MINLINE bool is_almost_zero(double val)
+{
+ return is_almost_zero_ex(val, 1e-8);
+}
+
+MINLINE bool equals_vnvn(
+ const double v0[], const double v1[], const uint dims)
+{
+ for (uint j = 0; j < dims; j++) {
+ if (v0[j] != v1[j]) {
+ return false;
+ }
+ }
+ return true;
+}
+
+/** \} */