-#define DEFINE_MAP_TYPE(K, V) DEFINE_MAP_TYPE2(K##_t, V##_t, K##_##V)
-#define DEFINE_MAP_TYPE2(K, V, N) DEFINE_MAP_TYPE3(K, V, N, *a - *b)
-#define DEFINE_MAP_TYPE3(K, V, N, C) \
-int map_##N##_search_fn(rbtree_node_t** np, void* data) \
-{ \
- K* a = (K*)data; \
- rbtree_node_t* n = *np; \
- int c = -1; \
- while (n != rbtree_sentinel) \
- { \
- K* b = (K*)RBTREE_NODE_DATA(n); \
- *np = n; \
- c = (C); \
- if (c == 0) break; \
- else if (c < 0) n = n->left; \
- else n = n->right; \
- } \
- return c; \
-}
-
-
-#define DECLARE_AND_DEFINE_MAP_TYPE(K, V) \
- DECLARE_MAP_TYPE(K, V) \
- DEFINE_MAP_TYPE(K, V)
-
-#define DECLARE_AND_DEFINE_MAP_TYPE2(K, V, N) \
- DECLARE_MAP_TYPE2(K, V, N) \
- DEFINE_MAP_TYPE2(K, V, N)
-
-#define DECLARE_AND_DEFINE_MAP_TYPE3(K, V, N, C) \
- DECLARE_MAP_TYPE2(K, V, N) \
- DEFINE_MAP_TYPE3(K, V, N, C)
-
-