Peano
Loading...
Searching...
No Matches
TaskNumber.cpp
Go to the documentation of this file.
1#include "TaskNumber.h"
2
3#include <sstream>
4
5#include "tarch/Assertions.h"
6#include "tarch/Enumerator.h"
7
8
10
11
13 _taskCounter(number0),
14 _taskAssociation(number1) {
16 *this = NoOutDependencies;
17 }
18 else {
19 assertion1(number0 >= 0, toString());
21 assertion1(number0 <= std::numeric_limits<int>::max()/ static_cast<int>(swift2::TaskNumber::TaskAssociation::NumberOfEntries), toString());
22 }
23}
24
25
27 return _taskCounter < rhs._taskCounter
28 or _taskCounter == rhs._taskCounter and _taskAssociation == TaskAssociation::TouchVertexFirstTime
29 and rhs._taskAssociation != TaskAssociation::TouchVertexFirstTime
30 or _taskCounter == rhs._taskCounter and _taskAssociation == TaskAssociation::TouchCellFirstTime
31 and rhs._taskAssociation == TaskAssociation::TouchVertexLastTime;
32}
33
34
35bool swift2::TaskNumber::equals(const TaskNumber& rhs) const {
36 return _taskCounter == rhs._taskCounter and _taskAssociation == rhs._taskAssociation;
37}
38
39
40bool operator==(const swift2::TaskNumber& lhs, const swift2::TaskNumber& rhs) {
41 return lhs.equals(rhs);
42}
43
44
45bool operator!=(const swift2::TaskNumber& lhs, const swift2::TaskNumber& rhs) {
46 return not lhs.equals(rhs);
47}
48
49
50std::string swift2::TaskNumber::toString() const {
51 if (_taskCounter == tarch::multicore::NoOutDependencies) {
52 return "no-dep";
53 } else {
54 std::string result = "(" + std::to_string(_taskCounter) + ",";
55 switch (_taskAssociation) {
56 case TaskAssociation::TouchVertexFirstTime:
57 result += "touch-vertex-first-time(0)";
58 break;
59 case TaskAssociation::TouchCellFirstTime:
60 result += "touch-cell-first-time(1)";
61 break;
62 case TaskAssociation::TouchVertexLastTime:
63 result += "touch-vertex-last-time(2)";
64 break;
65 default:
66 result += "<undef>";
67 break;
68 }
69 result += ")";
70 return result;
71 }
72}
73
74
84
85
86std::string swift2::toString(const TaskNumber numbers[TwoPowerD]) {
87 std::set<TaskNumber> converted;
88 for (int i=0; i<TwoPowerD; i++) {
89 converted.insert( numbers[i] );
90 }
91 return toString(converted);
92}
93
94
95std::string swift2::toString(const std::set<swift2::TaskNumber>& numbers) {
96 std::ostringstream msg;
97 msg << "{";
98 bool first = true;
99 for (auto& p : numbers) {
100 if (first) {
101 first = false;
102 } else {
103 msg << ",";
104 }
105 msg << p.toString();
106 }
107 msg << "}";
108 return msg.str();
109}
110
111
112int swift2::flatten(const TaskNumber& number) { return number.flatten(); }
113
114
115std::set<int> swift2::flatten(const std::set<TaskNumber>& numbers) {
116 std::set<int> result;
117 for (auto& p : numbers) {
119 result.insert(p.flatten());
120 }
121 }
122 return result;
123}
124
125
126std::set<::swift2::TaskNumber> swift2::getDependenciesForTask(
127 const ::swift2::TaskNumber& task, PendingDependencies& pendingDependencies
128) {
129 std::set<::swift2::TaskNumber> result;
130 PendingDependencies::iterator p = pendingDependencies.begin();
131 while (p != pendingDependencies.end()) {
132 if (p->second == task) {
133 result.insert(p->first);
134 p = pendingDependencies.erase(p);
135 } else
136 p++;
137 }
138 return result;
139}
#define assertionEquals(lhs, rhs)
#define assertion1(expr, param)
#define TwoPowerD
Definition Globals.h:19
bool operator!=(const swift2::TaskNumber &lhs, const swift2::TaskNumber &rhs)
bool operator==(const swift2::TaskNumber &lhs, const swift2::TaskNumber &rhs)
static constexpr int NoNumber
Definition Enumerator.h:26
std::set< std::pair<::swift2::TaskNumber, ::swift2::TaskNumber > > PendingDependencies
Pending dependencies container.
Definition TaskNumber.h:123
int flatten(const TaskNumber &numbers)
Alias around method flatten().
std::string toString(const std::set< TaskNumber > &numbers)
std::set<::swift2::TaskNumber > getDependenciesForTask(const ::swift2::TaskNumber &task, PendingDependencies &pendingDependencies)
Extract set of dependencies for given task.
constexpr TaskNumber NoOutDependencies
Definition multicore.h:101
Task Number.
Definition TaskNumber.h:29
static const TaskNumber NoOutDependencies
Defines the max indices for each entry in TaskNumber.
Definition TaskNumber.h:9
tarch::multicore::TaskNumber flatten() const
TaskNumber(int number0, TaskAssociation number1)
Construct new task number.
std::string toString() const
bool equals(const TaskNumber &rhs) const
bool operator<(const TaskNumber &rhs) const
Total order on object.