Simpatico  v1.10
Offset.h
1 #ifndef UTIL_OFFSET_H
2 #define UTIL_OFFSET_H
3 
4 #include <cstddef>
5 
6 /*
7 * Util Package - C++ Utilities for Scientific Computation
8 *
9 * Copyright 2010 - 2017, The Regents of the University of Minnesota
10 * Distributed under the terms of the GNU General Public License.
11 */
12 
13 namespace Util
14 {
15 
26  template <typename D, typename B, typename M>
27  ptrdiff_t memberOffset(D& object, M B::* memPtr)
28  {
29  return reinterpret_cast<char*>(&(object.*memPtr)) - reinterpret_cast<char*>(&object);
30  }
31 
39  template <typename D, typename B>
40  ptrdiff_t baseOffset(D& object)
41  {
42  D* d = &object;
43  B* b = (B*) d;
44  return reinterpret_cast<char*>(d) - reinterpret_cast<char*>(b);
45  }
46 
47 
48 
49 }
50 #endif
ptrdiff_t baseOffset(D &object)
Template for calculating offsets of base class subobjects.
Definition: Offset.h:40
ptrdiff_t memberOffset(D &object, M B::*memPtr)
Template for calculating offsets of data members.
Definition: Offset.h:27
Utility classes for scientific computation.
Definition: accumulators.mod:1