aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern Brandenburg <bbb@mpi-sws.org>2012-04-11 11:00:35 -0400
committerBjoern Brandenburg <bbb@mpi-sws.org>2012-04-11 11:00:35 -0400
commit7f5bca0f5d1c1bfc56c83e248360720ef45c842a (patch)
tree542dc955de70f2d573de50848680046f923029e0
parent20f6bc1e25b366c55fb95fb084ded37407042071 (diff)
Rename time types used in C++ schedulablity analysis
integral_t == integral time units fractional_t == fractions of integral time units This is hopefully less of an eyesore than mpq_class and mpz_class.
-rw-r--r--native/include/edf/baker.h4
-rw-r--r--native/include/edf/baruah.h16
-rw-r--r--native/include/edf/bcl.h2
-rw-r--r--native/include/edf/ffdbf.h6
-rw-r--r--native/include/edf/load.h2
-rw-r--r--native/include/math-helper.h6
-rw-r--r--native/include/tasks.h34
-rw-r--r--native/include/time-types.h15
-rw-r--r--native/interface/sched.i6
-rw-r--r--native/interface/sim.i6
-rw-r--r--native/src/edf/baker.cpp12
-rw-r--r--native/src/edf/baruah.cpp76
-rw-r--r--native/src/edf/bcl.cpp8
-rw-r--r--native/src/edf/bcl_iterative.cpp8
-rw-r--r--native/src/edf/ffdbf.cpp68
-rw-r--r--native/src/edf/gedf.cpp2
-rw-r--r--native/src/edf/gfb.cpp2
-rw-r--r--native/src/edf/load.cpp4
-rw-r--r--native/src/edf/rta.cpp16
-rw-r--r--native/src/sharedres.cpp2
-rw-r--r--native/src/tasks.cpp38
-rw-r--r--native/src/testmain.cpp14
22 files changed, 178 insertions, 169 deletions
diff --git a/native/include/edf/baker.h b/native/include/edf/baker.h
index c3716df..44493e5 100644
--- a/native/include/edf/baker.h
+++ b/native/include/edf/baker.h
@@ -8,8 +8,8 @@ class BakerGedf : public SchedulabilityTest
8 unsigned int m; 8 unsigned int m;
9 9
10 private: 10 private:
11 void beta(const Task &t_i, const Task &t_k, const mpq_class &lambda_k, 11 void beta(const Task &t_i, const Task &t_k, const fractional_t &lambda_k,
12 mpq_class &beta_i); 12 fractional_t &beta_i);
13 bool is_task_schedulable(unsigned int k, const TaskSet &ts); 13 bool is_task_schedulable(unsigned int k, const TaskSet &ts);
14 14
15 public: 15 public:
diff --git a/native/include/edf/baruah.h b/native/include/edf/baruah.h
index c79b49d..f6f9217 100644
--- a/native/include/edf/baruah.h
+++ b/native/include/edf/baruah.h
@@ -9,14 +9,14 @@ private:
9 9
10 bool is_task_schedulable(unsigned int k, 10 bool is_task_schedulable(unsigned int k,
11 const TaskSet &ts, 11 const TaskSet &ts,
12 const mpz_class &ilen, 12 const integral_t &ilen,
13 mpz_class &i1, 13 integral_t &i1,
14 mpz_class &sum, 14 integral_t &sum,
15 mpz_class *idiff, 15 integral_t *idiff,
16 mpz_class **ptr); 16 integral_t **ptr);
17 17
18 void get_max_test_points(const TaskSet &ts, mpq_class& m_minus_u, 18 void get_max_test_points(const TaskSet &ts, fractional_t& m_minus_u,
19 mpz_class* maxp); 19 integral_t* maxp);
20 20
21public: 21public:
22 BaruahGedf(unsigned int num_processors) : m(num_processors) {}; 22 BaruahGedf(unsigned int num_processors) : m(num_processors) {};
diff --git a/native/include/edf/bcl.h b/native/include/edf/bcl.h
index 31bf1e3..aa4d818 100644
--- a/native/include/edf/bcl.h
+++ b/native/include/edf/bcl.h
@@ -9,7 +9,7 @@ class BCLGedf : public SchedulabilityTest
9 9
10 private: 10 private:
11 unsigned long max_jobs_contained(const Task &t_i, const Task &t_k); 11 unsigned long max_jobs_contained(const Task &t_i, const Task &t_k);
12 void beta(const Task &t_i, const Task &t_k, mpq_class &beta_i); 12 void beta(const Task &t_i, const Task &t_k, fractional_t &beta_i);
13 bool is_task_schedulable(unsigned int k, const TaskSet &ts); 13 bool is_task_schedulable(unsigned int k, const TaskSet &ts);
14 14
15 public: 15 public:
diff --git a/native/include/edf/ffdbf.h b/native/include/edf/ffdbf.h
index 7e3dac6..a5fb834 100644
--- a/native/include/edf/ffdbf.h
+++ b/native/include/edf/ffdbf.h
@@ -6,12 +6,12 @@ class FFDBFGedf : public SchedulabilityTest
6 private: 6 private:
7 const unsigned int m; 7 const unsigned int m;
8 const unsigned long epsilon_denom; 8 const unsigned long epsilon_denom;
9 const mpq_class sigma_step; 9 const fractional_t sigma_step;
10 10
11 private: 11 private:
12 bool witness_condition(const TaskSet &ts, 12 bool witness_condition(const TaskSet &ts,
13 const mpz_class q[], const mpq_class r[], 13 const integral_t q[], const fractional_t r[],
14 const mpq_class &time, const mpq_class &speed); 14 const fractional_t &time, const fractional_t &speed);
15 15
16 public: 16 public:
17 FFDBFGedf(unsigned int num_processors, 17 FFDBFGedf(unsigned int num_processors,
diff --git a/native/include/edf/load.h b/native/include/edf/load.h
index 36c8f5a..50d7850 100644
--- a/native/include/edf/load.h
+++ b/native/include/edf/load.h
@@ -5,7 +5,7 @@ class LoadGedf : public SchedulabilityTest
5{ 5{
6 private: 6 private:
7 unsigned int m; 7 unsigned int m;
8 mpq_class epsilon; 8 fractional_t epsilon;
9 9
10 public: 10 public:
11 LoadGedf(unsigned int num_processors, 11 LoadGedf(unsigned int num_processors,
diff --git a/native/include/math-helper.h b/native/include/math-helper.h
index 10c42c2..063558c 100644
--- a/native/include/math-helper.h
+++ b/native/include/math-helper.h
@@ -1,12 +1,6 @@
1#ifndef MATH_HELPER_H 1#ifndef MATH_HELPER_H
2#define MATH_HELPER_H 2#define MATH_HELPER_H
3 3
4static inline void mpq_truncate(mpq_class &val)
5{
6 val.get_num() -= val.get_num() % val.get_den();
7 val.canonicalize();
8}
9
10static inline unsigned long divide_with_ceil(unsigned long numer, 4static inline unsigned long divide_with_ceil(unsigned long numer,
11 unsigned long denom) 5 unsigned long denom)
12{ 6{
diff --git a/native/include/tasks.h b/native/include/tasks.h
index 175206a..dbba8d1 100644
--- a/native/include/tasks.h
+++ b/native/include/tasks.h
@@ -6,10 +6,10 @@
6#include <vector> 6#include <vector>
7#include <algorithm> 7#include <algorithm>
8 8
9#include <gmpxx.h>
10
11#include <math.h> 9#include <math.h>
12 10
11#include "time-types.h"
12
13#endif 13#endif
14 14
15class Task 15class Task
@@ -43,8 +43,8 @@ class Task
43 bool is_feasible() const; 43 bool is_feasible() const;
44 44
45 45
46 void get_utilization(mpq_class &util) const; 46 void get_utilization(fractional_t &util) const;
47 void get_density(mpq_class &density) const; 47 void get_density(fractional_t &density) const;
48 48
49 // Demand bound function (DBF) and LOAD support. 49 // Demand bound function (DBF) and LOAD support.
50 // This implements Fisher, Baker, and Baruah's PTAS 50 // This implements Fisher, Baker, and Baruah's PTAS
@@ -64,7 +64,7 @@ class Task
64 } 64 }
65 } 65 }
66 66
67 void bound_demand(const mpz_class &time, mpz_class &demand) const 67 void bound_demand(const integral_t &time, integral_t &demand) const
68 { 68 {
69 if (time <= deadline) 69 if (time <= deadline)
70 demand = 0; 70 demand = 0;
@@ -79,9 +79,9 @@ class Task
79 } 79 }
80 } 80 }
81 81
82 void bound_load(const mpz_class &time, mpq_class &load) const 82 void bound_load(const integral_t &time, fractional_t &load) const
83 { 83 {
84 mpz_class demand; 84 integral_t demand;
85 85
86 if (time > 0) 86 if (time > 0)
87 { 87 {
@@ -107,14 +107,14 @@ class Task
107 } 107 }
108 } 108 }
109 109
110 void approx_demand(const mpz_class &time, mpz_class &demand, 110 void approx_demand(const integral_t &time, integral_t &demand,
111 unsigned int k) const 111 unsigned int k) const
112 { 112 {
113 if (time < k * period + deadline) 113 if (time < k * period + deadline)
114 bound_demand(time, demand); 114 bound_demand(time, demand);
115 else 115 else
116 { 116 {
117 mpz_class approx; 117 integral_t approx;
118 118
119 approx = time; 119 approx = time;
120 approx -= deadline; 120 approx -= deadline;
@@ -126,10 +126,10 @@ class Task
126 } 126 }
127 } 127 }
128 128
129 void approx_load(const mpz_class &time, mpq_class &load, 129 void approx_load(const integral_t &time, fractional_t &load,
130 unsigned int k) const 130 unsigned int k) const
131 { 131 {
132 mpz_class demand; 132 integral_t demand;
133 133
134 if (time > 0) 134 if (time > 0)
135 { 135 {
@@ -148,8 +148,8 @@ class TaskSet
148{ 148{
149 private: 149 private:
150 Tasks tasks; 150 Tasks tasks;
151 151
152 unsigned long k_for_epsilon(unsigned int idx, const mpq_class &epsilon) const; 152 unsigned long k_for_epsilon(unsigned int idx, const fractional_t &epsilon) const;
153 153
154 public: 154 public:
155 TaskSet(); 155 TaskSet();
@@ -172,11 +172,11 @@ class TaskSet
172 bool has_only_feasible_tasks() const; 172 bool has_only_feasible_tasks() const;
173 bool is_not_overutilized(unsigned int num_processors) const; 173 bool is_not_overutilized(unsigned int num_processors) const;
174 174
175 void get_utilization(mpq_class &util) const; 175 void get_utilization(fractional_t &util) const;
176 void get_density(mpq_class &density) const; 176 void get_density(fractional_t &density) const;
177 void get_max_density(mpq_class &max_density) const; 177 void get_max_density(fractional_t &max_density) const;
178 178
179 void approx_load(mpq_class &load, const mpq_class &epsilon = 0.1) const; 179 void approx_load(fractional_t &load, const fractional_t &epsilon = 0.1) const;
180 180
181 /* wrapper for Python access */ 181 /* wrapper for Python access */
182 unsigned long get_period(unsigned int idx) const 182 unsigned long get_period(unsigned int idx) const
diff --git a/native/include/time-types.h b/native/include/time-types.h
new file mode 100644
index 0000000..a2250d3
--- /dev/null
+++ b/native/include/time-types.h
@@ -0,0 +1,15 @@
1#ifndef TIME_TYPES_H
2#define TIME_TYPES_H
3
4#include <gmpxx.h>
5
6typedef mpz_class integral_t;
7typedef mpq_class fractional_t;
8
9static inline void truncate_fraction(fractional_t &val)
10{
11 val.get_num() -= val.get_num() % val.get_den();
12 val.canonicalize();
13}
14
15#endif
diff --git a/native/interface/sched.i b/native/interface/sched.i
index e94b5ca..255531a 100644
--- a/native/interface/sched.i
+++ b/native/interface/sched.i
@@ -15,9 +15,9 @@
15#include "sharedres.h" 15#include "sharedres.h"
16%} 16%}
17 17
18%ignore Task::get_utilization(mpq_class &util) const; 18%ignore Task::get_utilization(fractional_t &util) const;
19%ignore Task::get_density(mpq_class &density) const; 19%ignore Task::get_density(fractional_t &density) const;
20%ignore Task::bound_demand(const mpz_class &time, mpz_class &demand) const; 20%ignore Task::bound_demand(const integral_t &time, integral_t &demand) const;
21%ignore Task::bound_load const; 21%ignore Task::bound_load const;
22%ignore Task::approx_demand const; 22%ignore Task::approx_demand const;
23 23
diff --git a/native/interface/sim.i b/native/interface/sim.i
index 26eac5f..aeeb59e 100644
--- a/native/interface/sim.i
+++ b/native/interface/sim.i
@@ -5,9 +5,9 @@
5#include "edf/sim.h" 5#include "edf/sim.h"
6%} 6%}
7 7
8%ignore Task::get_utilization(mpq_class &util) const; 8%ignore Task::get_utilization(fractional_t &util) const;
9%ignore Task::get_density(mpq_class &density) const; 9%ignore Task::get_density(fractional_t &density) const;
10%ignore Task::bound_demand(const mpz_class &time, mpz_class &demand) const; 10%ignore Task::bound_demand(const integral_t &time, integral_t &demand) const;
11%ignore Task::bound_load const; 11%ignore Task::bound_load const;
12%ignore Task::approx_demand const; 12%ignore Task::approx_demand const;
13 13
diff --git a/native/src/edf/baker.cpp b/native/src/edf/baker.cpp
index ca2b8cc..3d13b2c 100644
--- a/native/src/edf/baker.cpp
+++ b/native/src/edf/baker.cpp
@@ -8,10 +8,10 @@
8using namespace std; 8using namespace std;
9 9
10void BakerGedf::beta(const Task &t_i, const Task &t_k, 10void BakerGedf::beta(const Task &t_i, const Task &t_k,
11 const mpq_class &lambda_k, 11 const fractional_t &lambda_k,
12 mpq_class &beta_i) 12 fractional_t &beta_i)
13{ 13{
14 mpq_class u_i; 14 fractional_t u_i;
15 15
16 // XXX: possible improvement would be to pre-compute u_i 16 // XXX: possible improvement would be to pre-compute u_i
17 // instead of incurring quadratic u_i computations. 17 // instead of incurring quadratic u_i computations.
@@ -24,7 +24,7 @@ void BakerGedf::beta(const Task &t_i, const Task &t_k,
24 24
25 if (lambda_k < u_i) 25 if (lambda_k < u_i)
26 { 26 {
27 mpq_class tmp = t_i.get_wcet(); 27 fractional_t tmp = t_i.get_wcet();
28 tmp -= lambda_k * t_i.get_period(); 28 tmp -= lambda_k * t_i.get_period();
29 tmp /= t_k.get_deadline(); 29 tmp /= t_k.get_deadline();
30 beta_i += tmp; 30 beta_i += tmp;
@@ -33,8 +33,8 @@ void BakerGedf::beta(const Task &t_i, const Task &t_k,
33 33
34bool BakerGedf::is_task_schedulable(unsigned int k, const TaskSet &ts) 34bool BakerGedf::is_task_schedulable(unsigned int k, const TaskSet &ts)
35{ 35{
36 mpq_class lambda, bound, beta_i, beta_sum = 0; 36 fractional_t lambda, bound, beta_i, beta_sum = 0;
37 mpq_class one = 1; 37 fractional_t one = 1;
38 38
39 ts[k].get_density(lambda); 39 ts[k].get_density(lambda);
40 40
diff --git a/native/src/edf/baruah.cpp b/native/src/edf/baruah.cpp
index 1b82baa..d2699e5 100644
--- a/native/src/edf/baruah.cpp
+++ b/native/src/edf/baruah.cpp
@@ -18,8 +18,8 @@ const double BaruahGedf::MAX_RUNTIME = 5.0; /* seconds */
18 18
19 19
20static void demand_bound_function(const Task &tsk, 20static void demand_bound_function(const Task &tsk,
21 const mpz_class &t, 21 const integral_t &t,
22 mpz_class &db) 22 integral_t &db)
23{ 23{
24 db = t; 24 db = t;
25 db -= tsk.get_deadline(); 25 db -= tsk.get_deadline();
@@ -36,7 +36,7 @@ static void demand_bound_function(const Task &tsk,
36class DBFPointsOfChange 36class DBFPointsOfChange
37{ 37{
38private: 38private:
39 mpz_class cur; 39 integral_t cur;
40 unsigned long pi; // period 40 unsigned long pi; // period
41 41
42public: 42public:
@@ -56,7 +56,7 @@ public:
56 next(); 56 next();
57 } 57 }
58 58
59 const mpz_class& get_cur() const 59 const integral_t& get_cur() const
60 { 60 {
61 return cur; 61 return cur;
62 } 62 }
@@ -84,11 +84,11 @@ class AllDBFPointsOfChange
84private: 84private:
85 DBFPointsOfChange *dbf; 85 DBFPointsOfChange *dbf;
86 DBFQueue queue; 86 DBFQueue queue;
87 mpz_class last; 87 integral_t last;
88 mpz_class *upper_bound; 88 integral_t *upper_bound;
89 89
90public: 90public:
91 void init(const TaskSet &ts, int k, mpz_class* bound) 91 void init(const TaskSet &ts, int k, integral_t* bound)
92 { 92 {
93 last = -1; 93 last = -1;
94 dbf = new DBFPointsOfChange[ts.get_task_count()]; 94 dbf = new DBFPointsOfChange[ts.get_task_count()];
@@ -105,7 +105,7 @@ public:
105 delete[] dbf; 105 delete[] dbf;
106 } 106 }
107 107
108 bool get_next(mpz_class &t) 108 bool get_next(integral_t &t)
109 { 109 {
110 if (last > *upper_bound) 110 if (last > *upper_bound)
111 return false; 111 return false;
@@ -127,49 +127,49 @@ public:
127 127
128static 128static
129void interval1(unsigned int i, unsigned int k, const TaskSet &ts, 129void interval1(unsigned int i, unsigned int k, const TaskSet &ts,
130 const mpz_class &ilen, mpz_class &i1) 130 const integral_t &ilen, integral_t &i1)
131{ 131{
132 mpz_class dbf, tmp; 132 integral_t dbf, tmp;
133 tmp = ilen + ts[k].get_deadline(); 133 tmp = ilen + ts[k].get_deadline();
134 demand_bound_function(ts[i], tmp, dbf); 134 demand_bound_function(ts[i], tmp, dbf);
135 if (i == k) 135 if (i == k)
136 i1 = min(mpz_class(dbf - ts[k].get_wcet()), ilen); 136 i1 = min(integral_t(dbf - ts[k].get_wcet()), ilen);
137 else 137 else
138 i1 = min(dbf, 138 i1 = min(dbf,
139 mpz_class(ilen + ts[k].get_deadline() - 139 integral_t(ilen + ts[k].get_deadline() -
140 (ts[k].get_wcet() - 1))); 140 (ts[k].get_wcet() - 1)));
141} 141}
142 142
143 143
144static void demand_bound_function_prime(const Task &tsk, 144static void demand_bound_function_prime(const Task &tsk,
145 const mpz_class &t, 145 const integral_t &t,
146 mpz_class &db) 146 integral_t &db)
147// carry-in scenario 147// carry-in scenario
148{ 148{
149 db = t; 149 db = t;
150 db /= tsk.get_period(); 150 db /= tsk.get_period();
151 db *= tsk.get_wcet(); 151 db *= tsk.get_wcet();
152 db += min(mpz_class(tsk.get_wcet()), mpz_class(t % tsk.get_period())); 152 db += min(integral_t(tsk.get_wcet()), integral_t(t % tsk.get_period()));
153} 153}
154 154
155static void interval2(unsigned int i, unsigned int k, const TaskSet &ts, 155static void interval2(unsigned int i, unsigned int k, const TaskSet &ts,
156 const mpz_class &ilen, mpz_class &i2) 156 const integral_t &ilen, integral_t &i2)
157{ 157{
158 mpz_class dbf, tmp; 158 integral_t dbf, tmp;
159 159
160 tmp = ilen + ts[k].get_deadline(); 160 tmp = ilen + ts[k].get_deadline();
161 demand_bound_function_prime(ts[i], tmp, dbf); 161 demand_bound_function_prime(ts[i], tmp, dbf);
162 if (i == k) 162 if (i == k)
163 i2 = min(mpz_class(dbf - ts[k].get_wcet()), ilen); 163 i2 = min(integral_t(dbf - ts[k].get_wcet()), ilen);
164 else 164 else
165 i2 = min(dbf, 165 i2 = min(dbf,
166 mpz_class(ilen + ts[k].get_deadline() - 166 integral_t(ilen + ts[k].get_deadline() -
167 (ts[k].get_wcet() - 1))); 167 (ts[k].get_wcet() - 1)));
168} 168}
169 169
170class MPZComparator { 170class MPZComparator {
171public: 171public:
172 bool operator() (mpz_class *a, mpz_class *b) 172 bool operator() (integral_t *a, integral_t *b)
173 { 173 {
174 return *b < *a; 174 return *b < *a;
175 } 175 }
@@ -177,13 +177,13 @@ public:
177 177
178bool BaruahGedf::is_task_schedulable(unsigned int k, 178bool BaruahGedf::is_task_schedulable(unsigned int k,
179 const TaskSet &ts, 179 const TaskSet &ts,
180 const mpz_class &ilen, 180 const integral_t &ilen,
181 mpz_class &i1, 181 integral_t &i1,
182 mpz_class &sum, 182 integral_t &sum,
183 mpz_class *idiff, 183 integral_t *idiff,
184 mpz_class **ptr) 184 integral_t **ptr)
185{ 185{
186 mpz_class bound; 186 integral_t bound;
187 sum = 0; 187 sum = 0;
188 188
189 for (unsigned int i = 0; i < ts.get_task_count(); i++) 189 for (unsigned int i = 0; i < ts.get_task_count(); i++)
@@ -206,8 +206,8 @@ bool BaruahGedf::is_task_schedulable(unsigned int k,
206} 206}
207 207
208void BaruahGedf::get_max_test_points(const TaskSet &ts, 208void BaruahGedf::get_max_test_points(const TaskSet &ts,
209 mpq_class &m_minus_u, 209 fractional_t &m_minus_u,
210 mpz_class* maxp) 210 integral_t* maxp)
211{ 211{
212 unsigned long* wcet = new unsigned long[ts.get_task_count()]; 212 unsigned long* wcet = new unsigned long[ts.get_task_count()];
213 213
@@ -216,8 +216,8 @@ void BaruahGedf::get_max_test_points(const TaskSet &ts,
216 216
217 sort(wcet, wcet + ts.get_task_count(), greater<unsigned long>()); 217 sort(wcet, wcet + ts.get_task_count(), greater<unsigned long>());
218 218
219 mpq_class u, tdu_sum; 219 fractional_t u, tdu_sum;
220 mpz_class csigma, mc; 220 integral_t csigma, mc;
221 221
222 csigma = 0; 222 csigma = 0;
223 for (unsigned int i = 0; i < m - 1 && i < ts.get_task_count(); i++) 223 for (unsigned int i = 0; i < m - 1 && i < ts.get_task_count(); i++)
@@ -256,7 +256,7 @@ bool BaruahGedf::is_schedulable(const TaskSet &ts,
256 return true; 256 return true;
257 } 257 }
258 258
259 mpq_class m_minus_u; 259 fractional_t m_minus_u;
260 ts.get_utilization(m_minus_u); 260 ts.get_utilization(m_minus_u);
261 m_minus_u *= -1; 261 m_minus_u *= -1;
262 m_minus_u += m; 262 m_minus_u += m;
@@ -270,19 +270,19 @@ bool BaruahGedf::is_schedulable(const TaskSet &ts,
270 270
271 double start_time = get_cpu_usage(); 271 double start_time = get_cpu_usage();
272 272
273 mpz_class i1, sum; 273 integral_t i1, sum;
274 mpz_class *max_test_point, *idiff; 274 integral_t *max_test_point, *idiff;
275 mpz_class** ptr; // indirect access to idiff 275 integral_t** ptr; // indirect access to idiff
276 276
277 idiff = new mpz_class[ts.get_task_count()]; 277 idiff = new integral_t[ts.get_task_count()];
278 max_test_point = new mpz_class[ts.get_task_count()]; 278 max_test_point = new integral_t[ts.get_task_count()];
279 ptr = new mpz_class*[ts.get_task_count()]; 279 ptr = new integral_t*[ts.get_task_count()];
280 for (unsigned int i = 0; i < ts.get_task_count(); i++) 280 for (unsigned int i = 0; i < ts.get_task_count(); i++)
281 ptr[i] = idiff + i; 281 ptr[i] = idiff + i;
282 282
283 get_max_test_points(ts, m_minus_u, max_test_point); 283 get_max_test_points(ts, m_minus_u, max_test_point);
284 284
285 mpz_class ilen; 285 integral_t ilen;
286 bool point_in_range = true; 286 bool point_in_range = true;
287 bool schedulable = true; 287 bool schedulable = true;
288 288
diff --git a/native/src/edf/bcl.cpp b/native/src/edf/bcl.cpp
index 8cc25d9..d7fa721 100644
--- a/native/src/edf/bcl.cpp
+++ b/native/src/edf/bcl.cpp
@@ -15,11 +15,11 @@ unsigned long BCLGedf::max_jobs_contained(const Task &t_i, const Task &t_k)
15 return 1 + (t_k.get_deadline() - t_i.get_deadline()) / t_i.get_period(); 15 return 1 + (t_k.get_deadline() - t_i.get_deadline()) / t_i.get_period();
16} 16}
17 17
18void BCLGedf::beta(const Task &t_i, const Task &t_k, mpq_class &beta_i) 18void BCLGedf::beta(const Task &t_i, const Task &t_k, fractional_t &beta_i)
19{ 19{
20 unsigned long n = max_jobs_contained(t_i, t_k); 20 unsigned long n = max_jobs_contained(t_i, t_k);
21 21
22 mpz_class c_i, tmp; 22 integral_t c_i, tmp;
23 23
24 c_i = t_i.get_wcet(); 24 c_i = t_i.get_wcet();
25 tmp = t_i.get_period(); 25 tmp = t_i.get_period();
@@ -38,8 +38,8 @@ void BCLGedf::beta(const Task &t_i, const Task &t_k, mpq_class &beta_i)
38 38
39bool BCLGedf::is_task_schedulable(unsigned int k, const TaskSet &ts) 39bool BCLGedf::is_task_schedulable(unsigned int k, const TaskSet &ts)
40{ 40{
41 mpq_class beta_i, beta_sum = 0; 41 fractional_t beta_i, beta_sum = 0;
42 mpq_class lambda_term; 42 fractional_t lambda_term;
43 bool small_beta_exists = false; 43 bool small_beta_exists = false;
44 44
45 ts[k].get_density(lambda_term); 45 ts[k].get_density(lambda_term);
diff --git a/native/src/edf/bcl_iterative.cpp b/native/src/edf/bcl_iterative.cpp
index e70c0c4..b8e58ef 100644
--- a/native/src/edf/bcl_iterative.cpp
+++ b/native/src/edf/bcl_iterative.cpp
@@ -11,7 +11,7 @@ using namespace std;
11static void interfering_workload(const Task &t_i, 11static void interfering_workload(const Task &t_i,
12 const Task &t_k, 12 const Task &t_k,
13 unsigned long slack, 13 unsigned long slack,
14 mpz_class &inf) 14 integral_t &inf)
15{ 15{
16 unsigned long njobs = t_k.get_deadline() / t_i.get_period(); 16 unsigned long njobs = t_k.get_deadline() / t_i.get_period();
17 17
@@ -30,9 +30,9 @@ bool BCLIterativeGedf::slack_update(unsigned int k,
30 unsigned long *slack, 30 unsigned long *slack,
31 bool &has_slack) 31 bool &has_slack)
32{ 32{
33 mpz_class other_work = 0; 33 integral_t other_work = 0;
34 mpz_class inf; 34 integral_t inf;
35 mpz_class inf_bound = ts[k].get_deadline() - ts[k].get_wcet() + 1; 35 integral_t inf_bound = ts[k].get_deadline() - ts[k].get_wcet() + 1;
36 36
37 for (unsigned int i = 0; i < ts.get_task_count(); i++) 37 for (unsigned int i = 0; i < ts.get_task_count(); i++)
38 if (k != i) 38 if (k != i)
diff --git a/native/src/edf/ffdbf.cpp b/native/src/edf/ffdbf.cpp
index a28ea38..fa64b96 100644
--- a/native/src/edf/ffdbf.cpp
+++ b/native/src/edf/ffdbf.cpp
@@ -13,8 +13,8 @@
13 13
14using namespace std; 14using namespace std;
15 15
16static void get_q_r(const Task &t_i, const mpq_class &time, 16static void get_q_r(const Task &t_i, const fractional_t &time,
17 mpz_class &q_i, mpq_class &r_i) 17 integral_t &q_i, fractional_t &r_i)
18{ 18{
19 // compute q_i -- floor(time / period) 19 // compute q_i -- floor(time / period)
20 // r_i -- time % period 20 // r_i -- time % period
@@ -26,18 +26,18 @@ static void get_q_r(const Task &t_i, const mpq_class &time,
26 r_i -= q_i * t_i.get_period(); 26 r_i -= q_i * t_i.get_period();
27} 27}
28 28
29static void compute_q_r(const TaskSet &ts, const mpq_class &time, 29static void compute_q_r(const TaskSet &ts, const fractional_t &time,
30 mpz_class q[], mpq_class r[]) 30 integral_t q[], fractional_t r[])
31{ 31{
32 for (unsigned int i = 0; i < ts.get_task_count(); i++) 32 for (unsigned int i = 0; i < ts.get_task_count(); i++)
33 get_q_r(ts[i], time, q[i], r[i]); 33 get_q_r(ts[i], time, q[i], r[i]);
34} 34}
35 35
36static void ffdbf(const Task &t_i, 36static void ffdbf(const Task &t_i,
37 const mpq_class &time, const mpq_class &speed, 37 const fractional_t &time, const fractional_t &speed,
38 const mpz_class &q_i, const mpq_class &r_i, 38 const integral_t &q_i, const fractional_t &r_i,
39 mpq_class &demand, 39 fractional_t &demand,
40 mpq_class &tmp) 40 fractional_t &tmp)
41{ 41{
42 /* this is the cost in all three cases */ 42 /* this is the cost in all three cases */
43 demand += q_i * t_i.get_wcet(); 43 demand += q_i * t_i.get_wcet();
@@ -64,9 +64,9 @@ static void ffdbf(const Task &t_i,
64} 64}
65 65
66static void ffdbf_ts(const TaskSet &ts, 66static void ffdbf_ts(const TaskSet &ts,
67 const mpz_class q[], const mpq_class r[], 67 const integral_t q[], const fractional_t r[],
68 const mpq_class &time, const mpq_class &speed, 68 const fractional_t &time, const fractional_t &speed,
69 mpq_class &demand, mpq_class &tmp) 69 fractional_t &demand, fractional_t &tmp)
70{ 70{
71 demand = 0; 71 demand = 0;
72 for (unsigned int i = 0; i < ts.get_task_count(); i++) 72 for (unsigned int i = 0; i < ts.get_task_count(); i++)
@@ -77,15 +77,15 @@ static void ffdbf_ts(const TaskSet &ts,
77class TestPoints 77class TestPoints
78{ 78{
79private: 79private:
80 mpq_class time; 80 fractional_t time;
81 mpq_class with_offset; 81 fractional_t with_offset;
82 unsigned long period; 82 unsigned long period;
83 bool first_point; 83 bool first_point;
84 84
85public: 85public:
86 void init(const Task& t_i, 86 void init(const Task& t_i,
87 const mpq_class& speed, 87 const fractional_t& speed,
88 const mpq_class& min_time) 88 const fractional_t& min_time)
89 { 89 {
90 period = t_i.get_period(); 90 period = t_i.get_period();
91 with_offset = t_i.get_wcet() / speed; 91 with_offset = t_i.get_wcet() / speed;
@@ -96,7 +96,7 @@ public:
96 time = min_time; 96 time = min_time;
97 time /= period; 97 time /= period;
98 // round down, i.e., floor() 98 // round down, i.e., floor()
99 mpq_truncate(time); 99 truncate_fraction(time);
100 time *= period; 100 time *= period;
101 time += t_i.get_deadline(); 101 time += t_i.get_deadline();
102 102
@@ -107,7 +107,7 @@ public:
107 next(); 107 next();
108 } 108 }
109 109
110 const mpq_class& get_cur() const 110 const fractional_t& get_cur() const
111 { 111 {
112 if (first_point) 112 if (first_point)
113 return with_offset; 113 return with_offset;
@@ -145,7 +145,7 @@ class AllTestPoints
145private: 145private:
146 TestPoints *pts; 146 TestPoints *pts;
147 TimeQueue queue; 147 TimeQueue queue;
148 mpq_class last; 148 fractional_t last;
149 TaskSet const &ts; 149 TaskSet const &ts;
150 150
151public: 151public:
@@ -155,8 +155,8 @@ public:
155 pts = new TestPoints[ts.get_task_count()]; 155 pts = new TestPoints[ts.get_task_count()];
156 } 156 }
157 157
158 void init(const mpq_class &speed, 158 void init(const fractional_t &speed,
159 const mpq_class &min_time) 159 const fractional_t &min_time)
160 { 160 {
161 last = -1; 161 last = -1;
162 // clean out queue 162 // clean out queue
@@ -175,7 +175,7 @@ public:
175 delete[] pts; 175 delete[] pts;
176 } 176 }
177 177
178 void get_next(mpq_class &t) 178 void get_next(fractional_t &t)
179 { 179 {
180 TestPoints* pt; 180 TestPoints* pt;
181 do // avoid duplicates 181 do // avoid duplicates
@@ -191,11 +191,11 @@ public:
191}; 191};
192 192
193bool FFDBFGedf::witness_condition(const TaskSet &ts, 193bool FFDBFGedf::witness_condition(const TaskSet &ts,
194 const mpz_class q[], const mpq_class r[], 194 const integral_t q[], const fractional_t r[],
195 const mpq_class &time, 195 const fractional_t &time,
196 const mpq_class &speed) 196 const fractional_t &speed)
197{ 197{
198 mpq_class demand, bound; 198 fractional_t demand, bound;
199 199
200 ffdbf_ts(ts, q, r, time, speed, demand, bound); 200 ffdbf_ts(ts, q, r, time, speed, demand, bound);
201 201
@@ -223,12 +223,12 @@ bool FFDBFGedf::is_schedulable(const TaskSet &ts,
223 223
224 // allocate helpers 224 // allocate helpers
225 AllTestPoints testing_set(ts); 225 AllTestPoints testing_set(ts);
226 mpz_class *q = new mpz_class[ts.get_task_count()]; 226 integral_t *q = new integral_t[ts.get_task_count()];
227 mpq_class *r = new mpq_class[ts.get_task_count()]; 227 fractional_t *r = new fractional_t[ts.get_task_count()];
228 228
229 mpq_class sigma_bound; 229 fractional_t sigma_bound;
230 mpq_class time_bound; 230 fractional_t time_bound;
231 mpq_class tmp(1, epsilon_denom); 231 fractional_t tmp(1, epsilon_denom);
232 232
233 // compute sigma bound 233 // compute sigma bound
234 tmp = 1; 234 tmp = 1;
@@ -237,7 +237,7 @@ bool FFDBFGedf::is_schedulable(const TaskSet &ts,
237 sigma_bound -= m; 237 sigma_bound -= m;
238 sigma_bound /= - ((int) (m - 1)); // neg. to flip sign 238 sigma_bound /= - ((int) (m - 1)); // neg. to flip sign
239 sigma_bound -= tmp; // epsilon 239 sigma_bound -= tmp; // epsilon
240 sigma_bound = min(sigma_bound, mpq_class(1)); 240 sigma_bound = min(sigma_bound, fractional_t(1));
241 241
242 // compute time bound 242 // compute time bound
243 time_bound = 0; 243 time_bound = 0;
@@ -245,8 +245,8 @@ bool FFDBFGedf::is_schedulable(const TaskSet &ts,
245 time_bound += ts[i].get_wcet(); 245 time_bound += ts[i].get_wcet();
246 time_bound /= tmp; // epsilon 246 time_bound /= tmp; // epsilon
247 247
248 mpq_class t_cur; 248 fractional_t t_cur;
249 mpq_class sigma_cur, sigma_nxt; 249 fractional_t sigma_cur, sigma_nxt;
250 bool schedulable; 250 bool schedulable;
251 251
252 t_cur = 0; 252 t_cur = 0;
@@ -258,7 +258,7 @@ bool FFDBFGedf::is_schedulable(const TaskSet &ts,
258 258
259 // setup brute force sigma value range 259 // setup brute force sigma value range
260 sigma_nxt = sigma_cur / sigma_step; 260 sigma_nxt = sigma_cur / sigma_step;
261 mpq_truncate(sigma_nxt); 261 truncate_fraction(sigma_nxt);
262 sigma_nxt += 1; 262 sigma_nxt += 1;
263 sigma_nxt *= sigma_step; 263 sigma_nxt *= sigma_step;
264 264
diff --git a/native/src/edf/gedf.cpp b/native/src/edf/gedf.cpp
index 35f1847..e2a6bec 100644
--- a/native/src/edf/gedf.cpp
+++ b/native/src/edf/gedf.cpp
@@ -26,7 +26,7 @@ bool GlobalEDF::is_schedulable(const TaskSet &ts,
26 // density bound on a uniprocessor. 26 // density bound on a uniprocessor.
27 if (m == 1) 27 if (m == 1)
28 { 28 {
29 mpq_class density; 29 fractional_t density;
30 ts.get_density(density); 30 ts.get_density(density);
31 if (density <= 1) 31 if (density <= 1)
32 return true; 32 return true;
diff --git a/native/src/edf/gfb.cpp b/native/src/edf/gfb.cpp
index 0aa90b8..822b97b 100644
--- a/native/src/edf/gfb.cpp
+++ b/native/src/edf/gfb.cpp
@@ -13,7 +13,7 @@ bool GFBGedf::is_schedulable(const TaskSet &ts, bool check_preconditions)
13 return false; 13 return false;
14 } 14 }
15 15
16 mpq_class total_density, max_density, bound; 16 fractional_t total_density, max_density, bound;
17 17
18 ts.get_density(total_density); 18 ts.get_density(total_density);
19 ts.get_max_density(max_density); 19 ts.get_max_density(max_density);
diff --git a/native/src/edf/load.cpp b/native/src/edf/load.cpp
index 38d3c55..db44d20 100644
--- a/native/src/edf/load.cpp
+++ b/native/src/edf/load.cpp
@@ -22,8 +22,8 @@ bool LoadGedf::is_schedulable(const TaskSet &ts, bool check_preconditions)
22 return false; 22 return false;
23 } 23 }
24 24
25 mpq_class load, max_density, mu, bound, cond1, cond2; 25 fractional_t load, max_density, mu, bound, cond1, cond2;
26 mpz_class mu_ceil; 26 integral_t mu_ceil;
27 27
28 // get the load of the task set 28 // get the load of the task set
29 ts.approx_load(load, epsilon); 29 ts.approx_load(load, epsilon);
diff --git a/native/src/edf/rta.cpp b/native/src/edf/rta.cpp
index 68eafa6..4114467 100644
--- a/native/src/edf/rta.cpp
+++ b/native/src/edf/rta.cpp
@@ -15,8 +15,8 @@ using namespace std;
15static void rta_interfering_workload(const Task &t_i, 15static void rta_interfering_workload(const Task &t_i,
16 unsigned long response_time, 16 unsigned long response_time,
17 unsigned long slack_i, 17 unsigned long slack_i,
18 mpz_class &inf, 18 integral_t &inf,
19 mpz_class &interval) 19 integral_t &interval)
20{ 20{
21 interval = response_time; 21 interval = response_time;
22 interval += t_i.get_deadline() - t_i.get_wcet(); 22 interval += t_i.get_deadline() - t_i.get_wcet();
@@ -36,7 +36,7 @@ static void rta_interfering_workload(const Task &t_i,
36static void edf_interfering_workload(const Task &t_i, 36static void edf_interfering_workload(const Task &t_i,
37 const Task &t_k, 37 const Task &t_k,
38 unsigned long slack_i, 38 unsigned long slack_i,
39 mpz_class &inf) 39 integral_t &inf)
40{ 40{
41 /* implicit floor in integer division */ 41 /* implicit floor in integer division */
42 unsigned long njobs = t_k.get_deadline() / t_i.get_period(); 42 unsigned long njobs = t_k.get_deadline() / t_i.get_period();
@@ -56,11 +56,11 @@ bool RTAGedf::response_estimate(unsigned int k,
56 unsigned long response, 56 unsigned long response,
57 unsigned long &new_response) 57 unsigned long &new_response)
58{ 58{
59 mpz_class other_work = 0; 59 integral_t other_work = 0;
60 mpz_class inf_edf; 60 integral_t inf_edf;
61 mpz_class inf_rta; 61 integral_t inf_rta;
62 mpz_class inf_bound = response - ts[k].get_wcet() + 1; 62 integral_t inf_bound = response - ts[k].get_wcet() + 1;
63 mpz_class tmp; 63 integral_t tmp;
64 64
65 for (unsigned int i = 0; i < ts.get_task_count(); i++) 65 for (unsigned int i = 0; i < ts.get_task_count(); i++)
66 if (k != i) 66 if (k != i)
diff --git a/native/src/sharedres.cpp b/native/src/sharedres.cpp
index 7b61fc3..a691ef9 100644
--- a/native/src/sharedres.cpp
+++ b/native/src/sharedres.cpp
@@ -7,7 +7,7 @@
7#include "sharedres.h" 7#include "sharedres.h"
8#include "res_io.h" 8#include "res_io.h"
9 9
10#include <gmpxx.h> 10#include "time-types.h"
11#include "math-helper.h" 11#include "math-helper.h"
12 12
13#include "stl-helper.h" 13#include "stl-helper.h"
diff --git a/native/src/tasks.cpp b/native/src/tasks.cpp
index 9875b65..1d784bf 100644
--- a/native/src/tasks.cpp
+++ b/native/src/tasks.cpp
@@ -37,14 +37,14 @@ bool Task::is_feasible() const
37 && get_wcet() > 0; 37 && get_wcet() > 0;
38} 38}
39 39
40void Task::get_utilization(mpq_class &util) const 40void Task::get_utilization(fractional_t &util) const
41{ 41{
42 // assumes period != 0 42 // assumes period != 0
43 util = get_wcet(); 43 util = get_wcet();
44 util /= get_period(); 44 util /= get_period();
45} 45}
46 46
47void Task::get_density(mpq_class &density) const 47void Task::get_density(fractional_t &density) const
48{ 48{
49 // assumes deadline != 0 49 // assumes deadline != 0
50 density = get_wcet(); 50 density = get_wcet();
@@ -95,9 +95,9 @@ bool TaskSet::has_only_feasible_tasks() const
95 FORALL(i, tasks[i].is_feasible()); 95 FORALL(i, tasks[i].is_feasible());
96} 96}
97 97
98void TaskSet::get_utilization(mpq_class &util) const 98void TaskSet::get_utilization(fractional_t &util) const
99{ 99{
100 mpq_class tmp; 100 fractional_t tmp;
101 util = 0; 101 util = 0;
102 for (unsigned int i = 0; i < tasks.size(); i++) 102 for (unsigned int i = 0; i < tasks.size(); i++)
103 { 103 {
@@ -106,9 +106,9 @@ void TaskSet::get_utilization(mpq_class &util) const
106 } 106 }
107} 107}
108 108
109void TaskSet::get_density(mpq_class &density) const 109void TaskSet::get_density(fractional_t &density) const
110{ 110{
111 mpq_class tmp; 111 fractional_t tmp;
112 density = 0; 112 density = 0;
113 for (unsigned int i = 0; i < tasks.size(); i++) 113 for (unsigned int i = 0; i < tasks.size(); i++)
114 { 114 {
@@ -117,9 +117,9 @@ void TaskSet::get_density(mpq_class &density) const
117 } 117 }
118} 118}
119 119
120void TaskSet::get_max_density(mpq_class &max_density) const 120void TaskSet::get_max_density(fractional_t &max_density) const
121{ 121{
122 mpq_class tmp; 122 fractional_t tmp;
123 max_density = 0; 123 max_density = 0;
124 124
125 for (unsigned int i = 0; i < tasks.size(); i++) 125 for (unsigned int i = 0; i < tasks.size(); i++)
@@ -131,17 +131,17 @@ void TaskSet::get_max_density(mpq_class &max_density) const
131 131
132bool TaskSet::is_not_overutilized(unsigned int num_processors) const 132bool TaskSet::is_not_overutilized(unsigned int num_processors) const
133{ 133{
134 mpq_class util; 134 fractional_t util;
135 get_utilization(util); 135 get_utilization(util);
136 return util <= num_processors; 136 return util <= num_processors;
137} 137}
138 138
139// Lemma 7 in FBB:06. 139// Lemma 7 in FBB:06.
140unsigned long TaskSet::k_for_epsilon(unsigned int idx, 140unsigned long TaskSet::k_for_epsilon(unsigned int idx,
141 const mpq_class &epsilon) const 141 const fractional_t &epsilon) const
142{ 142{
143 mpq_class bound; 143 fractional_t bound;
144 mpq_class dp_ratio(tasks[idx].get_deadline(), 144 fractional_t dp_ratio(tasks[idx].get_deadline(),
145 tasks[idx].get_period()); 145 tasks[idx].get_period());
146 146
147 tasks[idx].get_utilization(bound); 147 tasks[idx].get_utilization(bound);
@@ -152,9 +152,9 @@ unsigned long TaskSet::k_for_epsilon(unsigned int idx,
152 return (unsigned long) ceil(std::max(0.0, bound.get_d())); 152 return (unsigned long) ceil(std::max(0.0, bound.get_d()));
153} 153}
154 154
155void TaskSet::approx_load(mpq_class &load, const mpq_class &epsilon) const 155void TaskSet::approx_load(fractional_t &load, const fractional_t &epsilon) const
156{ 156{
157 mpq_class density; 157 fractional_t density;
158 158
159 get_density(density); 159 get_density(density);
160 get_utilization(load); 160 get_utilization(load);
@@ -177,13 +177,13 @@ void TaskSet::approx_load(mpq_class &load, const mpq_class &epsilon) const
177 177
178 std::cout << "total_times = " << total_times << std::endl; 178 std::cout << "total_times = " << total_times << std::endl;
179 179
180 std::vector<mpz_class> times; 180 std::vector<integral_t> times;
181 times.reserve(total_times); 181 times.reserve(total_times);
182 182
183 // determine all test points 183 // determine all test points
184 for (unsigned int i = 0; i < tasks.size(); i++) 184 for (unsigned int i = 0; i < tasks.size(); i++)
185 { 185 {
186 mpz_class time = tasks[i].get_deadline(); 186 integral_t time = tasks[i].get_deadline();
187 187
188 for (unsigned long j = 0; j <= k[i]; j++) 188 for (unsigned long j = 0; j <= k[i]; j++)
189 { 189 {
@@ -196,15 +196,15 @@ void TaskSet::approx_load(mpq_class &load, const mpq_class &epsilon) const
196 std::sort(times.begin(), times.end()); 196 std::sort(times.begin(), times.end());
197 197
198 // iterate through test points 198 // iterate through test points
199 mpz_class last = 0; 199 integral_t last = 0;
200 200
201 for (unsigned int t = 0; t < total_times; t++) 201 for (unsigned int t = 0; t < total_times; t++)
202 { 202 {
203 // avoid redundant check 203 // avoid redundant check
204 if (times[t] > last) 204 if (times[t] > last)
205 { 205 {
206 mpq_class load_at_point = 0; 206 fractional_t load_at_point = 0;
207 mpq_class tmp; 207 fractional_t tmp;
208 208
209 // compute approximate load at point 209 // compute approximate load at point
210 for (unsigned int i = 0; i < tasks.size(); i++) 210 for (unsigned int i = 0; i < tasks.size(); i++)
diff --git a/native/src/testmain.cpp b/native/src/testmain.cpp
index eeeb96b..7401491 100644
--- a/native/src/testmain.cpp
+++ b/native/src/testmain.cpp
@@ -499,7 +499,7 @@ int xxxmain(int argc, char** argv)
499{ 499{
500 cout << "GMP C++ test." << endl; 500 cout << "GMP C++ test." << endl;
501 501
502 mpz_class a, b; 502 integral_t a, b;
503 503
504 a = "123123123123"; 504 a = "123123123123";
505 b = "456456456456"; 505 b = "456456456456";
@@ -508,12 +508,12 @@ int xxxmain(int argc, char** argv)
508 cout << "b : " << b << endl; 508 cout << "b : " << b << endl;
509 cout << "a*b*10: " << a * b * 10 << endl; 509 cout << "a*b*10: " << a * b * 10 << endl;
510 510
511 mpq_class q = a; 511 fractional_t q = a;
512 512
513 q /= b; 513 q /= b;
514 cout << "a/b :" << q << endl; 514 cout << "a/b :" << q << endl;
515 515
516 mpz_class fact; 516 integral_t fact;
517 fact = 1; 517 fact = 1;
518 for (int n = 2; n < 101; n++) { 518 for (int n = 2; n < 101; n++) {
519 fact *= n; 519 fact *= n;
@@ -529,7 +529,7 @@ int xxxmain(int argc, char** argv)
529 << " deadline: " << t.get_deadline() << endl; 529 << " deadline: " << t.get_deadline() << endl;
530 530
531 531
532 mpq_class lambda, bound; 532 fractional_t lambda, bound;
533 unsigned int m = 10; 533 unsigned int m = 10;
534 534
535 lambda = 3; 535 lambda = 3;
@@ -654,8 +654,8 @@ int yymain(int argc, char** argv)
654 654
655int main4(int argc, char** argv) 655int main4(int argc, char** argv)
656{ 656{
657 mpq_class a, b; 657 fractional_t a, b;
658 mpz_class c; 658 integral_t c;
659 659
660 a = 20; 660 a = 20;
661 a /= 3; 661 a /= 3;
@@ -668,7 +668,7 @@ int main4(int argc, char** argv)
668 668
669 cout << c << endl; 669 cout << c << endl;
670 670
671 mpq_truncate(b); 671 truncate_fraction(b);
672 cout << b << endl; 672 cout << b << endl;
673 673
674 return 0; 674 return 0;