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