Peano 4
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
7
9 std::numeric_limits<int>::max(), swift2::TaskNumber::TaskAssociation::NumberOfEntries};
10
11
13
14
16 _taskCounter(number0),
17 _taskAssociation(number1) {
19 *this = NoDependencies;
20 } else if (number0 != std::numeric_limits<int>::max()) {
21 assertion1(number0 >= 0 or number0 == tarch::multicore::NoDependencies, toString());
23 assertion1(number0 <= Max._taskCounter, toString());
24 }
25}
26
27
29 return _taskCounter < rhs._taskCounter
30 or _taskCounter == rhs._taskCounter and _taskAssociation == TaskAssociation::TouchVertexFirstTime
31 and rhs._taskAssociation != TaskAssociation::TouchVertexFirstTime
32 or _taskCounter == rhs._taskCounter and _taskAssociation == TaskAssociation::TouchCellFirstTime
33 and rhs._taskAssociation == TaskAssociation::TouchVertexLastTime;
34}
35
36
37bool swift2::TaskNumber::equals(const TaskNumber& rhs) const {
38 return _taskCounter == rhs._taskCounter and _taskAssociation == rhs._taskAssociation;
39}
40
41
42bool operator==(const swift2::TaskNumber& lhs, const swift2::TaskNumber& rhs) {
43 return lhs.equals(rhs);
44}
45
46
47bool operator!=(const swift2::TaskNumber& lhs, const swift2::TaskNumber& rhs) {
48 return not lhs.equals(rhs);
49}
50
51
52std::string swift2::TaskNumber::toString() const {
53 if (_taskCounter == tarch::multicore::NoDependencies) {
54 return "no-dep";
55 } else {
56 std::string result = "(" + std::to_string(_taskCounter) + ",";
57 switch (_taskAssociation) {
58 case TaskAssociation::TouchVertexFirstTime:
59 result += "touch-vertex-first-time(0)";
60 break;
61 case TaskAssociation::TouchCellFirstTime:
62 result += "touch-cell-first-time(1)";
63 break;
64 case TaskAssociation::TouchVertexLastTime:
65 result += "touch-vertex-last-time(2)";
66 break;
67 default:
68 result += "<undef>";
69 break;
70 }
71 result += ")";
72 return result;
73 }
74}
75
76
78 if (_taskCounter == tarch::multicore::NoDependencies) {
80 } else {
81 return _taskCounter * static_cast<int>(Max._taskAssociation)
82 + static_cast<int>(_taskAssociation);
83 }
84}
85
86
87std::string swift2::toString(const std::set<swift2::TaskNumber>& numbers) {
88 std::ostringstream msg;
89 msg << "{";
90 bool first = true;
91 for (auto& p : numbers) {
92 if (first) {
93 first = false;
94 } else {
95 msg << ",";
96 }
97 msg << p.toString();
98 }
99 msg << "}";
100 return msg.str();
101}
102
103
104int swift2::flatten(const TaskNumber& number) { return number.flatten(); }
105
106
107std::set<int> swift2::flatten(const std::set<TaskNumber>& numbers) {
108 std::set<int> result;
109 for (auto& p : numbers) {
111 result.insert(p.flatten());
112 }
113 }
114 return result;
115}
116
117
118std::set<::swift2::TaskNumber> swift2::getDependenciesForTask(
119 const ::swift2::TaskNumber& task, PendingDependencies& pendingDependencies
120) {
121 std::set<::swift2::TaskNumber> result;
122 PendingDependencies::iterator p = pendingDependencies.begin();
123 while (p != pendingDependencies.end()) {
124 if (p->second == task) {
125 result.insert(p->first);
126 p = pendingDependencies.erase(p);
127 } else
128 p++;
129 }
130 return result;
131}
#define assertion1(expr, param)
bool operator!=(const swift2::TaskNumber &lhs, const swift2::TaskNumber &rhs)
bool operator==(const swift2::TaskNumber &lhs, const swift2::TaskNumber &rhs)
std::set< std::pair<::swift2::TaskNumber, ::swift2::TaskNumber > > PendingDependencies
Pending dependencies container.
Definition TaskNumber.h:121
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 NoDependencies
Definition Tasks.h:21
Task Number.
Definition TaskNumber.h:29
static const TaskNumber NoDependencies
Definition TaskNumber.h:12
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.
static const TaskNumber Max
Defines the max indices for each entry in TaskNumber.
Definition TaskNumber.h:8