|  | /* | 
|  | *	Copyright (c) 2004-2010 Alex Pankratov. All rights reserved. | 
|  | * | 
|  | *	Hierarchical memory allocator, 1.2.1 | 
|  | *	http://swapped.cc/halloc | 
|  | */ | 
|  |  | 
|  | /* | 
|  | *	The program is distributed under terms of BSD license. | 
|  | *	You can obtain the copy of the license by visiting: | 
|  | * | 
|  | *	http://www.opensource.org/licenses/bsd-license.php | 
|  | */ | 
|  |  | 
|  | #ifndef _LIBP_MACROS_H_ | 
|  | #define _LIBP_MACROS_H_ | 
|  |  | 
|  | #include <stddef.h>  /* offsetof */ | 
|  |  | 
|  | /* | 
|  | restore pointer to the structure by a pointer to its field | 
|  | */ | 
|  | #define structof(p,t,f) ((t*)(- offsetof(t,f) + (char*)(p))) | 
|  |  | 
|  | /* | 
|  | *	redefine for the target compiler | 
|  | */ | 
|  | #ifdef _WIN32 | 
|  | #define static_inline static __inline | 
|  | #else | 
|  | #define static_inline static __inline__ | 
|  | #endif | 
|  |  | 
|  |  | 
|  | #endif | 
|  |  |