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
85
utils::EventFD
mEventFD
;
86
};
87
88
template
<
typename
MessageType>
89
int
EventQueue<MessageType>::getFD
()
const
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>
104
MessageType
EventQueue<MessageType>::receive
()
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>
115
bool
EventQueue<MessageType>::isEmpty
()
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
cargo::ipc::EventQueue
This class implements a simple FIFO queue of events.
Definition:
event-queue.hpp:47
cargo::ipc::EventQueue::~EventQueue
~EventQueue()=default
cargo::ipc::EventQueue::EventQueue
EventQueue()=default
cargo::ipc::EventQueue::getFD
int getFD() const
Definition:
event-queue.hpp:89
cargo::ipc::EventQueue::receive
MessageType receive()
Receives the event.
Definition:
event-queue.hpp:104
cargo::ipc::EventQueue::Lock
std::lock_guard< std::mutex > Lock
Definition:
event-queue.hpp:80
logger.hpp
utils::EventFD
Definition:
eventfd.hpp:30
cargo::ipc::EventQueue::mEventFD
utils::EventFD mEventFD
Definition:
event-queue.hpp:85
cargo::ipc::EventQueue::operator=
EventQueue & operator=(const EventQueue &)=delete
cargo::ipc::EventQueue::mCommunicationMutex
std::mutex mCommunicationMutex
Definition:
event-queue.hpp:82
cargo::ipc::EventQueue::isEmpty
bool isEmpty()
Definition:
event-queue.hpp:115
LOGT
#define LOGT(MESSAGE)
Logging tracing information.
Definition:
logger.hpp:156
cargo::ipc::EventQueue::mMessages
std::queue< MessageType > mMessages
Definition:
event-queue.hpp:83
exception.hpp
Exceptions for the IPC.
cargo::ipc::EventQueue::send
void send(const MessageType &message)
Send an event.
Definition:
event-queue.hpp:95
eventfd.hpp
Eventfd wrapper.
libs
cargo-ipc
internals
event-queue.hpp
Generated on Fri Dec 4 2015 11:36:47 for Vasum by
1.8.6