1 /*
2 * Copyright (C) 1998-2015 Paul Davis <paul@linuxaudiosystems.com>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17 */
18
19 #ifndef __libmisc_stl_delete_h__
20 #define __libmisc_stl_delete_h__
21
22 #include "pbd/libpbd_visibility.h"
23
24 /* To actually use any of these deletion functions, you need to
25 first include the revelant container type header.
26 */
27 #if defined(_CPP_VECTOR) || defined(_GLIBCXX_VECTOR) || defined(__SGI_STL_VECTOR) || defined(_LIBCPP_VECTOR)
vector_delete(std::vector<T * > * vec)28 template<class T> /*LIBPBD_API*/ void vector_delete (std::vector<T *> *vec)
29 {
30 typename std::vector<T *>::iterator i;
31
32 for (i = vec->begin(); i != vec->end(); i++) {
33 delete *i;
34 }
35 vec->clear ();
36 }
37 #endif // _CPP_VECTOR || _GLIBCXX_VECTOR || __SGI_STL_VECTOR || _LIBCPP_VECTOR
38
39 #if defined(_CPP_MAP) || defined(_GLIBCXX_MAP) || defined(__SGI_STL_MAP)
map_delete(std::map<K,T * > * m)40 template<class K, class T> /*LIBPBD_API*/ void map_delete (std::map<K, T *> *m)
41 {
42 typename std::map<K, T *>::iterator i;
43
44 for (i = m->begin(); i != m->end(); i++) {
45 delete (*i).second;
46 }
47 m->clear ();
48 }
49 #endif // _CPP_MAP || _GLIBCXX_MAP || __SGI_STL_MAP
50
51 #if defined(_CPP_LIST) || defined(_GLIBCXX_LIST) || defined(__SGI_STL_LIST)
list_delete(std::list<T * > * l)52 template<class T> /*LIBPBD_API*/ void list_delete (std::list<T *> *l)
53 {
54 typename std::list<T *>::iterator i;
55
56 for (i = l->begin(); i != l->end(); i++) {
57 delete (*i);
58 }
59
60 l->clear ();
61 }
62 #endif // _CPP_LIST || _GLIBCXX_LIST || __SGI_STL_LIST
63
64 #if defined(_CPP_SLIST) || defined(_GLIBCXX_SLIST) || defined(__SGI_STL_SLIST)
slist_delete(std::slist<T * > * l)65 template<class T> /*LIBPBD_API*/ void slist_delete (std::slist<T *> *l)
66 {
67 typename std::slist<T *>::iterator i;
68
69 for (i = l->begin(); i != l->end(); i++) {
70 delete (*i);
71 }
72
73 l->clear ();
74 }
75 #endif // _CPP_SLIST || _GLIBCXX_SLIST || __SGI_STL_SLIST
76
77 #if defined(_CPP_SET) || defined(_GLIBCXX_SET) || defined(__SGI_STL_SET)
set_delete(std::set<T * > * sset)78 template<class T> void /*LIBPBD_API*/ set_delete (std::set<T *> *sset)
79 {
80 typename std::set<T *>::iterator i;
81
82 for (i = sset->begin(); i != sset->end(); i++) {
83 delete *i;
84 }
85 sset->erase (sset->begin(), sset->end());
86 }
87 #endif // _CPP_SET || _GLIBCXX_SET || __SGI_STL_SET
88
89 #endif // __libmisc_stl_delete_h__
90