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/mantaflow/preprocessed/general.h')
-rw-r--r--extern/mantaflow/preprocessed/general.h247
1 files changed, 247 insertions, 0 deletions
diff --git a/extern/mantaflow/preprocessed/general.h b/extern/mantaflow/preprocessed/general.h
new file mode 100644
index 00000000000..7a840517cef
--- /dev/null
+++ b/extern/mantaflow/preprocessed/general.h
@@ -0,0 +1,247 @@
+
+
+// DO NOT EDIT !
+// This file is generated using the MantaFlow preprocessor (prep generate).
+
+/******************************************************************************
+ *
+ * MantaFlow fluid solver framework
+ * Copyright 2011 Tobias Pfaff, Nils Thuerey
+ *
+ * This program is free software, distributed under the terms of the
+ * Apache License, Version 2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Globally used macros and functions
+ *
+ ******************************************************************************/
+
+#ifndef _GENERAL_H
+#define _GENERAL_H
+
+#include <iostream>
+#include <sstream>
+#include <cmath>
+#include <algorithm>
+
+namespace Manta {
+
+// ui data exchange
+#ifdef GUI
+// defined in qtmain.cpp
+extern void updateQtGui(bool full, int frame, float time, const std::string &curPlugin);
+#else
+// dummy function if GUI is not enabled
+inline void updateQtGui(bool full, int frame, float time, const std::string &curPlugin)
+{
+}
+#endif
+
+// activate debug mode if _DEBUG is defined (eg for windows)
+#ifndef DEBUG
+# ifdef _DEBUG
+# define DEBUG 1
+# endif // _DEBUG
+#endif // DEBUG
+
+// Standard exception
+class Error : public std::exception {
+ public:
+ Error(const std::string &s) : mS(s)
+ {
+#ifdef DEBUG
+ // print error
+ std::cerr << "Aborting: " << s << " \n";
+ // then force immedieate crash in debug mode
+ *(volatile int *)(0) = 1;
+#endif
+ }
+ virtual ~Error() throw()
+ {
+ }
+ virtual const char *what() const throw()
+ {
+ return mS.c_str();
+ }
+
+ private:
+ std::string mS;
+};
+
+// mark unused parameter variables
+#define unusedParameter(x) ((void)x)
+
+// Debug output functions and macros
+extern int gDebugLevel;
+
+#define MSGSTREAM \
+ std::ostringstream msg; \
+ msg.precision(7); \
+ msg.width(9);
+#define debMsg(mStr, level) \
+ if (_chklevel(level)) { \
+ MSGSTREAM; \
+ msg << mStr; \
+ std::cout << msg.str() << std::endl; \
+ }
+inline bool _chklevel(int level = 0)
+{
+ return gDebugLevel >= level;
+}
+
+// error and assertation macros
+#ifdef DEBUG
+# define DEBUG_ONLY(a) a
+#else
+# define DEBUG_ONLY(a)
+#endif
+#define throwError(msg) \
+ { \
+ std::ostringstream __s; \
+ __s << msg << std::endl << "Error raised in " << __FILE__ << ":" << __LINE__; \
+ throw Manta::Error(__s.str()); \
+ }
+#define errMsg(msg) throwError(msg);
+#define assertMsg(cond, msg) \
+ if (!(cond)) \
+ throwError(msg)
+#define assertDeb(cond, msg) DEBUG_ONLY(assertMsg(cond, msg))
+
+// for compatibility with blender, blender only defines WITH_FLUID, make sure we have "BLENDER"
+#ifndef BLENDER
+# ifdef WITH_FLUID
+# define BLENDER 1
+# endif
+#endif
+
+// common type for indexing large grids
+typedef long long IndexInt;
+
+// template tricks
+template<typename T> struct remove_pointers {
+ typedef T type;
+};
+
+template<typename T> struct remove_pointers<T *> {
+ typedef T type;
+};
+
+template<typename T> struct remove_pointers<T &> {
+ typedef T type;
+};
+
+// Commonly used enums and types
+//! Timing class for preformance measuring
+struct MuTime {
+ MuTime()
+ {
+ get();
+ }
+ MuTime operator-(const MuTime &a)
+ {
+ MuTime b;
+ b.time = time - a.time;
+ return b;
+ };
+ MuTime operator+(const MuTime &a)
+ {
+ MuTime b;
+ b.time = time + a.time;
+ return b;
+ };
+ MuTime operator/(unsigned long a)
+ {
+ MuTime b;
+ b.time = time / a;
+ return b;
+ };
+ MuTime &operator+=(const MuTime &a)
+ {
+ time += a.time;
+ return *this;
+ }
+ MuTime &operator-=(const MuTime &a)
+ {
+ time -= a.time;
+ return *this;
+ }
+ MuTime &operator/=(unsigned long a)
+ {
+ time /= a;
+ return *this;
+ }
+ std::string toString();
+
+ void clear()
+ {
+ time = 0;
+ }
+ void get();
+ MuTime update();
+
+ unsigned long time;
+};
+std::ostream &operator<<(std::ostream &os, const MuTime &t);
+
+//! generate a string with infos about the current mantaflow build
+std::string buildInfoString();
+
+// Some commonly used math helpers
+template<class T> inline T square(T a)
+{
+ return a * a;
+}
+template<class T> inline T cubed(T a)
+{
+ return a * a * a;
+}
+
+template<class T> inline T clamp(const T &val, const T &vmin, const T &vmax)
+{
+ if (val < vmin)
+ return vmin;
+ if (val > vmax)
+ return vmax;
+ return val;
+}
+
+template<class T> inline T nmod(const T &a, const T &b);
+template<> inline int nmod(const int &a, const int &b)
+{
+ int c = a % b;
+ return (c < 0) ? (c + b) : c;
+}
+template<> inline float nmod(const float &a, const float &b)
+{
+ float c = std::fmod(a, b);
+ return (c < 0) ? (c + b) : c;
+}
+template<> inline double nmod(const double &a, const double &b)
+{
+ double c = std::fmod(a, b);
+ return (c < 0) ? (c + b) : c;
+}
+
+template<class T> inline T safeDivide(const T &a, const T &b);
+template<> inline int safeDivide<int>(const int &a, const int &b)
+{
+ return (b) ? (a / b) : a;
+}
+template<> inline float safeDivide<float>(const float &a, const float &b)
+{
+ return (b) ? (a / b) : a;
+}
+template<> inline double safeDivide<double>(const double &a, const double &b)
+{
+ return (b) ? (a / b) : a;
+}
+
+inline bool c_isnan(float c)
+{
+ volatile float d = c;
+ return d != d;
+}
+
+} // namespace Manta
+
+#endif