Skip to content

Commit bf946f2

Browse files
committed
Moved Channel class to separate file [skip ci]
1 parent 013c31e commit bf946f2

2 files changed

Lines changed: 42 additions & 35 deletions

File tree

‎ext/or-tools/channel.h‎

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#pragma once
2+
3+
#include <condition_variable>
4+
#include <chrono>
5+
#include <mutex>
6+
#include <optional>
7+
#include <queue>
8+
9+
template<typename T>
10+
class Channel {
11+
std::queue<T> queue;
12+
std::mutex mutex;
13+
std::condition_variable cv;
14+
15+
public:
16+
void send(T message) {
17+
std::lock_guard<std::mutex> guard(mutex);
18+
queue.push(message);
19+
cv.notify_one();
20+
}
21+
22+
template<typename U, typename V>
23+
std::optional<T> recv_timeout(const std::chrono::duration<U, V>& duration) {
24+
T message;
25+
std::unique_lock<std::mutex> lock(mutex);
26+
auto time = std::chrono::system_clock::now() + duration;
27+
if (!cv.wait_until(lock, time, [&] { return !queue.empty(); })) {
28+
return std::nullopt;
29+
}
30+
message = std::move(queue.front());
31+
queue.pop();
32+
return message;
33+
}
34+
35+
bool empty() {
36+
std::lock_guard<std::mutex> guard(mutex);
37+
return queue.empty();
38+
}
39+
};

‎ext/or-tools/constraint.cpp‎

Lines changed: 3 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
#include <atomic>
2-
#include <condition_variable>
32
#include <chrono>
4-
#include <mutex>
5-
#include <queue>
3+
#include <optional>
64
#include <string>
75
#include <vector>
86

@@ -11,6 +9,8 @@
119
#include <rice/rice.hpp>
1210
#include <rice/stl.hpp>
1311

12+
#include "channel.h"
13+
1414
using operations_research::Domain;
1515
using operations_research::sat::BoolVar;
1616
using operations_research::sat::Constraint;
@@ -78,38 +78,6 @@ namespace Rice::detail {
7878
};
7979
} // namespace Rice::detail
8080

81-
template<typename T>
82-
class Channel {
83-
std::queue<T> queue;
84-
std::mutex mutex;
85-
std::condition_variable cv;
86-
87-
public:
88-
void send(T message) {
89-
std::lock_guard<std::mutex> guard(mutex);
90-
queue.push(message);
91-
cv.notify_one();
92-
}
93-
94-
template<typename U, typename V>
95-
std::optional<T> recv_timeout(const std::chrono::duration<U, V>& duration) {
96-
T message;
97-
std::unique_lock<std::mutex> lock(mutex);
98-
auto time = std::chrono::system_clock::now() + duration;
99-
if (!cv.wait_until(lock, time, [&] { return !queue.empty(); })) {
100-
return std::nullopt;
101-
}
102-
message = std::move(queue.front());
103-
queue.pop();
104-
return message;
105-
}
106-
107-
bool empty() {
108-
std::lock_guard<std::mutex> guard(mutex);
109-
return queue.empty();
110-
}
111-
};
112-
11381
void init_constraint(Rice::Module& m) {
11482
Rice::define_class_under<Domain>(m, "Domain")
11583
.define_constructor(Rice::Constructor<Domain, int64_t, int64_t>())

0 commit comments

Comments
 (0)