src
free_list.h
Go to the documentation of this file.
1 #ifndef _RE2C_UTIL_FREE_LIST_
2 #define _RE2C_UTIL_FREE_LIST_
3 
4 #include <set>
5 
6 namespace re2c
7 {
8 
9 template<class _Ty>
10 class free_list: protected std::set<_Ty>
11 {
12 public:
13  typedef typename std::set<_Ty>::iterator iterator;
14  typedef typename std::set<_Ty>::size_type size_type;
15  typedef typename std::set<_Ty>::key_type key_type;
16 
17  free_list(): in_clear(false)
18  {
19  }
20 
21  using std::set<_Ty>::insert;
22 
23  size_type erase(const key_type& key)
24  {
25  if (!in_clear)
26  {
27  return std::set<_Ty>::erase(key);
28  }
29  return 0;
30  }
31 
32  void clear()
33  {
34  in_clear = true;
35 
36  for(iterator it = this->begin(); it != this->end(); ++it)
37  {
38  delete *it;
39  }
40  std::set<_Ty>::clear();
41 
42  in_clear = false;
43  }
44 
46  {
47  clear();
48  }
49 
50 protected:
51  bool in_clear;
52 };
53 
54 } // end namespace re2c
55 
56 #endif // _RE2C_UTIL_FREE_LIST_
size_type erase(const key_type &key)
Definition: free_list.h:23
std::set< _Ty >::key_type key_type
Definition: free_list.h:15
void clear()
Definition: free_list.h:32
std::set< _Ty >::iterator iterator
Definition: free_list.h:13
Definition: bitmap.cc:10
std::set< _Ty >::size_type size_type
Definition: free_list.h:14