diff --git a/m-concurrent.h b/m-concurrent.h index 759157f8..5b533db8 100644 --- a/m-concurrent.h +++ b/m-concurrent.h @@ -81,6 +81,7 @@ ,SUBTYPE(M_C(name, _type_t)) \ ,OPLIST(oplist) \ ,M_IF_METHOD(TEST_EMPTY, oplist)(TEST_EMPTY(M_C(name,_empty_p)),) \ + ,M_IF_METHOD(GET_SIZE, oplist)(GET_SIZE(M_C(name,_size)),) \ ,M_IF_METHOD(CLEAN, oplist)(CLEAN(M_C(name,_clean)),) \ ,M_IF_METHOD(KEY_TYPE, oplist)(KEY_TYPE(M_GET_KEY_TYPE oplist),) \ ,M_IF_METHOD(VALUE_TYPE, oplist)(VALUE_TYPE(M_GET_VALUE_TYPE oplist),) \ @@ -335,6 +336,18 @@ M_C(name, _read_unlock)(out); \ return b; \ } \ + ,) \ + \ + M_IF_METHOD(GET_SIZE, oplist)( \ + static inline size_t \ + M_C(name, _size)(concurrent_t const out) \ + { \ + CONCURRENTI_CONTRACT(out); \ + M_C(name, _read_lock)(out); \ + size_t r = M_CALL_GET_SIZE(oplist, out->data); \ + M_C(name, _read_unlock)(out); \ + return r; \ + } \ ,) \ \ M_IF_METHOD(SET_KEY, oplist)( \ diff --git a/tests/test-mconcurrent.c b/tests/test-mconcurrent.c index 2626763d..f5c11659 100644 --- a/tests/test-mconcurrent.c +++ b/tests/test-mconcurrent.c @@ -124,6 +124,7 @@ static void test_basic(void) bool b = pdict1_get_blocking(&z, dict, 2, false); assert (b); assert (z == 3); + assert (pdict1_size(dict) == 1); pdict1_clear(dict); M_LET(str, string_t)