leideng's picture
download
raw
1.29 kB
#pragma once
#include <condition_variable>
#include <queue>
namespace utils {
template <typename T>
class Queue {
public:
bool enqueue(T&& rhs) {
{
std::lock_guard<std::mutex> lock(mutex_);
if (closed_) {
return false;
}
queue_.emplace(std::move(rhs));
}
cv_.notify_one();
return true;
}
bool enqueue(const T& rhs) {
{
std::lock_guard<std::mutex> lock(mutex_);
if (closed_) {
return false;
}
queue_.emplace(rhs);
}
cv_.notify_one();
return true;
}
bool dequeue(T& rhs) {
std::unique_lock<std::mutex> lock(mutex_);
cv_.wait(lock, [this] { return queue_.size() || closed_; });
if (closed_) {
return false;
}
rhs = std::move(queue_.front());
queue_.pop();
return true;
}
size_t size() const {
std::lock_guard<std::mutex> lock(mutex_);
return queue_.size();
}
bool empty() const {
std::lock_guard<std::mutex> lock(mutex_);
return queue_.empty();
}
void close() {
{
std::lock_guard<std::mutex> lock(mutex_);
closed_ = true;
}
cv_.notify_all();
}
private:
std::queue<T> queue_;
mutable std::mutex mutex_;
std::condition_variable cv_;
bool closed_{false};
};
} // namespace utils

Xet Storage Details

Size:
1.29 kB
·
Xet hash:
ba2893ebddc0d35524ebdd16172ac45a2155bc97140ff964da9972ec9847ebfe

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.