#ifndef CONTS_H
#define CONTS_H

#define CONTS_JOIN2(a, b) a##_##b
#define CONTS_JOIN(a, b) CONTS_JOIN2(a, b)

#define CONTAINER_OF(ptr, type, member) \
	(type *)((char *)(ptr) - offsetof(type, member))

#define foreach(name, i, s)                       \
	for (auto i = CONTS_JOIN(name, begin)(s); \
	     !CONTS_JOIN(name, end)(s, i);        \
	     i = CONTS_JOIN(name, next)(i))
#endif /* CONTS_H */
