diff options
-rw-r--r-- | Carpet/Requirements/src/Requirements.cc | 66 | ||||
-rw-r--r-- | Carpet/Requirements/src/clause.cc | 7 | ||||
-rw-r--r-- | Carpet/Requirements/src/clause.hh | 10 | ||||
-rw-r--r-- | Carpet/Requirements/src/clauses.cc | 38 | ||||
-rw-r--r-- | Carpet/Requirements/src/clauses.hh | 32 | ||||
-rw-r--r-- | Carpet/Requirements/src/make.code.defn | 2 | ||||
-rw-r--r-- | Carpet/Requirements/src/util.cc | 3 | ||||
-rw-r--r-- | Carpet/Requirements/src/util.hh | 35 |
8 files changed, 123 insertions, 70 deletions
diff --git a/Carpet/Requirements/src/Requirements.cc b/Carpet/Requirements/src/Requirements.cc index a76a1b8a2..11b92cedd 100644 --- a/Carpet/Requirements/src/Requirements.cc +++ b/Carpet/Requirements/src/Requirements.cc @@ -20,6 +20,8 @@ #include <string> #include <vector> #include <clause.hh> +#include <clauses.hh> +#include <util.hh> using namespace std; @@ -33,69 +35,6 @@ namespace Requirements { // 2. Things can be provided only once, not multiple times. // Except when they are also required. - - // taken from defs.cc and defs.hh - // Vector output - template<class T> - ostream& output (ostream& os, const vector<T>& 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<T>::const_iterator ti=v.begin(); ti!=v.end(); ++ti) { - if (ti!=v.begin()) os << ","; - // os << cnt++ << ":"; - os << *ti; - } - os << "]"; - return os; - } - - template<class T> - inline ostream& operator<< (ostream& os, const vector<T>& v) { - return Requirements::output(os,v); - } - - struct clauses_t { - vector<clause_t> reads, writes; - clauses_t() {} - void setup(cFunctionData const* function_data); - - // Input/Output helpers - void input (istream& is); - void output (ostream& os) const; - }; - - void clauses_t::setup(cFunctionData const* const function_data) - { - clause_t prototype; - prototype.interpret_options(function_data); - reads.reserve(function_data->n_ReadsClauses); - for (int n=0; n<function_data->n_ReadsClauses; ++n) { - clause_t clause(prototype); - clause.parse_clause(function_data->ReadsClauses[n]); - reads.push_back(clause); - } - writes.reserve(function_data->n_WritesClauses); - for (int n=0; n<function_data->n_WritesClauses; ++n) { - clause_t clause(prototype); - clause.parse_clause(function_data->WritesClauses[n]); - writes.push_back(clause); - } - } - - inline ostream& operator<< (ostream& os, const clauses_t& a) { - a.output(os); - return os; - } - - void clauses_t::output(ostream& os) const - { - os << "reads = " << reads << ", writes = " << writes; - } - - - class all_clauses_t { // TODO: Represent I/O as well? typedef std::map<cFunctionData const*, clauses_t const*> clauses_map_t; @@ -1197,7 +1136,6 @@ namespace Requirements { os << old_vars << std::endl; } - template ostream& output (ostream& os, const vector<clause_t>& v); template ostream& output (ostream& os, const vector<all_state_t::timelevels_t>& v); template ostream& output (ostream& os, const vector<all_state_t::maps_t>& v); template ostream& output (ostream& os, const vector<all_state_t::reflevels_t>& v); diff --git a/Carpet/Requirements/src/clause.cc b/Carpet/Requirements/src/clause.cc index 2c160bbec..b25d102e0 100644 --- a/Carpet/Requirements/src/clause.cc +++ b/Carpet/Requirements/src/clause.cc @@ -12,6 +12,8 @@ using namespace std; namespace Requirements { +//template ostream& output (ostream& os, const vector<clause_t>& v); + void clause_t::interpret_options(cFunctionData const* const function_data) { if (function_data->meta or @@ -131,11 +133,6 @@ namespace Requirements { return false; } - inline ostream& operator<< (ostream& os, const clause_t& a) { - a.output(os); - return os; - } - void clause_t::output(ostream& os) const { char* const groupname = CCTK_GroupNameFromVarI(vars.at(0)); diff --git a/Carpet/Requirements/src/clause.hh b/Carpet/Requirements/src/clause.hh index 66e06df74..23e9b0470 100644 --- a/Carpet/Requirements/src/clause.hh +++ b/Carpet/Requirements/src/clause.hh @@ -1,3 +1,5 @@ +#ifndef CLAUSE_HH +#define CLAUSE_HH #include <cctk_Schedule.h> #include <vector> @@ -34,4 +36,12 @@ namespace Requirements { void input (istream& is); void output (ostream& os) const; }; + + inline ostream& operator<< (ostream& os, const clause_t& a) { + a.output(os); + return os; + } + }; + +#endif diff --git a/Carpet/Requirements/src/clauses.cc b/Carpet/Requirements/src/clauses.cc new file mode 100644 index 000000000..ad0a3aea9 --- /dev/null +++ b/Carpet/Requirements/src/clauses.cc @@ -0,0 +1,38 @@ + +#include <iostream> +#include <vector> + +#include <cctk.h> +#include <cctki_Schedule.h> +#include <clauses.hh> +#include <clause.hh> +#include <util.hh> + +using namespace std; + +namespace Requirements { + + void clauses_t::setup(cFunctionData const* const function_data) + { + clause_t prototype; + prototype.interpret_options(function_data); + reads.reserve(function_data->n_ReadsClauses); + for (int n=0; n<function_data->n_ReadsClauses; ++n) { + clause_t clause(prototype); + clause.parse_clause(function_data->ReadsClauses[n]); + reads.push_back(clause); + } + writes.reserve(function_data->n_WritesClauses); + for (int n=0; n<function_data->n_WritesClauses; ++n) { + clause_t clause(prototype); + clause.parse_clause(function_data->WritesClauses[n]); + writes.push_back(clause); + } + } + + void clauses_t::output(ostream& os) const + { + os << "reads = " << reads << ", writes = " << writes; + } + +} diff --git a/Carpet/Requirements/src/clauses.hh b/Carpet/Requirements/src/clauses.hh new file mode 100644 index 000000000..368f45772 --- /dev/null +++ b/Carpet/Requirements/src/clauses.hh @@ -0,0 +1,32 @@ +#ifndef CLAUSES_HH +#define CLAUSES_HH + +#include <iostream> + +#include <cctk.h> +#include <cctki_Schedule.h> + +#include <clause.hh> + +using namespace std; + +namespace Requirements { + + struct clauses_t { + vector<clause_t> reads, writes; + clauses_t() {} + void setup(cFunctionData const* function_data); + + // Input/Output helpers + void input (istream& is); + void output (ostream& os) const; + }; + + inline ostream& operator<< (ostream& os, const clauses_t& a) { + a.output(os); + return os; + } + +}; + +#endif diff --git a/Carpet/Requirements/src/make.code.defn b/Carpet/Requirements/src/make.code.defn index 4852f42f9..1fd8750bc 100644 --- a/Carpet/Requirements/src/make.code.defn +++ b/Carpet/Requirements/src/make.code.defn @@ -1,7 +1,7 @@ # Main make.code.defn file for thorn Requirements -*-Makefile-*- # Source files in this directory -SRCS = Requirements.cc clause.cc +SRCS = Requirements.cc clause.cc clauses.cc util.cc # Subdirectories containing source files SUBDIRS = diff --git a/Carpet/Requirements/src/util.cc b/Carpet/Requirements/src/util.cc new file mode 100644 index 000000000..20df87d89 --- /dev/null +++ b/Carpet/Requirements/src/util.cc @@ -0,0 +1,3 @@ + +#include <util.hh> + diff --git a/Carpet/Requirements/src/util.hh b/Carpet/Requirements/src/util.hh new file mode 100644 index 000000000..73b5faa1e --- /dev/null +++ b/Carpet/Requirements/src/util.hh @@ -0,0 +1,35 @@ +#ifndef UTIL_HH +#define UTIL_HH + +#include <iostream> +#include <vector> + +namespace Requirements { + +using namespace std; + + // taken from defs.cc and defs.hh + // Vector output + template<class T> + inline ostream& output (ostream& os, const vector<T>& 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<T>::const_iterator ti=v.begin(); ti!=v.end(); ++ti) { + if (ti!=v.begin()) os << ","; + // os << cnt++ << ":"; + os << *ti; + } + os << "]"; + return os; + } + + template<class T> + inline ostream& operator<< (ostream& os, const vector<T>& v) { + return Requirements::output(os,v); + } + +}; + +#endif |