-
Notifications
You must be signed in to change notification settings - Fork 1
/
util.h
142 lines (129 loc) · 2.92 KB
/
util.h
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include <iostream>
#include <mutex>
#include <condition_variable>
#include <deque>
#include <vector>
#include <chrono>
#include <cstddef>
#include <math.h>
#include <string>
#include "CImg.h"
#include <cctype>
using namespace cimg_library;
template <typename T>
class queue
{
private:
std::mutex d_mutex;
std::mutex mtx;
std::condition_variable d_condition;
std::deque<T> d_queue;
public:
queue(std::string s)
{
std::cout << "Created " << s << " queue " << std::endl;
}
queue() {}
void push(T const &value)
{
{
std::unique_lock<std::mutex> lock(this->d_mutex);
d_queue.push_front(value);
}
this->d_condition.notify_one();
}
T pop()
{
std::unique_lock<std::mutex> lock(this->d_mutex);
this->d_condition.wait(lock, [=] { return !this->d_queue.empty(); });
T rc(std::move(this->d_queue.back()));
this->d_queue.pop_back();
return rc;
}
};
#define EOS NULL
class Worker
{
public:
Worker();
int start;
int end;
queue<std::pair<std::string, CImg<unsigned char> *>> tuple;
~Worker();
private:
};
Worker::Worker()
{
}
Worker::~Worker()
{
}
class FF_Worker
{
public:
FF_Worker();
int start;
int end;
~FF_Worker();
private:
};
FF_Worker::FF_Worker()
{
}
FF_Worker::~FF_Worker()
{
}
std::mutex mtx;
void shared_print(int id, double idealService, double workerTimeToPush, int totalImages, int flag)
{
std::unique_lock<std::mutex> lck(mtx);
if (flag)
std::cerr
<< "\t\tWorker : " << id << " Ideal service time : " << idealService << " msecs\n"
<< "\t\tWorker takes : " << workerTimeToPush << " msecs to send a processed image\n"
<< "\t\tRecieves total : " << totalImages << " images\n"
<< std::endl;
else
std::cerr
<< "\t\tWorker : " << id << " Ideal service time : " << idealService << " msecs\n"
<< "\t\tWorker takes : " << workerTimeToPush << " msecs to send a processed partition\n"
<< "\t\tRecieves total : " << totalImages << " portion of image\n"
<< std::endl;
}
void ff_shared_print(int id, double idealService, int totalImages, int flag)
{
std::unique_lock<std::mutex> lck(mtx);
if (flag)
std::cerr
<< "\t\tWorker : " << id << " Ideal service time : " << idealService << " msecs\n"
<< "\t\tRecieves total : " << totalImages << " images\n"
<< std::endl;
else
std::cerr
<< "\t\tWorker : " << id << " Ideal service time : " << idealService << " msecs\n"
<< "\t\tRecieves total : " << totalImages << " portion of image\n"
<< std::endl;
}
int findJPG(std::string check)
{
std::string ext = ".jpg";
if (check.length() >= ext.length())
{
return (0 == check.compare(check.length() - ext.length(), ext.length(), ext));
}
else
return 0;
}
void active_delay(int usecs)
{
auto start = std::chrono::high_resolution_clock::now();
auto end = false;
while (!end)
{
auto elapsed = std::chrono::high_resolution_clock::now() - start;
auto usec = std::chrono::duration_cast<std::chrono::microseconds>(elapsed).count();
if (usec > usecs)
end = true;
}
return;
}