GNU Radio Manual and C++ API Reference
3.8.5.0
The Free & Open Software Radio Ecosystem
Loading...
Searching...
No Matches
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 */
pmt::pmt_pool::free
void free(void *p)
pmt::pmt_pool::malloc
void * malloc()
pmt::pmt_pool::pmt_pool
pmt_pool(size_t itemsize, size_t alignment=16, size_t allocation_size=4096, size_t max_items=0)
pmt::pmt_pool::~pmt_pool
~pmt_pool()
api.h
PMT_API
#define PMT_API
Definition
gnuradio-runtime/include/pmt/api.h:30
pmt
Definition
pmt.h:51
gnuradio-3.8.5.0
gnuradio-runtime
include
pmt
pmt_pool.h
Generated by
1.14.0