aboutsummaryrefslogtreecommitdiff
path: root/Carpet/Requirements/src/all_clauses.cc
blob: 5b19f3f52f3fe2f797296a128422f0a1c9e8641c (plain)
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
#include "all_clauses.hh"
#include "util.hh"

#include <cctk.h>
#include <cctki_Schedule.h>

#include <iostream>
#include <map>
#include <vector>

using namespace std;

namespace Requirements {

  clauses_t const& all_clauses_t::
  get_clauses(cFunctionData const* const function_data)
  {
    clauses_map_t::const_iterator const iclauses =
      clauses_map.find(function_data);
    if (iclauses != clauses_map.end()) return *iclauses->second;
    clauses_t* const clauses = new clauses_t;
    clauses->setup(function_data);
    pair<clauses_map_t::const_iterator, bool> const ret =
      clauses_map.insert(clauses_map_t::value_type(function_data, clauses));
    assert(ret.second);
    return *ret.first->second;
  }
  
  void all_clauses_t::
  remove_clauses(cFunctionData const* const function_data)
  {
    clauses_map_t::iterator const iclauses =
      clauses_map.find(function_data);
    if (iclauses != clauses_map.end()) {
      clauses_map.erase(iclauses);
    }
    return;
  }
  
  void all_clauses_t::output(ostream& os) const
  {
    os << "all_clauses: {" << std::endl;
    for (std::map<cFunctionData const*, clauses_t const*>::const_iterator
           ti=clauses_map.begin();
         ti!=clauses_map.end();
         ++ti)
    {
      if (ti!=clauses_map.begin()) os << ",";
      os << ti->first->thorn << "::" 
         << ti->first->routine << " in " 
         << ti->first->where << ": " << *ti->second << std::endl;
    }
    os << "}";
  }
};