#ifndef BASE_CONTAINER_OF_H
#define BASE_CONTAINER_OF_H

#include <stdlib.h>

//----------------------------------------------------------------

namespace base {
	template<class P, class M>
	size_t offsetof__(const M P::*member)
	{
		return (size_t) &( reinterpret_cast<P*>(0)->*member);
	}

	template<class P, class M>
	P *container_of(M *ptr, M const P::*member)
	{
		return (P *)((char *)(ptr) - offsetof__(member));
	}
}

//----------------------------------------------------------------

#endif