GNU Radio Manual and C++ API Reference
3.8.1.0
The Free & Open Software Radio Ecosystem
pmt_pool.h
Go to the documentation of this file.
1
/* -*- c++ -*- */
2
/*
3
* Copyright 2007,2009,2013 Free Software Foundation, Inc.
4
*
5
* This file is part of GNU Radio
6
*
7
* GNU Radio is free software; you can redistribute it and/or modify
8
* it under the terms of the GNU General Public License as published by
9
* the Free Software Foundation; either version 3, or (at your option)
10
* any later version.
11
*
12
* GNU Radio is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU General Public License for more details.
16
*
17
* You should have received a copy of the GNU General Public License along
18
* with this program; if not, write to the Free Software Foundation, Inc.,
19
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20
*/
21
#ifndef INCLUDED_PMT_POOL_H
22
#define INCLUDED_PMT_POOL_H
23
24
#include <
pmt/api.h
>
25
#include <boost/thread.hpp>
26
#include <cstddef>
27
#include <vector>
28
29
namespace
pmt
{
30
31
/*!
32
* \brief very simple thread-safe fixed-size allocation pool
33
*
34
* FIXME may want to go to global allocation with per-thread free list.
35
* This would eliminate virtually all lock contention.
36
*/
37
class
PMT_API
pmt_pool
38
{
39
40
struct
PMT_API
item {
41
struct
item* d_next;
42
};
43
44
typedef
boost::unique_lock<boost::mutex>
scoped_lock
;
45
mutable
boost::mutex
d_mutex;
46
boost::condition_variable
d_cond;
47
48
size_t
d_itemsize;
49
size_t
d_alignment;
50
size_t
d_allocation_size;
51
size_t
d_max_items;
52
size_t
d_n_items;
53
item* d_freelist;
54
std::vector<char*> d_allocations;
55
56
public
:
57
/*!
58
* \param itemsize size in bytes of the items to be allocated.
59
* \param alignment alignment in bytes of all objects to be allocated (must be
60
*power-of-2). \param allocation_size number of bytes to allocate at a time from the
61
*underlying allocator. \param max_items is the maximum number of items to allocate.
62
*If this number is exceeded, the allocate blocks. 0 implies no limit.
63
*/
64
pmt_pool
(
size_t
itemsize
,
65
size_t
alignment = 16,
66
size_t
allocation_size = 4096,
67
size_t
max_items = 0);
68
~
pmt_pool
();
69
70
void
* malloc();
71
void
free
(
void
* p);
72
};
73
74
}
/* namespace pmt */
75
76
#endif
/* INCLUDED_PMT_POOL_H */
gr::blocks::pdu::itemsize
BLOCKS_API size_t itemsize(vector_type type)
gr::fft::free
FFT_API void free(void *b)
Helper function for freeing fft buffers.
gr::thread::condition_variable
boost::condition_variable condition_variable
Definition:
thread.h:50
PMT_API
#define PMT_API
Definition:
gnuradio-runtime/include/pmt/api.h:30
api.h
gr::thread::mutex
boost::mutex mutex
Definition:
thread.h:48
pmt::pmt_pool
very simple thread-safe fixed-size allocation pool
Definition:
pmt_pool.h:37
gr::thread::scoped_lock
boost::unique_lock< boost::mutex > scoped_lock
Definition:
thread.h:49
pmt
Definition:
pmt.h:51
gnuradio-runtime
include
pmt
pmt_pool.h
Generated by
1.8.16