]>
Commit | Line | Data |
---|---|---|
5cc8c731 | 1 | /* std::unique_ptr specializations for GDB. |
da804164 | 2 | |
42a4f53d | 3 | Copyright (C) 2016-2019 Free Software Foundation, Inc. |
da804164 PA |
4 | |
5 | This file is part of GDB. | |
6 | ||
7 | This program 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 of the License, or | |
10 | (at your option) any later version. | |
11 | ||
12 | This program 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 | |
18 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ | |
19 | ||
1a5c2598 TT |
20 | #ifndef COMMON_GDB_UNIQUE_PTR_H |
21 | #define COMMON_GDB_UNIQUE_PTR_H | |
da804164 PA |
22 | |
23 | #include <memory> | |
24 | ||
25 | namespace gdb | |
26 | { | |
5cc8c731 | 27 | /* Define gdb::unique_xmalloc_ptr, a std::unique_ptr that manages |
da804164 PA |
28 | xmalloc'ed memory. */ |
29 | ||
5cc8c731 | 30 | /* The deleter for std::unique_xmalloc_ptr. Uses xfree. */ |
da804164 PA |
31 | template <typename T> |
32 | struct xfree_deleter | |
33 | { | |
34 | void operator() (T *ptr) const { xfree (ptr); } | |
35 | }; | |
36 | ||
e7c9de26 PA |
37 | /* Same, for arrays. */ |
38 | template <typename T> | |
39 | struct xfree_deleter<T[]> | |
40 | { | |
41 | void operator() (T *ptr) const { xfree (ptr); } | |
42 | }; | |
43 | ||
5cc8c731 PA |
44 | /* Import the standard unique_ptr to our namespace with a custom |
45 | deleter. */ | |
da804164 PA |
46 | |
47 | template<typename T> using unique_xmalloc_ptr | |
48 | = std::unique_ptr<T, xfree_deleter<T>>; | |
49 | ||
31930bd3 TT |
50 | /* A no-op deleter. */ |
51 | template<typename T> | |
52 | struct noop_deleter | |
53 | { | |
54 | void operator() (T *ptr) const { } | |
55 | }; | |
56 | ||
da804164 PA |
57 | } /* namespace gdb */ |
58 | ||
1a5c2598 | 59 | #endif /* COMMON_GDB_UNIQUE_PTR_H */ |