#include #include #include #include #include #include #include #include "cctk.h" #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) { T z = y&1 ? x : 1; while (y >>= 1) { x *= x; if (y & 1) z *= x; } return z; } template T ipow (T x, int y) { if (y < 0) return T(1) / ipow_helper(x, -y); else return ipow_helper(x, y); } void skipws (istream& is) { while (is.good() && 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; } // Vector input template istream& input (istream& is, vector& v) { v.clear(); try { skipws (is); consume (is, '['); skipws (is); while (is.good() && 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; } // 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; } // Stack output template ostream& output (ostream& os, const stack& s) { stack s2 (s); list l; while (! 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 size_t memoryof (list > const & l); template size_t memoryof (list > const & l); template size_t memoryof (list const & l); template size_t memoryof (list const & l); template size_t memoryof (list 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 & 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 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,3> >& 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,3> > >& 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); template ostream& output (ostream& os, const set >& s); 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 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,3> >& 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,3> > >& v); 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 > >& v);