diff --git a/base/container_of.h b/base/container_of.h new file mode 100644 index 0000000..1d70f31 --- /dev/null +++ b/base/container_of.h @@ -0,0 +1,24 @@ +#ifndef BASE_CONTAINER_OF_H +#define BASE_CONTAINER_OF_H + +#include + +//---------------------------------------------------------------- + +namespace base { + template + size_t offsetof__(const M P::*member) + { + return (size_t) &( reinterpret_cast(0)->*member); + } + + template + P *container_of(M *ptr, M const P::*member) + { + return (P *)((char *)(ptr) - offsetof__(member)); + } +} + +//---------------------------------------------------------------- + +#endif