Program Listing for File Utils.hxx¶
↰ Return to documentation for file (Utils/Utils.hxx)
/*--------------------------------------------------------------------------*\
| |
| Copyright (C) 2017 |
| |
| , __ , __ |
| /|/ \ /|/ \ |
| | __/ _ ,_ | __/ _ ,_ |
| | \|/ / | | | | \|/ / | | | |
| |(__/|__/ |_/ \_/|/|(__/|__/ |_/ \_/|/ |
| /| /| |
| \| \| |
| |
| Enrico Bertolazzi |
| Dipartimento di Ingegneria Industriale |
| Universita` degli Studi di Trento |
| email: enrico.bertolazzi@unitn.it |
| |
\*--------------------------------------------------------------------------*/
#pragma once
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#ifndef UTILS_dot_HXX
#define UTILS_dot_HXX
#endif
// select computer architecture
#if defined(__APPLE__) && defined(__MACH__)
// osx architecture
#define UTILS_OS_OSX 1
#if defined(__i386__)
#define UTILS_ARCH32 1
#elif defined(__x86_64__)
#define UTILS_ARCH64 1
#endif
#elif defined(__unix__)
// linux architecture
#define UTILS_OS_LINUX 1
#if defined(__i386__)
#define UTILS_ARCH32 1
#elif defined(__x86_64__)
#define UTILS_ARCH64 1
#endif
#elif defined(_WIN32) || defined(WIN32) || defined(_WIN64) || defined(WIN64)
// windows architecture
#define UTILS_OS_WINDOWS 1
#if defined(_M_X64) || defined(_M_AMD64) || defined(_WIN64) || defined(WIN64)
#define UTILS_ARCH64 1
#else
#define UTILS_ARCH32 1
#endif
#else
#error "unsupported OS!"
#endif
// check if compiler is C++11
#if (defined(_MSC_VER) && _MSC_VER >= 1800) || \
(defined(__cplusplus) && __cplusplus > 199711L)
#else
#error "Lapack Wrapper must be compiled using C++ >= C++11"
#endif
#define UTILS_PURE_VIRTUAL = 0
#ifndef UTILS_OS_WINDOWS
#define UTILS_OVERRIDE override
#define UTILS_CONSTEXPR constexpr
#else
#define UTILS_OVERRIDE
#define UTILS_CONSTEXPR
#endif
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#include "fmt/printf.h"
#include "fmt/chrono.h"
#include "fmt/ostream.h"
#endif
#include <string>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <cstdlib>
#include <cmath>
#include <cstdint>
#include <stdexcept>
// disable mingw-std-threads for mingw on MATLAB
#if (defined(MINGW) || defined(__MINGW32__)) && !defined(MATLAB_MEX_FILE )
#include "mingw-std-threads/mingw.future.h"
#include "mingw-std-threads/mingw.mutex.h"
#include "mingw-std-threads/mingw.invoke.h"
#include "mingw-std-threads/mingw.shared_mutex.h"
#include "mingw-std-threads/mingw.thread.h"
#include "mingw-std-threads/mingw.condition_variable.h"
#else
//#include <future>
#include <mutex>
//#include <shared_mutex>
#include <thread>
#include <condition_variable>
#include <atomic>
#endif
#include "rang.hxx"
#include "Trace.hxx"
#include "Console.hxx"
#include "Malloc.hxx"
#include "Numbers.hxx"
#include "TicToc.hxx"
#include "ThreadPool.hxx"
#include "Quaternion.hxx"
#include "Table.hxx"
#include "Token.hxx"
namespace Utils {
#ifndef DOXYGEN_SHOULD_SKIP_THIS
using std::string;
#endif
string basename( char const * const filename );
template <typename T_int, typename T_real>
void
searchInterval(
T_int npts,
T_real const * const X,
T_real & x,
T_int & lastInterval,
bool closed,
bool can_extend
);
#ifndef DOXYGEN_SHOULD_SKIP_THIS
extern template void searchInterval(
int32_t npts,
float const * const X,
float & x,
int32_t & lastInterval,
bool closed,
bool can_extend
);
extern template void searchInterval(
int32_t npts,
double const * const X,
double & x,
int32_t & lastInterval,
bool closed,
bool can_extend
);
extern template void searchInterval(
int64_t npts,
float const * const X,
float & x,
int64_t & lastInterval,
bool closed,
bool can_extend
);
extern template void searchInterval(
int64_t npts,
double const * const X,
double & x,
int64_t & lastInterval,
bool closed,
bool can_extend
);
#endif
}
#endif