Fork Vasum on GitHub Official Vasum Wiki on Tizen.org
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
event-queue.hpp
Go to the documentation of this file.
1 /*
2 * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
3 *
4 * Contact: Jan Olszak <j.olszak@samsung.com>
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License
17 */
18 
25 #ifndef CARGO_IPC_INTERNALS_EVENT_QUEUE_HPP
26 #define CARGO_IPC_INTERNALS_EVENT_QUEUE_HPP
27 
28 #include "cargo-ipc/exception.hpp"
29 #include "utils/eventfd.hpp"
30 #include "logger/logger.hpp"
31 
32 #include <string>
33 #include <mutex>
34 #include <queue>
35 
36 namespace cargo {
37 namespace ipc {
38 
39 
46 template<typename MessageType>
47 class EventQueue {
48 public:
49  EventQueue() = default;
50  ~EventQueue() = default;
51  EventQueue(const EventQueue& eventQueue) = delete;
52  EventQueue& operator=(const EventQueue&) = delete;
53 
57  int getFD() const;
58 
64  void send(const MessageType& message);
65 
72  MessageType receive();
73 
77  bool isEmpty();
78 
79 private:
80  typedef std::lock_guard<std::mutex> Lock;
81 
82  std::mutex mCommunicationMutex;
83  std::queue<MessageType> mMessages;
84 
86 };
87 
88 template<typename MessageType>
90 {
91  return mEventFD.getFD();
92 }
93 
94 template<typename MessageType>
95 void EventQueue<MessageType>::send(const MessageType& mess)
96 {
97  Lock lock(mCommunicationMutex);
98  LOGT("Sending event");
99  mMessages.push(mess);
100  mEventFD.send();
101 }
102 
103 template<typename MessageType>
105 {
106  Lock lock(mCommunicationMutex);
107  mEventFD.receive();
108  LOGT("Received event");
109  MessageType mess = mMessages.front();
110  mMessages.pop();
111  return mess;
112 }
113 
114 template<typename MessageType>
116 {
117  Lock lock(mCommunicationMutex);
118  return mMessages.empty();
119 }
120 
121 } // namespace ipc
122 } // namespace cargo
123 
124 #endif // CARGO_IPC_INTERNALS_EVENT_QUEUE_HPP
This class implements a simple FIFO queue of events.
Definition: event-queue.hpp:47
int getFD() const
Definition: event-queue.hpp:89
MessageType receive()
Receives the event.
Definition: event-queue.hpp:104
std::lock_guard< std::mutex > Lock
Definition: event-queue.hpp:80
Definition: eventfd.hpp:30
utils::EventFD mEventFD
Definition: event-queue.hpp:85
EventQueue & operator=(const EventQueue &)=delete
std::mutex mCommunicationMutex
Definition: event-queue.hpp:82
bool isEmpty()
Definition: event-queue.hpp:115
#define LOGT(MESSAGE)
Logging tracing information.
Definition: logger.hpp:156
std::queue< MessageType > mMessages
Definition: event-queue.hpp:83
Exceptions for the IPC.
void send(const MessageType &message)
Send an event.
Definition: event-queue.hpp:95
Eventfd wrapper.