CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
getAnyPtr.h
Go to the documentation of this file.
1 #ifndef FWCore_Utilities_getAnyPtr_h
2 #define FWCore_Utilities_getAnyPtr_h
3 
4 #include <cassert>
5 #include <memory>
6 
7 namespace edm {
8  template <typename T>
9  inline
10  std::unique_ptr<T> getAnyPtr(void* p, int offset) {
11  // A union is used to avoid possible copies during the triple cast that would otherwise be needed.
12  // std::unique_ptr<T> edp(static_cast<T*>(static_cast<void *>(static_cast<unsigned char *>(p) + offset)));
13  union {
14  void* vp;
15  unsigned char* ucp;
16  T* tp;
17  } pointerUnion;
18  assert(p != nullptr);
19  pointerUnion.vp = p;
20  pointerUnion.ucp += offset;
21  std::unique_ptr<T> tp(pointerUnion.tp);
22  return(std::move(tp));
23  }
24 }
25 
26 #endif
unsigned int offset(bool)
std::unique_ptr< T > getAnyPtr(void *p, int offset)
Definition: getAnyPtr.h:10
long double T