hashmap: use *_entry APIs to wrap container_of
Using `container_of' can be verbose and choosing names for intermediate "struct hashmap_entry" pointers is a hard problem. So introduce "*_entry" APIs inspired by similar linked-list APIs in the Linux kernel. Unfortunately, `__typeof__' is not portable C, so we need an extra parameter to specify the type. Signed-off-by: Eric Wong <e@80x24.org> Reviewed-by: Derrick Stolee <stolee@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
6bcbdfb277
commit
f0e63c4113
@ -1322,4 +1322,19 @@ void unleak_memory(const void *ptr, size_t len);
|
||||
#define container_of(ptr, type, member) \
|
||||
((type *) ((char *)(ptr) - offsetof(type, member)))
|
||||
|
||||
/*
|
||||
* helper function for `container_of_or_null' to avoid multiple
|
||||
* evaluation of @ptr
|
||||
*/
|
||||
static inline void *container_of_or_null_offset(void *ptr, size_t offset)
|
||||
{
|
||||
return ptr ? (char *)ptr - offset : NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* like `container_of', but allows returned value to be NULL
|
||||
*/
|
||||
#define container_of_or_null(ptr, type, member) \
|
||||
(type *)container_of_or_null_offset(ptr, offsetof(type, member))
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user