1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/defs.cc,v 1.15 2003/03/18 17:30:25 schnetter Exp $
#include <assert.h>
#include <ctype.h>
#include <iostream>
#include <list>
#include <set>
#include <stack>
#include <vector>
#include "defs.hh"
using namespace std;
void skipws (istream& is) {
while (is.good() && isspace(is.peek())) {
is.get();
}
}
// Vector input
template<class T>
istream& input (istream& is, vector<T>& v) {
v.clear();
skipws (is);
assert (is.peek() == '[');
is.get();
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);
assert (is.peek() == ']');
is.get();
return is;
}
// List output
template<class T>
ostream& output (ostream& os, const list<T>& l) {
os << "[";
for (typename list<T>::const_iterator ti=l.begin(); ti!=l.end(); ++ti) {
if (ti!=l.begin()) os << ",";
os << *ti;
}
os << "]";
return os;
}
// Set output
template<class T>
ostream& output (ostream& os, const set<T>& s) {
os << "{";
for (typename set<T>::const_iterator ti=s.begin(); ti!=s.end(); ++ti) {
if (ti!=s.begin()) os << ",";
os << *ti;
}
os << "}";
return os;
}
// Stack output
template<class T>
ostream& output (ostream& os, const stack<T>& s) {
stack<T> s2 (s);
list<T> l;
while (! s2.empty()) {
l.insert (l.begin(), s2.top());
s2.pop();
}
return output (os, l);
}
// Vector output
template<class T>
ostream& output (ostream& os, const vector<T>& v) {
os << "[";
int cnt=0;
for (typename vector<T>::const_iterator ti=v.begin(); ti!=v.end(); ++ti) {
if (ti!=v.begin()) os << ",";
os << cnt++ << ":" << *ti;
}
os << "]";
return os;
}
#include "bbox.hh"
#include "bboxset.hh"
template istream& input (istream& os, vector<bbox<int,3> >& v);
template istream& input (istream& os, vector<vector<bbox<int,3> > >& v);
template istream& input (istream& os, vector<vector<vect<vect<bool,2>,3> > >& v);
template ostream& output (ostream& os, const list<bbox<int,3> >& l);
template ostream& output (ostream& os, const set<bbox<int,3> >& s);
template ostream& output (ostream& os, const set<bboxset<int,3> >& s);
template ostream& output (ostream& os, const stack<bbox<int,3> >& s);
template ostream& output (ostream& os, const vector<int>& v);
template ostream& output (ostream& os, const vector<bbox<int,3> >& v);
template ostream& output (ostream& os, const vector<list<bbox<int,3> > >& v);
template ostream& output (ostream& os, const vector<vector<int> >& v);
template ostream& output (ostream& os, const vector<vector<bbox<int,3> > >& v);
template ostream& output (ostream& os, const vector<vector<vect<vect<bool,2>,3> > >& v);
template ostream& output (ostream& os, const vector<vect<vect<bool,2>,3> >& v);
template ostream& output (ostream& os, const vector<vector<vector<bbox<int,3> > > >& v);
|