iLab Neuromorphic Robotics Toolkit
0.1
Main Page
Related Pages
Modules
Namespaces
Classes
Files
Examples
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
BoundedBuffer.H
Go to the documentation of this file.
1
/*! @file
2
@author Laurent Itti
3
@copyright GNU Public License (GPL v3)
4
@section License
5
@verbatim
6
// ////////////////////////////////////////////////////////////////////////
7
// The iLab Neuromorphic Robotics Toolkit (NRT) //
8
// Copyright 2010-2012 by the University of Southern California (USC) //
9
// and the iLab at USC. //
10
// //
11
// iLab - University of Southern California //
12
// Hedco Neurociences Building, Room HNB-10 //
13
// Los Angeles, Ca 90089-2520 - USA //
14
// //
15
// See http://ilab.usc.edu for information about this project. //
16
// ////////////////////////////////////////////////////////////////////////
17
// This file is part of The iLab Neuromorphic Robotics Toolkit. //
18
// //
19
// The iLab Neuromorphic Robotics Toolkit is free software: you can //
20
// redistribute it and/or modify it under the terms of the GNU General //
21
// Public License as published by the Free Software Foundation, either //
22
// version 3 of the License, or (at your option) any later version. //
23
// //
24
// The iLab Neuromorphic Robotics Toolkit is distributed in the hope //
25
// that it will be useful, but WITHOUT ANY WARRANTY; without even the //
26
// implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
27
// PURPOSE. See the GNU General Public License for more details. //
28
// //
29
// You should have received a copy of the GNU General Public License //
30
// along with The iLab Neuromorphic Robotics Toolkit. If not, see //
31
// <http://www.gnu.org/licenses/>. //
32
// ////////////////////////////////////////////////////////////////////////
33
@endverbatim */
34
35
36
#ifndef INCLUDE_NRT_CORE_DESIGN_BOUNDEDBUFFER_H
37
#define INCLUDE_NRT_CORE_DESIGN_BOUNDEDBUFFER_H
38
39
#include <
nrt/Core/Design/Semaphore.H
>
40
#include <queue>
41
42
namespace
nrt
43
{
44
//! Thread-safe synchronized producer/consumer queue
45
/*! BoundedBuffer is designed for use in producer/consumer scenarios where multiple threads wish to push and pop data
46
onto/from the buffer asynchronously. Threads that try to pop data when the buffer is empty will sleep until data
47
is actually available, and threads that try to push data when the buffer is full will block until some space is
48
available in the buffer.
49
50
\ingroup design */
51
template
<
class
T>
52
class
BoundedBuffer
53
{
54
public
:
55
//! Create a new BoundedBuffer with no data
56
BoundedBuffer
(
size_t
const
siz);
57
58
//! Push a new data element into the buffer, potentially sleeping if buffer is full
59
void
push
(T
const
& val);
60
61
//! Pop oldest data element off of the buffer, potentially sleeping until one is available
62
T
pop
();
63
64
//! Current number of items actually in the buffer
65
size_t
const
filled_size
();
66
67
//! Max size of the buffer
68
size_t
const
size
()
const
;
69
70
private
:
71
size_t
const
itsSize;
72
std::queue<T> itsQueue;
73
nrt::Semaphore
itsEmptySemaphore, itsFullSemaphore;
74
std::mutex itsMutex;
75
};
76
}
// namespace nrt
77
78
#include <
nrt/Core/Design/details/BoundedBufferImpl.H
>
79
80
#endif // INCLUDE_NRT_CORE_DESIGN_BOUNDEDBUFFER_H
81
include
nrt
Core
Design
BoundedBuffer.H
Generated on Tue Jul 15 2014 17:09:37 for iLab Neuromorphic Robotics Toolkit by
1.8.4