mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-04-30 20:52:30 +02:00
Reformat code
This commit is contained in:
parent
3ddb370718
commit
55534ea002
140 changed files with 46068 additions and 48277 deletions
175
libi2pd/Queue.h
175
libi2pd/Queue.h
|
@ -17,117 +17,100 @@
|
|||
#include <functional>
|
||||
#include <utility>
|
||||
|
||||
namespace i2p
|
||||
{
|
||||
namespace util
|
||||
{
|
||||
template<typename Element>
|
||||
class Queue
|
||||
{
|
||||
public:
|
||||
namespace i2p {
|
||||
namespace util {
|
||||
template<typename Element>
|
||||
class Queue {
|
||||
public:
|
||||
|
||||
void Put (Element e)
|
||||
{
|
||||
std::unique_lock<std::mutex> l(m_QueueMutex);
|
||||
m_Queue.push (std::move(e));
|
||||
m_NonEmpty.notify_one ();
|
||||
}
|
||||
void Put(Element e) {
|
||||
std::unique_lock <std::mutex> l(m_QueueMutex);
|
||||
m_Queue.push(std::move(e));
|
||||
m_NonEmpty.notify_one();
|
||||
}
|
||||
|
||||
template<template<typename, typename...>class Container, typename... R>
|
||||
void Put (const Container<Element, R...>& vec)
|
||||
{
|
||||
if (!vec.empty ())
|
||||
{
|
||||
std::unique_lock<std::mutex> l(m_QueueMutex);
|
||||
for (const auto& it: vec)
|
||||
m_Queue.push (std::move(it));
|
||||
m_NonEmpty.notify_one ();
|
||||
}
|
||||
}
|
||||
template<template<typename, typename...> class Container, typename... R>
|
||||
void Put(const Container<Element, R...> &vec) {
|
||||
if (!vec.empty()) {
|
||||
std::unique_lock <std::mutex> l(m_QueueMutex);
|
||||
for (const auto &it: vec)
|
||||
m_Queue.push(std::move(it));
|
||||
m_NonEmpty.notify_one();
|
||||
}
|
||||
}
|
||||
|
||||
Element GetNext ()
|
||||
{
|
||||
std::unique_lock<std::mutex> l(m_QueueMutex);
|
||||
auto el = GetNonThreadSafe ();
|
||||
if (!el)
|
||||
{
|
||||
m_NonEmpty.wait (l);
|
||||
el = GetNonThreadSafe ();
|
||||
}
|
||||
return el;
|
||||
}
|
||||
Element GetNext() {
|
||||
std::unique_lock <std::mutex> l(m_QueueMutex);
|
||||
auto el = GetNonThreadSafe();
|
||||
if (!el) {
|
||||
m_NonEmpty.wait(l);
|
||||
el = GetNonThreadSafe();
|
||||
}
|
||||
return el;
|
||||
}
|
||||
|
||||
Element GetNextWithTimeout (int usec)
|
||||
{
|
||||
std::unique_lock<std::mutex> l(m_QueueMutex);
|
||||
auto el = GetNonThreadSafe ();
|
||||
if (!el)
|
||||
{
|
||||
m_NonEmpty.wait_for (l, std::chrono::milliseconds (usec));
|
||||
el = GetNonThreadSafe ();
|
||||
}
|
||||
return el;
|
||||
}
|
||||
Element GetNextWithTimeout(int usec) {
|
||||
std::unique_lock <std::mutex> l(m_QueueMutex);
|
||||
auto el = GetNonThreadSafe();
|
||||
if (!el) {
|
||||
m_NonEmpty.wait_for(l, std::chrono::milliseconds(usec));
|
||||
el = GetNonThreadSafe();
|
||||
}
|
||||
return el;
|
||||
}
|
||||
|
||||
void Wait ()
|
||||
{
|
||||
std::unique_lock<std::mutex> l(m_QueueMutex);
|
||||
m_NonEmpty.wait (l);
|
||||
}
|
||||
void Wait() {
|
||||
std::unique_lock <std::mutex> l(m_QueueMutex);
|
||||
m_NonEmpty.wait(l);
|
||||
}
|
||||
|
||||
bool Wait (int sec, int usec)
|
||||
{
|
||||
std::unique_lock<std::mutex> l(m_QueueMutex);
|
||||
return m_NonEmpty.wait_for (l, std::chrono::seconds (sec) + std::chrono::milliseconds (usec)) != std::cv_status::timeout;
|
||||
}
|
||||
bool Wait(int sec, int usec) {
|
||||
std::unique_lock <std::mutex> l(m_QueueMutex);
|
||||
return m_NonEmpty.wait_for(l, std::chrono::seconds(sec) + std::chrono::milliseconds(usec)) !=
|
||||
std::cv_status::timeout;
|
||||
}
|
||||
|
||||
bool IsEmpty ()
|
||||
{
|
||||
std::unique_lock<std::mutex> l(m_QueueMutex);
|
||||
return m_Queue.empty ();
|
||||
}
|
||||
bool IsEmpty() {
|
||||
std::unique_lock <std::mutex> l(m_QueueMutex);
|
||||
return m_Queue.empty();
|
||||
}
|
||||
|
||||
int GetSize ()
|
||||
{
|
||||
std::unique_lock<std::mutex> l(m_QueueMutex);
|
||||
return m_Queue.size ();
|
||||
}
|
||||
int GetSize() {
|
||||
std::unique_lock <std::mutex> l(m_QueueMutex);
|
||||
return m_Queue.size();
|
||||
}
|
||||
|
||||
void WakeUp () { m_NonEmpty.notify_all (); };
|
||||
void WakeUp() { m_NonEmpty.notify_all(); };
|
||||
|
||||
Element Get ()
|
||||
{
|
||||
std::unique_lock<std::mutex> l(m_QueueMutex);
|
||||
return GetNonThreadSafe ();
|
||||
}
|
||||
Element Get() {
|
||||
std::unique_lock <std::mutex> l(m_QueueMutex);
|
||||
return GetNonThreadSafe();
|
||||
}
|
||||
|
||||
Element Peek ()
|
||||
{
|
||||
std::unique_lock<std::mutex> l(m_QueueMutex);
|
||||
return GetNonThreadSafe (true);
|
||||
}
|
||||
Element Peek() {
|
||||
std::unique_lock <std::mutex> l(m_QueueMutex);
|
||||
return GetNonThreadSafe(true);
|
||||
}
|
||||
|
||||
private:
|
||||
private:
|
||||
|
||||
Element GetNonThreadSafe (bool peek = false)
|
||||
{
|
||||
if (!m_Queue.empty ())
|
||||
{
|
||||
auto el = m_Queue.front ();
|
||||
if (!peek)
|
||||
m_Queue.pop ();
|
||||
return el;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
Element GetNonThreadSafe(bool peek = false) {
|
||||
if (!m_Queue.empty()) {
|
||||
auto el = m_Queue.front();
|
||||
if (!peek)
|
||||
m_Queue.pop();
|
||||
return el;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
private:
|
||||
private:
|
||||
|
||||
std::queue<Element> m_Queue;
|
||||
std::mutex m_QueueMutex;
|
||||
std::condition_variable m_NonEmpty;
|
||||
};
|
||||
}
|
||||
std::queue <Element> m_Queue;
|
||||
std::mutex m_QueueMutex;
|
||||
std::condition_variable m_NonEmpty;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue