2017-03-03 20:04:23 +00:00
|
|
|
#ifndef DEFS_H
|
|
|
|
#define DEFS_H
|
|
|
|
|
|
|
|
namespace godot {
|
|
|
|
|
2018-02-23 12:50:41 +00:00
|
|
|
enum class Error {
|
2017-03-03 20:04:23 +00:00
|
|
|
OK,
|
|
|
|
FAILED, ///< Generic fail error
|
|
|
|
ERR_UNAVAILABLE, ///< What is requested is unsupported/unavailable
|
|
|
|
ERR_UNCONFIGURED, ///< The object being used hasnt been properly set up yet
|
|
|
|
ERR_UNAUTHORIZED, ///< Missing credentials for requested resource
|
|
|
|
ERR_PARAMETER_RANGE_ERROR, ///< Parameter given out of range (5)
|
|
|
|
ERR_OUT_OF_MEMORY, ///< Out of memory
|
|
|
|
ERR_FILE_NOT_FOUND,
|
|
|
|
ERR_FILE_BAD_DRIVE,
|
|
|
|
ERR_FILE_BAD_PATH,
|
2018-11-23 22:09:41 +00:00
|
|
|
ERR_FILE_NO_PERMISSION, // (10)
|
2017-03-03 20:04:23 +00:00
|
|
|
ERR_FILE_ALREADY_IN_USE,
|
|
|
|
ERR_FILE_CANT_OPEN,
|
|
|
|
ERR_FILE_CANT_WRITE,
|
|
|
|
ERR_FILE_CANT_READ,
|
|
|
|
ERR_FILE_UNRECOGNIZED, // (15)
|
|
|
|
ERR_FILE_CORRUPT,
|
|
|
|
ERR_FILE_MISSING_DEPENDENCIES,
|
|
|
|
ERR_FILE_EOF,
|
|
|
|
ERR_CANT_OPEN, ///< Can't open a resource/socket/file
|
2018-11-23 22:09:41 +00:00
|
|
|
ERR_CANT_CREATE, // (20)
|
2017-03-03 20:04:23 +00:00
|
|
|
ERR_QUERY_FAILED,
|
|
|
|
ERR_ALREADY_IN_USE,
|
|
|
|
ERR_LOCKED, ///< resource is locked
|
|
|
|
ERR_TIMEOUT,
|
2018-11-23 22:09:41 +00:00
|
|
|
ERR_CANT_CONNECT, // (25)
|
2017-03-03 20:04:23 +00:00
|
|
|
ERR_CANT_RESOLVE,
|
|
|
|
ERR_CONNECTION_ERROR,
|
|
|
|
ERR_CANT_AQUIRE_RESOURCE,
|
|
|
|
ERR_CANT_FORK,
|
|
|
|
ERR_INVALID_DATA, ///< Data passed is invalid (30)
|
|
|
|
ERR_INVALID_PARAMETER, ///< Parameter passed is invalid
|
|
|
|
ERR_ALREADY_EXISTS, ///< When adding, item already exists
|
|
|
|
ERR_DOES_NOT_EXIST, ///< When retrieving/erasing, it item does not exist
|
|
|
|
ERR_DATABASE_CANT_READ, ///< database is full
|
|
|
|
ERR_DATABASE_CANT_WRITE, ///< database is full (35)
|
|
|
|
ERR_COMPILATION_FAILED,
|
|
|
|
ERR_METHOD_NOT_FOUND,
|
|
|
|
ERR_LINK_FAILED,
|
|
|
|
ERR_SCRIPT_FAILED,
|
2018-11-23 22:09:41 +00:00
|
|
|
ERR_CYCLIC_LINK, // (40)
|
2017-03-03 20:04:23 +00:00
|
|
|
ERR_INVALID_DECLARATION,
|
|
|
|
ERR_DUPLICATE_SYMBOL,
|
|
|
|
ERR_PARSE_ERROR,
|
|
|
|
ERR_BUSY,
|
2018-11-23 22:09:41 +00:00
|
|
|
ERR_SKIP, // (45)
|
2017-03-03 20:04:23 +00:00
|
|
|
ERR_HELP, ///< user requested help!!
|
|
|
|
ERR_BUG, ///< a bug in the software certainly happened, due to a double check failing or unexpected behavior.
|
|
|
|
ERR_PRINTER_ON_FIRE, /// the parallel port printer is engulfed in flames
|
|
|
|
ERR_OMFG_THIS_IS_VERY_VERY_BAD, ///< shit happens, has never been used, though
|
|
|
|
ERR_WTF = ERR_OMFG_THIS_IS_VERY_VERY_BAD ///< short version of the above
|
|
|
|
};
|
|
|
|
|
2018-11-23 22:09:41 +00:00
|
|
|
namespace helpers {
|
|
|
|
template <typename T, typename ValueT>
|
|
|
|
T append_all(T appendable, ValueT value) {
|
|
|
|
appendable.append(value);
|
|
|
|
return appendable;
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename ValueT, typename... Args>
|
|
|
|
T append_all(T appendable, ValueT value, Args... args) {
|
|
|
|
appendable.append(value);
|
|
|
|
return append_all(appendable, args...);
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
T append_all(T appendable) {
|
|
|
|
return appendable;
|
|
|
|
}
|
2018-03-06 10:26:07 +00:00
|
|
|
|
2018-11-23 22:09:41 +00:00
|
|
|
template <typename KV, typename KeyT, typename ValueT>
|
|
|
|
KV add_all(KV kv, KeyT key, ValueT value) {
|
|
|
|
kv[key] = value;
|
|
|
|
return kv;
|
2017-03-03 20:04:23 +00:00
|
|
|
}
|
|
|
|
|
2018-11-23 22:09:41 +00:00
|
|
|
template <typename KV, typename KeyT, typename ValueT, typename... Args>
|
|
|
|
KV add_all(KV kv, KeyT key, ValueT value, Args... args) {
|
|
|
|
kv[key] = value;
|
|
|
|
return add_all(kv, args...);
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename KV>
|
|
|
|
KV add_all(KV kv) {
|
|
|
|
return kv;
|
|
|
|
}
|
|
|
|
} // namespace helpers
|
|
|
|
|
|
|
|
} // namespace godot
|
|
|
|
|
2017-03-15 17:13:22 +00:00
|
|
|
#include <stdio.h>
|
2017-03-03 20:04:23 +00:00
|
|
|
|
2017-03-06 02:30:46 +00:00
|
|
|
typedef float real_t;
|
2017-03-03 20:04:23 +00:00
|
|
|
|
2017-03-06 02:30:46 +00:00
|
|
|
#define CMP_EPSILON 0.00001
|
2018-11-23 22:09:41 +00:00
|
|
|
#define CMP_EPSILON2 (CMP_EPSILON * CMP_EPSILON)
|
2017-03-06 02:30:46 +00:00
|
|
|
#define Math_PI 3.14159265358979323846
|
|
|
|
|
|
|
|
#define _PLANE_EQ_DOT_EPSILON 0.999
|
|
|
|
#define _PLANE_EQ_D_EPSILON 0.0001
|
2017-03-04 02:04:16 +00:00
|
|
|
|
2018-02-11 14:50:01 +00:00
|
|
|
// ERR/WARN macros
|
|
|
|
#ifndef WARN_PRINT
|
2018-11-23 22:09:41 +00:00
|
|
|
#define WARN_PRINT(msg) \
|
|
|
|
fprintf(stdout, "ERROR: %s\n", msg); \
|
|
|
|
fflush(stdout)
|
2018-02-11 14:50:01 +00:00
|
|
|
#endif
|
2017-03-04 02:04:16 +00:00
|
|
|
|
2018-02-11 14:50:01 +00:00
|
|
|
#ifndef WARN_PRINTS
|
|
|
|
#define WARN_PRINTS(msg) WARN_PRINT((msg).utf8().get_data())
|
2017-03-04 02:04:16 +00:00
|
|
|
#endif
|
|
|
|
|
2018-02-11 14:50:01 +00:00
|
|
|
#ifndef ERR_PRINT
|
|
|
|
#define ERR_PRINT(x) fprintf(stderr, "ERROR: %s\n", x)
|
|
|
|
#endif
|
2017-03-04 02:04:16 +00:00
|
|
|
|
2018-02-11 14:50:01 +00:00
|
|
|
#ifndef ERR_PRINTS
|
|
|
|
#define ERR_PRINTS(msg) ERR_PRINT((msg).utf8().get_data())
|
2017-03-06 02:30:46 +00:00
|
|
|
#endif
|
|
|
|
|
2018-02-11 14:50:01 +00:00
|
|
|
#ifndef ERR_FAIL
|
|
|
|
#define ERR_FAIL() ERR_PRINT("Failed")
|
2017-03-06 02:30:46 +00:00
|
|
|
#endif
|
|
|
|
|
2018-02-11 14:50:01 +00:00
|
|
|
#ifndef ERR_FAIL_V
|
2018-11-23 22:09:41 +00:00
|
|
|
#define ERR_FAIL_V(a) \
|
|
|
|
{ \
|
|
|
|
ERR_FAIL(); \
|
|
|
|
return a; \
|
|
|
|
}
|
2018-02-11 14:50:01 +00:00
|
|
|
#endif
|
2017-03-06 02:30:46 +00:00
|
|
|
|
2018-02-11 14:50:01 +00:00
|
|
|
#ifndef ERR_FAIL_COND
|
2018-11-23 22:09:41 +00:00
|
|
|
#define ERR_FAIL_COND(a) \
|
|
|
|
do { \
|
|
|
|
if (a) { \
|
|
|
|
ERR_PRINT(#a); \
|
|
|
|
return; \
|
|
|
|
} \
|
|
|
|
} while (0)
|
2017-03-03 20:04:23 +00:00
|
|
|
#endif
|
|
|
|
|
2018-02-11 14:50:01 +00:00
|
|
|
#ifndef ERR_FAIL_COND_V
|
2018-11-23 22:09:41 +00:00
|
|
|
#define ERR_FAIL_COND_V(cond, ret) \
|
|
|
|
do { \
|
|
|
|
if (cond) { \
|
|
|
|
ERR_PRINT(#cond); \
|
|
|
|
return ret; \
|
|
|
|
} \
|
|
|
|
} while (0)
|
2017-03-06 02:30:46 +00:00
|
|
|
#endif
|
|
|
|
|
2018-02-11 14:50:01 +00:00
|
|
|
#ifndef ERR_FAIL_INDEX
|
2018-11-23 22:09:41 +00:00
|
|
|
#define ERR_FAIL_INDEX(a, b) \
|
|
|
|
do { \
|
|
|
|
if (a < 0 || a >= b) { \
|
|
|
|
ERR_FAIL(); \
|
|
|
|
return; \
|
|
|
|
} \
|
|
|
|
} while (0)
|
2018-02-11 14:50:01 +00:00
|
|
|
#endif
|
2017-03-06 02:30:46 +00:00
|
|
|
|
2018-02-11 14:50:01 +00:00
|
|
|
#ifndef ERR_FAIL_INDEX_V
|
2018-11-23 22:09:41 +00:00
|
|
|
#define ERR_FAIL_INDEX_V(a, b, c) \
|
|
|
|
do { \
|
|
|
|
if (a < 0 || a >= b) { \
|
|
|
|
ERR_FAIL(); \
|
|
|
|
return c; \
|
|
|
|
} \
|
|
|
|
} while (0)
|
2017-03-06 02:30:46 +00:00
|
|
|
#endif
|
|
|
|
|
2017-03-03 20:04:23 +00:00
|
|
|
#endif // DEFS_H
|