#include #include #include #include #include #include #include #include #include #include #include #include #include "bbox.hh" #include "defs.hh" #include "dh.hh" #include "region.hh" #include "vect.hh" using namespace std; template inline T ipow_helper (T x, unsigned int y) CCTK_ATTRIBUTE_CONST; template inline T ipow_helper (T x, unsigned int y) { T z = y&1 ? x : 1; while (y >>= 1) { x *= x; if (y & 1) z *= x; } return z; } template T ipow (T const x, int const y) { if (y < 0) return T(1) / ipow_helper(x, -y); else return ipow_helper(x, y); } // Access to CarpetLib parameters CCTK_INT get_poison_value() { DECLARE_CCTK_PARAMETERS; return poison_value; } CCTK_INT get_deadbeef() { DECLARE_CCTK_PARAMETERS; return deadbeef; } void skipws (istream& is) { while (is.good() and isspace(is.peek())) { is.get(); } } void expect (istream& is, const char c) { if (is.peek() == c) return; cout << "While reading characters from a stream:" << endl << " Character '" << c << "' expected, but not found." << endl << " The next up to 100 available characters are \""; for (int i=0; i<100; ++i) { const int uc = is.get(); if (uc<0) break; cout << (unsigned char)uc; } cout << "\"." << endl; throw input_error(); } void consume (istream& is, const char c) { expect (is, c); is.get(); } void consume (istream& is, const char * const s) { for (const char * p = s; * p; ++ p) { expect (is, * p); is.get(); } } // Container memory usage template size_t memoryof (list const & c) { size_t s = sizeof c; for (typename list::const_iterator i=c.begin(); i!=c.end(); ++i) { // Assume that there are two pointers per list element, pointing // to the previous and next element, respectively s += 2 * sizeof (void *) + memoryof(*i); } return s; } template size_t memoryof (set const & c) { size_t s = sizeof c; for (typename set::const_iterator i=c.begin(); i!=c.end(); ++i) { // Assume that there are three pointers per list element, forming // a tree structure s += 3 * sizeof (void *) + memoryof(*i); } return s; } template size_t memoryof (stack const & c) { size_t s = sizeof c; #if 0 for (typename stack::const_iterator i=c.begin(); i!=c.end(); ++i) { // Assume that a stack is stored in an efficient manner s += memoryof(*i); } #endif // Cannot access elements... a stack is LIFO! s += c.size() * sizeof (T); return s; } template size_t memoryof (vector const & c) { size_t s = sizeof c; for (typename vector::const_iterator i=c.begin(); i!=c.end(); ++i) { // Vectors are stored contiguously s += memoryof(*i); } return s; } // List input template istream& input (istream& is, list& l) { l.clear(); try { skipws (is); consume (is, '['); skipws (is); while (is.good() and is.peek() != ']') { T elem; is >> elem; l.push_back (elem); skipws (is); if (is.peek() != ',') break; is.get(); skipws (is); } skipws (is); consume (is, ']'); } catch (input_error &err) { cout << "Input error while reading a list<>" << endl << " The following elements have been read so far: " << l << endl; throw err; } return is; } // Set input template istream& input (istream& is, set& s) { s.clear(); try { skipws (is); consume (is, '{'); skipws (is); while (is.good() and is.peek() != '}') { T elem; is >> elem; s.insert (elem); skipws (is); if (is.peek() != ',') break; is.get(); skipws (is); } skipws (is); consume (is, ']'); } catch (input_error &err) { cout << "Input error while reading a set<>" << endl << " The following elements have been read so far: " << s << endl; throw err; } return is; } // Vector input template istream& input (istream& is, vector& v) { v.clear(); try { skipws (is); consume (is, '['); skipws (is); while (is.good() and is.peek() != ']') { T elem; is >> elem; v.push_back (elem); skipws (is); if (is.peek() != ',') break; is.get(); skipws (is); } skipws (is); consume (is, ']'); } catch (input_error &err) { cout << "Input error while reading a vector<>" << endl << " The following elements have been read so far: " << v << endl; throw err; } return is; } // List output template ostream& output (ostream& os, const list& l) { os << "["; for (typename list::const_iterator ti=l.begin(); ti!=l.end(); ++ti) { if (ti!=l.begin()) os << ","; os << *ti; } os << "]"; return os; } // Map output template ostream& output (ostream& os, const map& m) { os << "{"; for (typename map::const_iterator ti=m.begin(); ti!=m.end(); ++ti) { if (ti!=m.begin()) os << ","; os << ti->first << ":" << ti->second; } os << "}"; return os; } // Pair output template ostream& output (ostream& os, const pair& p) { os << "(" << p.first << "," << p.second << ")"; return os; } // Set output template ostream& output (ostream& os, const set& s) { os << "{"; for (typename set::const_iterator ti=s.begin(); ti!=s.end(); ++ti) { if (ti!=s.begin()) os << ","; os << *ti; } os << "}"; return os; } #ifdef CARPET_ENABLE_BBOXSET2 // Shared pointer output template ostream& output (ostream& os, const shared_ptr& s) { return os << "(&" << *s.get() << ")"; } #endif // Stack output template ostream& output (ostream& os, const stack& s) { stack s2 (s); list l; while (not s2.empty()) { l.insert (l.begin(), s2.top()); s2.pop(); } return output (os, l); } // Vector output template ostream& output (ostream& os, const vector& v) { os << "["; // Do not number the elements, as this would lead to a format that // cannot be read back in. // int cnt=0; for (typename vector::const_iterator ti=v.begin(); ti!=v.end(); ++ti) { if (ti!=v.begin()) os << ","; // os << cnt++ << ":"; os << *ti; } os << "]"; return os; } #include "bbox.hh" #include "bboxset.hh" #include "dh.hh" #include "fulltree.hh" #include "gdata.hh" #include "ggf.hh" #include "region.hh" #include "th.hh" #include "vect.hh" template int ipow (int x, int y); template CCTK_REAL ipow (CCTK_REAL x, int y); //template vect ipow (vect x, int y); template vect ipow (vect x, int y); template size_t memoryof (rvect const & v); //template size_t memoryof (list const & l); //template size_t memoryof (list const & l); template size_t memoryof (set const & l); template size_t memoryof (set const & l); template size_t memoryof (set const & l); template size_t memoryof (set const & l); template size_t memoryof (set const & l); template size_t memoryof (stack const & s); template size_t memoryof (vector const & v); template size_t memoryof (vector const & v); //template size_t memoryof (vector const & v); template size_t memoryof (vector const & v); template size_t memoryof (vector const & v); template size_t memoryof (vector > const & v); template size_t memoryof (vector > const & v); template size_t memoryof (vector > const & v); template size_t memoryof (vector const & v); template size_t memoryof (vector > const & v); #ifdef CARPET_ENABLE_BBOXSET2 template size_t memoryof (vector > const & v); #endif template size_t memoryof (vector const & v); template size_t memoryof (vector const & v); template size_t memoryof (vector const & v); template size_t memoryof (vector*> const & f); //template size_t memoryof (vector const & v); //template size_t memoryof (vector const & v); template size_t memoryof (vector const & v); template size_t memoryof (vector > const & v); template size_t memoryof (vector > const & v); template size_t memoryof (vector > const & v); template size_t memoryof (vector > const & v); template size_t memoryof (vector > const & v); //template size_t memoryof (vector > const & v); template size_t memoryof (vector > const & v); //template size_t memoryof (vector > const & v); //template size_t memoryof (vector > const & v); //template size_t memoryof (vector > const & v); template size_t memoryof (vector > > const & v); //template size_t memoryof (vector > > const & v); //template size_t memoryof (vector > > const & v); //template size_t memoryof (vector > > const & v); template size_t memoryof (vector > > const & v); template size_t memoryof (vector > > const & v); template size_t memoryof (vector > > const & v); //template size_t memoryof (vector > > const & v); template size_t memoryof (vector > > > const & v); //template istream& input (istream& os, list& l); template istream& input (istream& os, set >& s); template istream& input (istream& os, set >& s); template istream& input (istream& os, set >& s); template istream& input (istream& os, vector& v); template istream& input (istream& os, vector& v); template istream& input (istream& os, vector >& v); template istream& input (istream& os, vector >& v); template istream& input (istream& os, vector >& v); //template istream& input (istream& os, vector& v); template istream& input (istream& os, vector >& v); #ifdef CARPET_ENABLE_BBOXSET2 template istream& input (istream& os, vector >& v); #endif template istream& input (istream& os, vector& v); template istream& input (istream& os, vector& v); template istream& input (istream& os, vector& v); //template istream& input (istream& os, vector& v); //template istream& input (istream& os, vector& v); template istream& input (istream& os, vector& v); template istream& input (istream& os, vector >& v); template istream& input (istream& os, vector >& v); template istream& input (istream& os, vector >& v); template istream& input (istream& os, vector >& v); template istream& input (istream& os, vector >& v); template istream& input (istream& os, vector >& v); template istream& input (istream& os, vector >& v); template istream& input (istream& os, vector > >& v); template istream& input (istream& os, vector > >& v); //template ostream& output (ostream& os, const list& l); //template ostream& output (ostream& os, const list& l); #ifdef CARPET_ENABLE_BBOXSET2 //template ostream& output (ostream& os, const map > >& m); //template ostream& output (ostream& os, const map > >& m); //template ostream& output (ostream& os, const map > >& m); //template ostream& output (ostream& os, const map > >& m); #endif //template ostream& output (ostream& os, const map& m); //template ostream& output (ostream& os, const pair,int>& p); //template ostream& output (ostream& os, const set >& s); template ostream& output (ostream& os, const set >& s); template ostream& output (ostream& os, const set >& s); template ostream& output (ostream& os, const set >& s); //template ostream& output (ostream& os, const set >& s); #ifdef CARPET_ENABLE_BBOXSET2 //template ostream& output (ostream& os, const shared_ptr >& s); #endif //template ostream& output (ostream& os, const stack& s); template ostream& output (ostream& os, const vector& v); template ostream& output (ostream& os, const vector& v); template ostream& output (ostream& os, const vector& v); template ostream& output (ostream& os, const vector >& v); template ostream& output (ostream& os, const vector >& v); template ostream& output (ostream& os, const vector >& v); template ostream& output (ostream& os, const vector& v); template ostream& output (ostream& os, const vector >& v); #ifdef CARPET_ENABLE_BBOXSET2 template ostream& output (ostream& os, const vector >& v); #endif template ostream& output (ostream& os, const vector& v); template ostream& output (ostream& os, const vector& v); //template ostream& output (ostream& os, const vector& v); template ostream& output (ostream& os, const vector& v); //template ostream& output (ostream& os, const vector & v); //template ostream& output (ostream& os, const vector & v); //template ostream& output (ostream& os, const vector & v); //template ostream& output (ostream& os, const vector & v); //template ostream& output (ostream& os, const vector & v); template ostream& output (ostream& os, const vector& v); //template ostream& output (ostream& os, const vector& v); template ostream& output (ostream& os, const vector& v); //template ostream& output (ostream& os, const vector >& v); //template ostream& output (ostream& os, const vector,int> >& v); //template ostream& output (ostream& os, const vector,int> >& v); //template ostream& output (ostream& os, const vector,int> >& v); //template ostream& output (ostream& os, const vector,int> >& v); template ostream& output (ostream& os, const vector >& v); template ostream& output (ostream& os, const vector >& v); template ostream& output (ostream& os, const vector >& v); template ostream& output (ostream& os, const vector >& v); template ostream& output (ostream& os, const vector >& v); template ostream& output (ostream& os, const vector >& v); template ostream& output (ostream& os, const vector > & b); //template ostream& output (ostream& os, const vector > & b); template ostream& output (ostream& os, const vector > & b); //template ostream& output (ostream& os, const vector > & b); //template ostream& output (ostream& os, const vector > & b); template ostream& output (ostream& os, const vector >& v); template ostream& output (ostream& os, const vector > >& v); //template ostream& output (ostream& os, const vector > >& v); //template ostream& output (ostream& os, const vector > > & b); //template ostream& output (ostream& os, const vector > > & b); //template ostream& output (ostream& os, const vector > > & b); template ostream& output (ostream& os, const vector > > & b); template ostream& output (ostream& os, const vector > > & b); template ostream& output (ostream& os, const vector > >& v);