#ifndef DEFS_HH #define DEFS_HH #ifdef HAVE_CONFIG_H #include #endif #include #include #if 0 #include #endif #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 // 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 #if 0 inline const char * typestring (const char& dummy) { return "char"; } inline const char * typestring (const signed char& dummy) { return "signed char"; } inline const char * typestring (const unsigned char& dummy) { return "unsigned char"; } inline const char * typestring (const short& dummy) { return "short"; } inline const char * typestring (const unsigned short& dummy) { return "unsigned short"; } inline const char * typestring (const int& dummy) { return "int"; } inline const char * typestring (const unsigned int& dummy) { return "unsigned int"; } inline const char * typestring (const long& dummy) { return "long"; } inline const char * typestring (const unsigned long& dummy) { return "unsigned long"; } inline const char * typestring (const long long& dummy) { return "long long"; } inline const char * typestring (const unsigned long long& dummy) { return "unsigned long long"; } inline const char * typestring (const float& dummy) { return "float"; } inline const char * typestring (const double& dummy) { return "double"; } inline const char * typestring (const long double& dummy) { return "long double"; } inline const char * typestring (const complex& dummy) { return "complex"; } inline const char * typestring (const complex& dummy) { return "complex"; } inline const char * typestring (const complex& dummy) { return "complex"; } #else #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 #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