NetLink Sockets C++  1.0.0
Networking C++ Library
 All Classes Namespaces Files Functions Enumerations Enumerator Pages
release_manager.inline.h
1 /*
2  NetLink Sockets: Networking C++ library
3  Copyright 2012 Pedro Francisco Pareja Ruiz (PedroPareja@Gmail.com)
4 
5  This file is part of NetLink Sockets.
6 
7  NetLink Sockets 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  NetLink Sockets 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 NetLink Sockets. If not, see <http://www.gnu.org/licenses/>.
19 
20 */
21 
22 
23 template <typename T>
24 ReleaseManager<T>::ReleaseManager(void (*releaseFunction)(T*)):
25  _releaseFunction(releaseFunction) {}
26 
27 template <typename T>
28 ReleaseManager<T>::~ReleaseManager() {
29 
30  for(unsigned i=0; i < (unsigned) _releaseQueue.size(); ++i)
31 
32  if(*_releaseQueue.at(i)) {
33 
34  if(_releaseFunction)
35  _releaseFunction(*_releaseQueue.at(i));
36  else
37  delete *_releaseQueue.at(i);
38  }
39 
40  for(unsigned i=0; i < (unsigned) _releaseAddressQueue.size(); ++i)
41 
42  if(_releaseAddressQueue.at(i)) {
43 
44  if(_releaseFunction)
45  _releaseFunction(_releaseAddressQueue.at(i));
46  else
47  delete _releaseAddressQueue.at(i);
48 
49  }
50 }
51 
52 template <typename T>
53 void ReleaseManager<T>::add(T** var) {
54 
55  _releaseQueue.push_back(var);
56 }
57 
58 template <typename T>
59 void ReleaseManager<T>::add(T* address) {
60 
61  _releaseAddressQueue.push_back(address);
62 }
63