GNU Radio C++ API
pmt_pool.h
Go to the documentation of this file.
1
/* -*- c++ -*- */
2
/*
3
* Copyright 2007,2009 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 <
gruel/api.h
>
25
#include <cstddef>
26
#include <vector>
27
#include <boost/thread.hpp>
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
GRUEL_API
pmt_pool
{
38
39
struct
GRUEL_API
item {
40
struct
item *d_next;
41
};
42
43
typedef
boost::unique_lock<boost::mutex>
scoped_lock
;
44
mutable
boost::mutex
d_mutex;
45
boost::condition_variable
d_cond;
46
47
size_t
d_itemsize;
48
size_t
d_alignment;
49
size_t
d_allocation_size;
50
size_t
d_max_items;
51
size_t
d_n_items;
52
item *d_freelist;
53
std::vector<char *> d_allocations;
54
55
public
:
56
/*!
57
* \param itemsize size in bytes of the items to be allocated.
58
* \param alignment alignment in bytes of all objects to be allocated (must be power-of-2).
59
* \param allocation_size number of bytes to allocate at a time from the underlying allocator.
60
* \param max_items is the maximum number of items to allocate. If this number is exceeded,
61
* the allocate blocks. 0 implies no limit.
62
*/
63
pmt_pool
(
size_t
itemsize,
size_t
alignment = 16,
64
size_t
allocation_size = 4096,
size_t
max_items = 0);
65
~
pmt_pool
();
66
67
void
*malloc();
68
void
free(
void
*p);
69
};
70
71
}
/* namespace pmt */
72
73
#endif
/* INCLUDED_PMT_POOL_H */
gruel
src
include
gruel
pmt_pool.h
Generated on Mon Jul 8 2013 17:07:43 for GNU Radio C++ API by
1.8.4