25 #ifndef CARGO_IPC_INTERNALS_REQUEST_QUEUE_HPP
26 #define CARGO_IPC_INTERNALS_REQUEST_QUEUE_HPP
43 template<
typename RequestIdType>
57 : requestID(requestID),
61 template<
typename DataType>
62 std::shared_ptr<DataType>
get()
64 return std::static_pointer_cast<DataType>(
data);
68 std::shared_ptr<void>
data;
87 void pushBack(
const RequestIdType requestID,
88 const std::shared_ptr<void>&
data =
nullptr);
96 void pushFront(
const RequestIdType requestID,
97 const std::shared_ptr<void>&
data =
nullptr);
110 template<
typename Predicate>
114 typedef std::unique_lock<std::mutex>
Lock;
121 template<
typename RequestIdType>
124 Lock lock(mStateMutex);
125 return mEventFD.getFD();
128 template<
typename RequestIdType>
131 Lock lock(mStateMutex);
132 return mRequests.empty();
135 template<
typename RequestIdType>
137 const std::shared_ptr<void>&
data)
139 Lock lock(mStateMutex);
140 Request request(requestID, data);
141 mRequests.push_back(std::move(request));
145 template<
typename RequestIdType>
147 const std::shared_ptr<void>&
data)
149 Lock lock(mStateMutex);
150 Request request(requestID, data);
151 mRequests.push_front(std::move(request));
155 template<
typename RequestIdType>
158 Lock lock(mStateMutex);
160 if (mRequests.empty()) {
161 const std::string msg =
"Request queue is empty";
165 Request request = std::move(mRequests.front());
166 mRequests.pop_front();
170 template<
typename RequestIdType>
171 template<
typename Predicate>
174 Lock lock(mStateMutex);
175 auto it = std::find_if(mRequests.begin(), mRequests.end(), predicate);
176 if (it == mRequests.end()) {
181 it = mRequests.erase(it);
182 it = std::find_if(it, mRequests.end(), predicate);
183 }
while (it != mRequests.end());
190 #endif // CARGO_IPC_INTERNALS_REQUEST_QUEUE_HPP
void pushFront(const RequestIdType requestID, const std::shared_ptr< void > &data=nullptr)
Push data to back of the queue.
Definition: request-queue.hpp:146
RequestQueue & operator=(const RequestQueue &)=delete
Class for managing a queue of Requests carrying any data.
Definition: request-queue.hpp:44
#define LOGE(MESSAGE)
Logging errors.
Definition: logger.hpp:140
int getFD()
Definition: request-queue.hpp:122
std::mutex mStateMutex
Definition: request-queue.hpp:117
void pushBack(const RequestIdType requestID, const std::shared_ptr< void > &data=nullptr)
Push data to back of the queue.
Definition: request-queue.hpp:136
Definition: eventfd.hpp:30
Definition: request-queue.hpp:51
char data[368]
Definition: initctl.cpp:41
Request(const Request &other)=delete
bool isEmpty()
Definition: request-queue.hpp:129
std::unique_lock< std::mutex > Lock
Definition: request-queue.hpp:114
Request(const RequestIdType requestID, const std::shared_ptr< void > &data)
Definition: request-queue.hpp:56
Request pop()
Definition: request-queue.hpp:156
utils::EventFD mEventFD
Definition: request-queue.hpp:118
Definition: exception.hpp:39
RequestIdType requestID
Definition: request-queue.hpp:67
Request & operator=(const Request &)=delete
bool removeIf(Predicate predicate)
Remove elements from the queue when the predicate returns true.
Definition: request-queue.hpp:172
std::shared_ptr< void > data
Definition: request-queue.hpp:68
std::list< Request > mRequests
Definition: request-queue.hpp:116