#ifndef DEFS_HH #define DEFS_HH #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "cctk.h" using namespace std; // A compile time pseudo assert statement #define static_assert(_x) do { typedef int ai[(_x) ? 1 : -1]; } while(0) // Define the restrict qualifier #ifdef CCTK_CXX_RESTRICT # define restrict CCTK_CXX_RESTRICT #endif // Use this macro AT instead of vector's operator[] or at(). // Depending on the macro NDEBUG, this macro AT either checks for // valid indices or not. #ifndef NDEBUG # define AT(index) at(index) #else # define AT(index) operator[](index) #endif // Begin a new line without flushing the output buffer char const * const eol = "\n"; // Number of dimensions const int dim = 3; // Some shortcuts for type names template class bbox; template class bboxset; template class vect; typedef vect bvect; typedef vect ivect; typedef bbox ibbox; typedef bboxset ibset; typedef vect,dim> bbvect; typedef vect,dim> iivect; typedef vect,2> b2vect; typedef vect,2> i2vect; // A general type enum centering { error_centered, vertex_centered, cell_centered }; // Useful helper template inline T square (const T& x) { return x*x; } // Another useful helper template T ipow (T x, int y); // Input streams struct input_error { }; void skipws (istream& is); void expect (istream& is, char c); void consume (istream& is, char c); void consume (istream& is, char const * c); // Names for types #ifdef HAVE_CCTK_INT1 inline const char * typestring (const CCTK_INT1& dummy) { return "CCTK_INT1"; } #endif #ifdef HAVE_CCTK_INT2 inline const char * typestring (const CCTK_INT2& dummy) { return "CCTK_INT2"; } #endif #ifdef HAVE_CCTK_INT4 inline const char * typestring (const CCTK_INT4& dummy) { return "CCTK_INT4"; } #endif #ifdef HAVE_CCTK_INT8 inline const char * typestring (const CCTK_INT8& dummy) { return "CCTK_INT8"; } #endif #ifdef HAVE_CCTK_REAL4 inline const char * typestring (const CCTK_REAL4& dummy) { return "CCTK_REAL4"; } #endif #ifdef HAVE_CCTK_REAL8 inline const char * typestring (const CCTK_REAL8& dummy) { return "CCTK_REAL8"; } #endif #ifdef HAVE_CCTK_REAL16 inline const char * typestring (const CCTK_REAL16& dummy) { return "CCTK_REAL16"; } #endif #ifdef HAVE_CCTK_REAL4 inline const char * typestring (const CCTK_COMPLEX8& dummy) { return "CCTK_COMPLEX8"; } #endif #ifdef HAVE_CCTK_REAL8 inline const char * typestring (const CCTK_COMPLEX16& dummy) { return "CCTK_COMPLEX16"; } #endif #ifdef HAVE_CCTK_REAL16 inline const char * typestring (const CCTK_COMPLEX32& dummy) { return "CCTK_COMPLEX32"; } #endif // Container input template istream& input (istream& is, vector& v); template inline istream& operator>> (istream& is, vector& v) { return input(is,v); } // Container output template ostream& output (ostream& os, const list& l); template ostream& output (ostream& os, const set& s); template ostream& output (ostream& os, const stack& s); template ostream& output (ostream& os, const vector& v); template inline ostream& operator<< (ostream& os, const list& l) { return output(os,l); } template inline ostream& operator<< (ostream& os, const set& s) { return output(os,s); } template inline ostream& operator<< (ostream& os, const stack& s) { return output(os,s); } template inline ostream& operator<< (ostream& os, const vector& v) { return output(os,v); } #endif // DEFS_HH