PX4 Firmware
PX4 Autopilot Software http://px4.io
BlockingQueue.hpp
Go to the documentation of this file.
1
/****************************************************************************
2
*
3
* Copyright (C) 2019 PX4 Development Team. All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
*
9
* 1. Redistributions of source code must retain the above copyright
10
* notice, this list of conditions and the following disclaimer.
11
* 2. Redistributions in binary form must reproduce the above copyright
12
* notice, this list of conditions and the following disclaimer in
13
* the documentation and/or other materials provided with the
14
* distribution.
15
* 3. Neither the name PX4 nor the names of its contributors may be
16
* used to endorse or promote products derived from this software
17
* without specific prior written permission.
18
*
19
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
22
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
23
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
24
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
25
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
26
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
27
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
29
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30
* POSSIBILITY OF SUCH DAMAGE.
31
*
32
****************************************************************************/
33
34
#pragma once
35
36
#include <px4_platform_common/sem.h>
37
38
#include "
LockGuard.hpp
"
39
40
template
<
class
T,
size_t
N>
41
class
BlockingQueue
42
{
43
public
:
44
45
BlockingQueue
()
46
{
47
px4_sem_init(&
_sem_head
, 0, N);
48
px4_sem_init(&
_sem_tail
, 0, 0);
49
}
50
51
~BlockingQueue
()
52
{
53
px4_sem_destroy(&
_sem_head
);
54
px4_sem_destroy(&
_sem_tail
);
55
}
56
57
void
push
(T newItem)
58
{
59
px4_sem_wait(&
_sem_head
);
60
61
_data
[
_tail
] = newItem;
62
_tail
= (
_tail
+ 1) % N;
63
64
px4_sem_post(&
_sem_tail
);
65
}
66
67
T
pop
()
68
{
69
px4_sem_wait(&
_sem_tail
);
70
71
T ret =
_data
[
_head
];
72
_head
= (
_head
+ 1) % N;
73
74
px4_sem_post(&
_sem_head
);
75
76
return
ret;
77
}
78
79
private
:
80
81
px4_sem_t
_sem_head
;
82
px4_sem_t
_sem_tail
;
83
84
T
_data
[N] {};
85
86
size_t
_head
{0};
87
size_t
_tail
{0};
88
89
};
BlockingQueue::_head
size_t _head
Definition:
BlockingQueue.hpp:86
BlockingQueue::~BlockingQueue
~BlockingQueue()
Definition:
BlockingQueue.hpp:51
BlockingQueue::push
void push(T newItem)
Definition:
BlockingQueue.hpp:57
BlockingQueue::BlockingQueue
BlockingQueue()
Definition:
BlockingQueue.hpp:45
LockGuard.hpp
BlockingQueue::_tail
size_t _tail
Definition:
BlockingQueue.hpp:87
BlockingQueue::pop
T pop()
Definition:
BlockingQueue.hpp:67
BlockingQueue
Definition:
BlockingQueue.hpp:41
BlockingQueue::_sem_head
px4_sem_t _sem_head
Definition:
BlockingQueue.hpp:81
BlockingQueue::_sem_tail
px4_sem_t _sem_tail
Definition:
BlockingQueue.hpp:82
BlockingQueue::_data
T _data[N]
Definition:
BlockingQueue.hpp:84
src
include
containers
BlockingQueue.hpp
Generated by
1.8.13