Sha256: e0f17ed76b7aaa98062e5181be6ae842b5fcf45df88f5b1be137a527b49d53c0
Contents?: true
Size: 1.35 KB
Versions: 1
Compression:
Stored size: 1.35 KB
Contents
#include "config.h" #include <stdio.h> #include <string.h> /** * container_of - routine for upcasting * * It is often convenient to create code where the caller registers a pointer * to a generic structure and a callback. The callback might know that the * pointer points to within a larger structure, and container_of gives a * convenient and fairly type-safe way of returning to the enclosing structure. * * This idiom is an alternative to providing a void * pointer for every * callback. * * Example: * #include <stdio.h> * #include <ccan/container_of/container_of.h> * * struct timer { * void *members; * }; * * struct info { * int my_stuff; * struct timer timer; * }; * * static void my_timer_callback(struct timer *timer) * { * struct info *info = container_of(timer, struct info, timer); * printf("my_stuff is %u\n", info->my_stuff); * } * * static void register_timer(struct timer *timer) * { * (void)timer; * (void)my_timer_callback; * //... * } * * int main(void) * { * struct info info = { .my_stuff = 1 }; * * register_timer(&info.timer); * // ... * return 0; * } * * License: CC0 (Public domain) * Author: Rusty Russell <rusty@rustcorp.com.au> */ int main(int argc, char *argv[]) { if (argc != 2) return 1; if (strcmp(argv[1], "depends") == 0) { printf("ccan/check_type\n"); return 0; } return 1; }
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
timeout_ext-0.0.0 | ext/timeout_ext/ccan/container_of/_info |