5#define DC_TRAIT_MAP(SELF) \
6 DC_REQUIRE_TYPE(SELF, key_t); \
7 DC_REQUIRE_TYPE(SELF, value_t); \
8 DC_REQUIRE_CONSTANT(SELF, max_capacity, size_t); \
9 DC_REQUIRE_METHOD(NS(SELF, value_t)*, SELF, insert, \
10 (SELF*, NS(SELF, key_t), NS(SELF, value_t))); \
11 DC_REQUIRE_METHOD(NS(SELF, value_t)*, SELF, try_insert, \
12 (SELF*, NS(SELF, key_t), NS(SELF, value_t))); \
13 DC_REQUIRE_METHOD(NS(SELF, value_t)*, SELF, write, (SELF*, NS(SELF, key_t))); \
14 DC_REQUIRE_METHOD(NS(SELF, value_t)*, SELF, try_write, (SELF*, NS(SELF, key_t))); \
15 DC_REQUIRE_METHOD(NS(SELF, value_t) const*, SELF, read, (SELF const*, NS(SELF, key_t))); \
16 DC_REQUIRE_METHOD(NS(SELF, value_t) const*, SELF, try_read, (SELF const*, NS(SELF, key_t))); \
17 DC_REQUIRE_METHOD(bool, SELF, try_remove, (SELF*, NS(SELF, key_t), NS(SELF, value_t)*)); \
18 DC_REQUIRE_METHOD(NS(SELF, value_t), SELF, remove, (SELF*, NS(SELF, key_t))); \
19 DC_REQUIRE_METHOD(void, SELF, delete_entry, (SELF*, NS(SELF, key_t))); \
20 DC_REQUIRE_METHOD(size_t, SELF, size, (SELF const*)); \
21 DC_TRAIT_ITERABLE(SELF); \
22 DC_TRAIT_CONST_ITERABLE(SELF); \
23 DC_TRAIT_CLONEABLE(SELF); \
24 DC_TRAIT_DELETABLE(SELF); \
25 DC_TRAIT_DEBUGABLE(SELF)