MADNESS  version 0.9
boost_checked_delete_bits.h
Go to the documentation of this file.
1 #ifndef MADNESS_BOOST_CHECKED_DELETE_BITS_H
2 #define MADNESS_BOOST_CHECKED_DELETE_BITS_H
3 namespace madness {
4  namespace detail {
5 
6  // These checked delete and deleters are copied from Boost.
7  // They ensure that compilers issue warnings if T is an incomplete type.
8 
10 
14  template <typename T>
15  inline void checked_delete(T* p) {
16  // intentionally complex - simplification causes regressions
17  typedef char type_must_be_complete[sizeof(T) ? 1 : -1];
18  (void)sizeof(type_must_be_complete);
19  delete p;
20  }
21 
23 
27  template <typename T>
28  inline void checked_array_delete(T* a) {
29  typedef char type_must_be_complete[sizeof(T) ? 1 : -1];
30  (void)sizeof(type_must_be_complete);
31  delete[] a;
32  }
33 
35 
38  template <typename T>
39  inline void checked_free(T* p) {
40  typedef char type_must_be_complete[sizeof(T) ? 1 : -1];
41  (void)sizeof(type_must_be_complete);
42  free(p);
43  }
44 
46  template <typename T>
47  inline void no_delete(T*) { }
48 
49  inline void no_delete(void*) { }
50 
52 
56  template <typename T>
57  struct CheckedDeleter {
58  typedef void result_type;
59  typedef T * argument_type;
60 
61  void operator()(T* p) const {
62  checked_delete(p);
63  }
64  };
65 
67 
71  template <typename T>
73  typedef void result_type;
74  typedef T * argument_type;
75 
76  void operator()(T* a) const {
78  }
79  };
80 
82 
85  template <typename T>
86  struct CheckedFree {
87  typedef void result_type;
88  typedef T * argument_type;
89 
90  void operator()(T* p) const {
91  checked_free(p);
92  }
93  };
94 
96  template <typename T>
97  struct NoDeleter {
98  typedef void result_type;
99  typedef T * argument_type;
100 
101  void operator()(T*) const { }
102  };
103 
104  } // namespace detail
105 } // namespace madness
106 #endif
void result_type
Definition: boost_checked_delete_bits.h:87
Use this deleter with shared_ptr to do nothing for the pointer cleanup.
Definition: boost_checked_delete_bits.h:97
void operator()(T *) const
Definition: boost_checked_delete_bits.h:101
void no_delete(T *)
Use this function with shared_ptr to do nothing for the pointer cleanup.
Definition: boost_checked_delete_bits.h:47
T * argument_type
Definition: boost_checked_delete_bits.h:74
void operator()(T *p) const
Definition: boost_checked_delete_bits.h:90
Deleter to free memory for a shared_ptr using free()
Definition: boost_checked_delete_bits.h:86
T * argument_type
Definition: boost_checked_delete_bits.h:59
void result_type
Definition: boost_checked_delete_bits.h:58
T * argument_type
Definition: boost_checked_delete_bits.h:99
Checked pointer delete functor.
Definition: boost_checked_delete_bits.h:57
void operator()(T *p) const
Definition: boost_checked_delete_bits.h:61
const T1 &f1 return GTEST_2_TUPLE_() T(f0, f1)
void result_type
Definition: boost_checked_delete_bits.h:98
FLOAT a(int j, FLOAT z)
Definition: y1.cc:86
Checked array pointer delete functor.
Definition: boost_checked_delete_bits.h:72
void checked_delete(T *p)
Checked pointer delete function.
Definition: boost_checked_delete_bits.h:15
void checked_free(T *p)
Function to free memory for a shared_ptr using free()
Definition: boost_checked_delete_bits.h:39
T * argument_type
Definition: boost_checked_delete_bits.h:88
void checked_array_delete(T *a)
Checked array pointer delete function.
Definition: boost_checked_delete_bits.h:28
void result_type
Definition: boost_checked_delete_bits.h:73
void operator()(T *a) const
Definition: boost_checked_delete_bits.h:76
Holds machinery to set up Functions/FuncImpls using various Factories and Interfaces.
Definition: chem/atomutil.cc:45