15 #include <mrpt/config.h>     18 #if defined(__GNUC__) && defined(__GNUC_MINOR__)    19 #define MRPT_CHECK_GCC_VERSION(major, minor) \    20         ((__GNUC__ > (major)) || (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)))    22 #define MRPT_CHECK_GCC_VERSION(major, minor) 0    28 #define MRPT_VISUALC_VERSION(major) 0    29 #define MRPT_CHECK_VISUALC_VERSION(major) 0    37 #define MRPT_VISUALC_VERSION(major) \    38         ((6 + (major >= 14 ? (-1) : 0) + major) * 100)    39 #define MRPT_CHECK_VISUALC_VERSION(major) \    40         (_MSC_VER >= MRPT_VISUALC_VERSION(major))    44 #define __has_feature(x) 0  // Compatibility with non-clang compilers.    46 #ifndef __has_extension    47 #define __has_extension __has_feature  // Compatibility with pre-3.0 compilers.    52 #if defined(__clang__) && defined(__has_extension)    53 #if __has_extension(attribute_deprecated_with_message)    54 #define MRPT_DEPRECATED(msg) __attribute__((deprecated(msg)))    56 #define MRPT_DEPRECATED(msg) __attribute__((deprecated))    58 #elif MRPT_CHECK_GCC_VERSION(4, 5)    59 #define MRPT_DEPRECATED(msg) __attribute__((deprecated(msg)))    60 #elif MRPT_CHECK_VISUALC_VERSION(8)    61 #define MRPT_DEPRECATED(msg) __declspec(deprecated("deprecated: " msg))    63 #define MRPT_DEPRECATED(msg)    68 #define MRPT_DO_PRAGMA(x) __pragma(x)    69 #define __STR2__(x) #x    70 #define __STR1__(x) __STR2__(x)    71 #define __MSVCLOC__ __FILE__ "("__STR1__(__LINE__) ") : "    72 #define MRPT_MSG_PRAGMA(_msg) MRPT_DO_PRAGMA(message(__MSVCLOC__ _msg))    73 #elif defined(__GNUC__)    74 #define MRPT_DO_PRAGMA(x) _Pragma(#x)    75 #define MRPT_MSG_PRAGMA(_msg) MRPT_DO_PRAGMA(message(_msg))    77 #define MRPT_DO_PRAGMA(x)    78 #define MRPT_MSG_PRAGMA(_msg)    81 #define MRPT_WARNING(x) MRPT_MSG_PRAGMA("Warning: " x)    82 #define MRPT_TODO(x) MRPT_MSG_PRAGMA("TODO: " x)    86 #define MRPT_printf_format_check(_FMT_, _VARARGS_) \    87         __attribute__((__format__(__printf__, _FMT_, _VARARGS_)))    89 #define MRPT_printf_format_check(_FMT_, _VARARGS_)    93 #define MRPT_scanf_format_check(_FMT_, _VARARGS_) \    94         __attribute__((__format__(__scanf__, _FMT_, _VARARGS_)))    96 #define MRPT_scanf_format_check(_FMT_, _VARARGS_)   100 #if defined(_MSC_VER) && (_MSC_VER >= 1300)   101 #define __CURRENT_FUNCTION_NAME__ __FUNCTION__   103 #define __CURRENT_FUNCTION_NAME__ __PRETTY_FUNCTION__   111 #define THROW_EXCEPTION(msg)                                                 \   113                 std::ostringstream auxCompStr;                                       \   114                 auxCompStr << "\n\n =============== MRPT EXCEPTION =============\n"; \   115                 auxCompStr << __CURRENT_FUNCTION_NAME__ << ", line " << __LINE__     \   117                 auxCompStr << msg << std::endl;                                      \   118                 throw std::logic_error(auxCompStr.str());                            \   121 #define THROW_EXCEPTION_FMT(_FORMAT_STRING, ...) \   122         THROW_EXCEPTION(mrpt::format(_FORMAT_STRING, __VA_ARGS__))   129 #define THROW_TYPED_EXCEPTION(msg, exceptionClass)                           \   131                 std::ostringstream auxCompStr;                                       \   132                 auxCompStr << "\n\n =============== MRPT EXCEPTION =============\n"; \   133                 auxCompStr << __CURRENT_FUNCTION_NAME__ << ", line " << __LINE__     \   135                 auxCompStr << msg << std::endl;                                      \   136                 throw exceptionClass(auxCompStr.str());                              \   139 #define THROW_TYPED_EXCEPTION_FMT(exceptionClass, _FORMAT_STRING, ...) \   140         THROW_TYPED_EXCEPTION(                                             \   141                 mrpt::format(_FORMAT_STRING, __VA_ARGS__), exceptionClass)   146 #define THROW_STACKED_EXCEPTION(e)                            \   148                 std::string _tse_str(mrpt::format("%s\n", e.what())); \   149                 _tse_str += mrpt::format(                             \   150                         " %s:%i: In `%s`\n", __FILE__, __LINE__,          \   151                         __CURRENT_FUNCTION_NAME__);                       \   152                 throw std::logic_error(_tse_str);                     \   159 #define THROW_STACKED_EXCEPTION_CUSTOM_MSG1(e, msg) \   161                 std::ostringstream auxCompStr;              \   162                 auxCompStr << e.what();                     \   163                 auxCompStr << msg << std::endl;             \   164                 throw std::logic_error(auxCompStr.str());   \   172 #define THROW_STACKED_EXCEPTION_CUSTOM_MSG2(e, stuff, param1)   \   174                 std::ostringstream auxCompStr;                          \   175                 auxCompStr << e.what();                                 \   176                 auxCompStr << mrpt::format(stuff, param1) << std::endl; \   177                 throw std::logic_error(auxCompStr.str());               \   181 #define MRPT_THROW_UNKNOWN_SERIALIZATION_VERSION(__V)                          \   184                         "Cannot parse object: unknown serialization version number: '%i'", \   185                         static_cast<int>(__V)))   194 #define ASSERTMSG_(f, __ERROR_MSG)                             \   196                 if (!(f)) THROW_EXCEPTION(::std::string(__ERROR_MSG)); \   206         ASSERTMSG_(f, std::string("Assert condition failed: ") + ::std::string(#f))   210 #define MRPT_CHECK_NORMAL_NUMBER(v) \   212                 ASSERT_(std::isfinite(v));  \   213                 ASSERT_(!std::isnan(v));    \   218 #define MRPT_COMPILE_TIME_ASSERT(expression) \   219         static_assert(expression, #expression);   222 #define ASSERT_EQUAL_(__A, __B)                              \   226                         std::ostringstream __s__;                        \   227                         __s__ << "ASSERT_EQUAL_(" << #__A << "," << #__B \   228                                   << ") failed with\n"                       \   229                                   << #__A << "=" << __A << "\n"              \   230                                   << #__B << "=" << __B;                     \   231                         THROW_EXCEPTION(__s__.str())                     \   234 #define ASSERT_NOT_EQUAL_(__A, __B)                              \   238                         std::ostringstream __s__;                            \   239                         __s__ << "ASSERT_NOT_EQUAL_(" << #__A << "," << #__B \   240                                   << ") failed with\n"                           \   241                                   << #__A << "=" << __A << "\n"                  \   242                                   << #__B << "=" << __B;                         \   243                         THROW_EXCEPTION(__s__.str())                         \   246 #define ASSERT_BELOW_(__A, __B)                              \   250                         std::ostringstream __s__;                        \   251                         __s__ << "ASSERT_BELOW_(" << #__A << "," << #__B \   252                                   << ") failed with\n"                       \   253                                   << #__A << "=" << __A << "\n"              \   254                                   << #__B << "=" << __B;                     \   255                         THROW_EXCEPTION(__s__.str())                     \   258 #define ASSERT_ABOVE_(__A, __B)                              \   262                         std::ostringstream __s__;                        \   263                         __s__ << "ASSERT_ABOVE_(" << #__A << "," << #__B \   264                                   << ") failed with\n"                       \   265                                   << #__A << "=" << __A << "\n"              \   266                                   << #__B << "=" << __B;                     \   267                         THROW_EXCEPTION(__s__.str())                     \   270 #define ASSERT_BELOWEQ_(__A, __B)                              \   274                         std::ostringstream __s__;                          \   275                         __s__ << "ASSERT_BELOWEQ_(" << #__A << "," << #__B \   276                                   << ") failed with\n"                         \   277                                   << #__A << "=" << __A << "\n"                \   278                                   << #__B << "=" << __B;                       \   279                         THROW_EXCEPTION(__s__.str())                       \   282 #define ASSERT_ABOVEEQ_(__A, __B)                              \   286                         std::ostringstream __s__;                          \   287                         __s__ << "ASSERT_ABOVEEQ_(" << #__A << "," << #__B \   288                                   << ") failed with\n"                         \   289                                   << #__A << "=" << __A << "\n"                \   290                                   << #__B << "=" << __B;                       \   291                         THROW_EXCEPTION(__s__.str())                       \   295 #define ASSERT_FILE_EXISTS_(FIL)       \   297                 mrpt::system::fileExists(FIL), \   298                 std::string("Assert file existence failed: ") + ::std::string(FIL))   299 #define ASSERT_DIRECTORY_EXISTS_(DIR)                        \   301                 mrpt::system::directoryExists(DIR),                  \   302                 std::string("Assert directory existence failed: ") + \   305 #else  // MRPT_HAS_ASSERT   306 #define ASSERTMSG_(f, __ERROR_MSG) \   312 #define MRPT_CHECK_NORMAL_NUMBER(val) \   315 #define MRPT_COMPILE_TIME_ASSERT(f) \   318 #define ASSERT_EQUAL_(__A, __B) \   321 #define ASSERT_NOT_EQUAL_(__A, __B) \   324 #define ASSERT_BELOW_(__A, __B) \   327 #define ASSERT_ABOVE_(__A, __B) \   330 #define ASSERT_BELOWEQ_(__A, __B) \   333 #define ASSERT_ABOVEEQ_(__A, __B) \   337 #define ASSERT_FILE_EXISTS_(FIL) \   340 #define ASSERT_DIRECTORY_EXISTS_(DIR) \   343 #endif  // MRPT_HAS_ASSERT   352 #define ASSERTDEB_(f) ASSERT_(f)   353 #define ASSERTDEBMSG_(f, __ERROR_MSG) ASSERTMSG_(f, __ERROR_MSG)   355 #define ASSERTDEB_(f) \   358 #define ASSERTDEBMSG_(f, __ERROR_MSG) \   365 #define MRPT_UNUSED_PARAM(a) (void)(a)   367 #if MRPT_HAS_STACKED_EXCEPTIONS   372 #define MRPT_TRY_START \   379 #define MRPT_TRY_END                                           \   381         catch (std::bad_alloc&) { throw; }                         \   382         catch (std::exception & e) { THROW_STACKED_EXCEPTION(e); } \   383         catch (...) { THROW_EXCEPTION("Unexpected runtime error!"); }   389 #define MRPT_TRY_END_WITH_CLEAN_UP(stuff)             \   391         catch (std::bad_alloc&) { throw; }                \   392         catch (std::exception & e)                        \   397                 THROW_STACKED_EXCEPTION(e);                   \   404                 THROW_EXCEPTION("Unexpected runtime error!"); \   408 #define MRPT_TRY_START   410 #define MRPT_TRY_END_WITH_CLEAN_UP(stuff)   413 #if MRPT_ENABLE_EMBEDDED_GLOBAL_PROFILER   414 #define MRPT_PROFILE_FUNC_START               \   415         ::mrpt::utils::CProfilerProxy BOOST_JOIN( \   416                 __dum_var, __LINE__)(__CURRENT_FUNCTION_NAME__);   418 #define MRPT_PROFILE_FUNC_START   426         MRPT_PROFILE_FUNC_START \   429 #define MRPT_END MRPT_TRY_END   431 #define MRPT_END_WITH_CLEAN_UP(stuff) MRPT_TRY_END_WITH_CLEAN_UP(stuff)   437 #define M_2PI 6.283185307179586476925286766559  // The 2*PI constant   440 #define M_PIf 3.14159265358979f   441 #define M_2PIf 6.28318530717959f   443 #if defined(HAVE_LONG_DOUBLE) && !defined(M_PIl)   444 #define M_PIl 3.14159265358979323846264338327950288L   445 #define M_2PIl (2.0L * 3.14159265358979323846264338327950288L)   450 #define MRPT_printf_format_check(_FMT_, _VARARGS_) \   451         __attribute__((__format__(__printf__, _FMT_, _VARARGS_)))   453 #define MRPT_printf_format_check(_FMT_, _VARARGS_)   458 #define MRPT_scanf_format_check(_FMT_, _VARARGS_) \   459         __attribute__((__format__(__scanf__, _FMT_, _VARARGS_)))   461 #define MRPT_scanf_format_check(_FMT_, _VARARGS_)   465 #if (defined _MSC_VER) || (defined __INTEL_COMPILER)   466 #define MRPT_FORCE_INLINE __forceinline   468 #define MRPT_FORCE_INLINE inline   483 #define QUOTE(name) #name   484 #define STR(macro) QUOTE(macro)   485 #define USIZE_STR STR(PRIuSIZE)   488 #if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || \   489         defined(__x86_64) || defined(_M_AMD64) || defined(_M_X64) ||     \   490         defined(__i386__) || defined(__i386) || defined(_M_I86) ||       \   491         defined(i386) || defined(_M_IX86) || defined(_X86_)   492 #define MRPT_IS_X86_AMD64 1 #define MRPT_printf_format_check(_FMT_, _VARARGS_)
 
std::string format(const char *fmt,...) MRPT_printf_format_check(1
A std::string version of C sprintf. 
 
GLsizei const GLchar ** string
 
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.