macro implementation of Hashed and Hierarchical Timing Wheels

e.g.)
	struct element {
		:
		LIST_ENTRY(element) el_ttq;
	};
	TIMETABLEQ_HEAD(, element, 100) element_head;


	/* initialize */
	TIMETABLEQ_INIT(&element_head, NTIMETABLE);

	/* insert */
	int wheel_idx = 10;
	struct element *p = ...
	TIMETABLEQ_INSERT_HEAD(&element, wheel_idx, p, el_ttq);

	/* remove */
	struct element *p = ...
	TIMETABLEQ_REMOVE(p, el_ttq);

	/* rotate wheel */
	TIMETABLEQ_ROTATE(&element_head);

	/* foreach */
	struct element *p;
	TIMETABLEQ_FOREACH_TABLE(p, &element_head, 0, el_ttq) {
		printf("p = %p\n", p);
	}
test_timetableq.c1,515 bytes    2009-03-11 19:21:48 UTC
timetableq.h2,697 bytes    2009-03-13 18:38:22 UTC