diff --git a/m-core.h b/m-core.h index 2782664b..5f4cd71e 100644 --- a/m-core.h +++ b/m-core.h @@ -3429,13 +3429,13 @@ M_INLINE size_t m_core_cstr_hash(const char str[]) /* Get the given method */ #define M_GET_INIT(...) M_GET_METHOD(INIT, M_INIT_DEFAULT, __VA_ARGS__) #define M_GET_INIT_SET(...) M_GET_METHOD(INIT_SET, M_SET_DEFAULT, __VA_ARGS__) -#define M_GET_INIT_MOVE(...) M_GET_METHOD(INIT_MOVE, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_INIT_WITH(...) M_GET_METHOD(INIT_WITH, M_NO_DEFAULT, __VA_ARGS__) +#define M_GET_INIT_MOVE(...) M_GET_METHOD(INIT_MOVE, M_NO_DEF_INIT_MOVE, __VA_ARGS__) +#define M_GET_INIT_WITH(...) M_GET_METHOD(INIT_WITH, M_NO_DEF_INIT_WITH, __VA_ARGS__) #define M_GET_SET(...) M_GET_METHOD(SET, M_SET_DEFAULT, __VA_ARGS__) -#define M_GET_MOVE(...) M_GET_METHOD(MOVE, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_SWAP(...) M_GET_METHOD(SWAP, M_NO_DEFAULT, __VA_ARGS__) +#define M_GET_MOVE(...) M_GET_METHOD(MOVE, M_NO_DEF_MOVE, __VA_ARGS__) +#define M_GET_SWAP(...) M_GET_METHOD(SWAP, M_NO_DEF_SWAP, __VA_ARGS__) #define M_GET_CLEAR(...) M_GET_METHOD(CLEAR, M_NOTHING_DEFAULT, __VA_ARGS__) -#define M_GET_HASH(...) M_GET_METHOD(HASH, M_NO_DEFAULT, __VA_ARGS__) +#define M_GET_HASH(...) M_GET_METHOD(HASH, M_NO_DEF_HASH, __VA_ARGS__) #define M_GET_EQUAL(...) M_GET_METHOD(EQUAL, M_EQUAL_DEFAULT, __VA_ARGS__) #define M_GET_CMP(...) M_GET_METHOD(CMP, M_CMP_DEFAULT, __VA_ARGS__) #define M_GET_TYPE(...) M_GET_METHOD(TYPE, M_NO_DEF_TYPE, __VA_ARGS__) @@ -3444,63 +3444,62 @@ M_INLINE size_t m_core_cstr_hash(const char str[]) #define M_GET_GENTYPE(...) M_GET_METHOD(GENTYPE, M_NO_DEF_TYPE, __VA_ARGS__) #define M_GET_NAME(...) M_GET_METHOD(NAME, M_NO_DEF_TYPE, __VA_ARGS__) #define M_GET_OPLIST(...) M_GET_METHOD(OPLIST, (), __VA_ARGS__) -#define M_GET_SORT(...) M_GET_METHOD(SORT, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_SPLICE_BACK(...) M_GET_METHOD(SPLICE_BACK, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_SPLICE_AT(...) M_GET_METHOD(SPLICE_AT, M_NO_DEFAULT, __VA_ARGS__) +#define M_GET_SORT(...) M_GET_METHOD(SORT, M_NO_DEF_SORT, __VA_ARGS__) +#define M_GET_SPLICE_BACK(...) M_GET_METHOD(SPLICE_BACK, M_NO_DEF_SPLICE_BACK, __VA_ARGS__) +#define M_GET_SPLICE_AT(...) M_GET_METHOD(SPLICE_AT, M_NO_DEF_SPLICE_AT, __VA_ARGS__) #define M_GET_IT_TYPE(...) M_GET_METHOD(IT_TYPE, M_NO_DEF_TYPE, __VA_ARGS__) -#define M_GET_IT_FIRST(...) M_GET_METHOD(IT_FIRST, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_IT_LAST(...) M_GET_METHOD(IT_LAST, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_IT_END(...) M_GET_METHOD(IT_END, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_IT_SET(...) M_GET_METHOD(IT_SET, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_IT_END_P(...) M_GET_METHOD(IT_END_P, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_IT_LAST_P(...) M_GET_METHOD(IT_LAST_P, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_IT_EQUAL_P(...) M_GET_METHOD(IT_EQUAL_P, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_IT_NEXT(...) M_GET_METHOD(IT_NEXT, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_IT_PREVIOUS(...) M_GET_METHOD(IT_PREVIOUS, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_IT_REF(...) M_GET_METHOD(IT_REF, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_IT_CREF(...) M_GET_METHOD(IT_CREF, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_IT_REMOVE(...) M_GET_METHOD(IT_REMOVE, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_IT_INSERT(...) M_GET_METHOD(IT_INSERT, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_EMPTY_P(...) M_GET_METHOD(EMPTY_P, M_NO_DEFAULT, __VA_ARGS__) +#define M_GET_IT_FIRST(...) M_GET_METHOD(IT_FIRST, M_NO_DEF_IT_FIRST, __VA_ARGS__) +#define M_GET_IT_LAST(...) M_GET_METHOD(IT_LAST, M_NO_DEF_IT_LAST, __VA_ARGS__) +#define M_GET_IT_END(...) M_GET_METHOD(IT_END, M_NO_DEF_IT_END, __VA_ARGS__) +#define M_GET_IT_SET(...) M_GET_METHOD(IT_SET, M_NO_DEF_IT_SET, __VA_ARGS__) +#define M_GET_IT_END_P(...) M_GET_METHOD(IT_END_P, M_NO_DEF_IT_END_P, __VA_ARGS__) +#define M_GET_IT_LAST_P(...) M_GET_METHOD(IT_LAST_P, M_NO_DEF_IT_LAST_P, __VA_ARGS__) +#define M_GET_IT_EQUAL_P(...) M_GET_METHOD(IT_EQUAL_P, M_NO_DEF_IT_EQUAL_P,__VA_ARGS__) +#define M_GET_IT_NEXT(...) M_GET_METHOD(IT_NEXT, M_NO_DEF_IT_NEXT, __VA_ARGS__) +#define M_GET_IT_PREVIOUS(...) M_GET_METHOD(IT_PREVIOUS, M_NO_DEF_IT_PREVIOUS,__VA_ARGS__) +#define M_GET_IT_REF(...) M_GET_METHOD(IT_REF, M_NO_DEF_IT_REF, __VA_ARGS__) +#define M_GET_IT_CREF(...) M_GET_METHOD(IT_CREF, M_NO_DEF_IT_CREFT, __VA_ARGS__) +#define M_GET_IT_REMOVE(...) M_GET_METHOD(IT_REMOVE, M_NO_DEF_IT_REMOVE, __VA_ARGS__) +#define M_GET_IT_INSERT(...) M_GET_METHOD(IT_INSERT, M_NO_DEF_IT_INSERT, __VA_ARGS__) +#define M_GET_EMPTY_P(...) M_GET_METHOD(EMPTY_P, M_NO_DEF_EMPTY_P, __VA_ARGS__) #define M_GET_ADD(...) M_GET_METHOD(ADD, M_ADD_DEFAULT, __VA_ARGS__) #define M_GET_SUB(...) M_GET_METHOD(SUB, M_SUB_DEFAULT, __VA_ARGS__) #define M_GET_MUL(...) M_GET_METHOD(MUL, M_MUL_DEFAULT, __VA_ARGS__) #define M_GET_DIV(...) M_GET_METHOD(DIV, M_DIV_DEFAULT, __VA_ARGS__) -#define M_GET_RESET(...) M_GET_METHOD(RESET, M_NO_DEFAULT, __VA_ARGS__) +#define M_GET_RESET(...) M_GET_METHOD(RESET, M_NO_DEF_RESET, __VA_ARGS__) #define M_GET_KEY_TYPE(...) M_GET_METHOD(KEY_TYPE, M_NO_DEF_TYPE, __VA_ARGS__) #define M_GET_VALUE_TYPE(...) M_GET_METHOD(VALUE_TYPE, M_NO_DEF_TYPE, __VA_ARGS__) #define M_GET_KEY_OPLIST(...) M_GET_METHOD(KEY_OPLIST, M_NO_DEF_TYPE, __VA_ARGS__) #define M_GET_VALUE_OPLIST(...) M_GET_METHOD(VALUE_OPLIST, M_NO_DEF_TYPE, __VA_ARGS__) -#define M_GET_GET_KEY(...) M_GET_METHOD(GET_KEY, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_SET_KEY(...) M_GET_METHOD(SET_KEY, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_SAFE_GET_KEY(...) M_GET_METHOD(SAFE_GET_KEY, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_ERASE_KEY(...) M_GET_METHOD(ERASE_KEY, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_GET_SIZE(...) M_GET_METHOD(GET_SIZE, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_PUSH(...) M_GET_METHOD(PUSH, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_POP(...) M_GET_METHOD(POP, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_PUSH_MOVE(...) M_GET_METHOD(PUSH_MOVE, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_POP_MOVE(...) M_GET_METHOD(POP_MOVE, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_REVERSE(...) M_GET_METHOD(REVERSE, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_GET_STR(...) M_GET_METHOD(GET_STR, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_PARSE_STR(...) M_GET_METHOD(PARSE_STR, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_OUT_STR(...) M_GET_METHOD(OUT_STR, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_IN_STR(...) M_GET_METHOD(IN_STR, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_OUT_SERIAL(...) M_GET_METHOD(OUT_SERIAL, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_IN_SERIAL(...) M_GET_METHOD(IN_SERIAL, M_NO_DEFAULT, __VA_ARGS__) +#define M_GET_GET_KEY(...) M_GET_METHOD(GET_KEY, M_NO_DEF_GET_KEY, __VA_ARGS__) +#define M_GET_SET_KEY(...) M_GET_METHOD(SET_KEY, M_NO_DEF_SET_KEY, __VA_ARGS__) +#define M_GET_SAFE_GET_KEY(...) M_GET_METHOD(SAFE_GET_KEY, M_NO_DEF_SAFE_GET_KEY, __VA_ARGS__) +#define M_GET_ERASE_KEY(...) M_GET_METHOD(ERASE_KEY, M_NO_DEF_ERASE_KEY, __VA_ARGS__) +#define M_GET_GET_SIZE(...) M_GET_METHOD(GET_SIZE, M_NO_DEF_GET_SIZE, __VA_ARGS__) +#define M_GET_PUSH(...) M_GET_METHOD(PUSH, M_NO_DEF_PUSH, __VA_ARGS__) +#define M_GET_POP(...) M_GET_METHOD(POP, M_NO_DEF_POP, __VA_ARGS__) +#define M_GET_PUSH_MOVE(...) M_GET_METHOD(PUSH_MOVE, M_NO_DEF_PUSH_MOVE, __VA_ARGS__) +#define M_GET_POP_MOVE(...) M_GET_METHOD(POP_MOVE, M_NO_DEF_POP_MOVE, __VA_ARGS__) +#define M_GET_REVERSE(...) M_GET_METHOD(REVERSE, M_NO_DEF_REVERSE, __VA_ARGS__) +#define M_GET_GET_STR(...) M_GET_METHOD(GET_STR, M_NO_DEF_GET_STR, __VA_ARGS__) +#define M_GET_PARSE_STR(...) M_GET_METHOD(PARSE_STR, M_NO_DEF_PARSE_STR, __VA_ARGS__) +#define M_GET_OUT_STR(...) M_GET_METHOD(OUT_STR, M_NO_DEF_OUT_STR, __VA_ARGS__) +#define M_GET_IN_STR(...) M_GET_METHOD(IN_STR, M_NO_DEF_IN_STR, __VA_ARGS__) +#define M_GET_OUT_SERIAL(...) M_GET_METHOD(OUT_SERIAL, M_NO_DEF_OUT_SERIAL,__VA_ARGS__) +#define M_GET_IN_SERIAL(...) M_GET_METHOD(IN_SERIAL, M_NO_DEF_IN_SERIAL, __VA_ARGS__) #define M_GET_SEPARATOR(...) M_GET_METHOD(SEPARATOR, ',', __VA_ARGS__) #define M_GET_EXT_ALGO(...) M_GET_METHOD(EXT_ALGO, M_NO_EXT_ALGO, __VA_ARGS__) #define M_GET_INC_ALLOC(...) M_GET_METHOD(INC_ALLOC, M_INC_ALLOC_DEFAULT, __VA_ARGS__) -#define M_GET_OOR_SET(...) M_GET_METHOD(OOR_SET, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_OOR_EQUAL(...) M_GET_METHOD(OOR_EQUAL, M_NO_DEFAULT, __VA_ARGS__) -#define M_GET_LIMITS(...) M_GET_METHOD(LIMITS, M_LIMITS_DEFAULT, __VA_ARGS__) +#define M_GET_OOR_SET(...) M_GET_METHOD(OOR_SET, M_NO_DEF_OOR_SET, __VA_ARGS__) +#define M_GET_OOR_EQUAL(...) M_GET_METHOD(OOR_EQUAL, M_NO_DEF_OOR_EQUAL, __VA_ARGS__) #define M_GET_PROPERTIES(...) M_GET_METHOD(PROPERTIES, (), __VA_ARGS__) -#define M_GET_EMPLACE_TYPE(...) M_GET_METHOD(EMPLACE_TYPE, M_NO_DEFAULT, __VA_ARGS__) +#define M_GET_EMPLACE_TYPE(...) M_GET_METHOD(EMPLACE_TYPE, , __VA_ARGS__) // As attribute customization #define M_GET_NEW(...) M_GET_METHOD(NEW, M_NEW_DEFAULT, __VA_ARGS__) #define M_GET_DEL(...) M_GET_METHOD(DEL, M_DEL_DEFAULT, __VA_ARGS__) #define M_GET_REALLOC(...) M_GET_METHOD(REALLOC, M_REALLOC_DEFAULT, __VA_ARGS__) #define M_GET_FREE(...) M_GET_METHOD(FREE, M_FREE_DEFAULT, __VA_ARGS__) -#define M_GET_MEMPOOL(...) M_GET_METHOD(MEMPOOL, M_NO_DEFAULT, __VA_ARGS__) +#define M_GET_MEMPOOL(...) M_GET_METHOD(MEMPOOL, M_NO_DEF_MEMPOOL, __VA_ARGS__) #define M_GET_MEMPOOL_LINKAGE(...) M_GET_METHOD(MEMPOOL_LINKAGE, , __VA_ARGS__) #define M_GET_SIZE(...) M_GET_METHOD(SIZE, 0, __VA_ARGS__) #define M_GET_CONTEXT(...) M_GET_METHOD(CONTEXT, 0, __VA_ARGS__) @@ -3570,7 +3569,6 @@ M_INLINE size_t m_core_cstr_hash(const char str[]) #define M_CALL_INC_ALLOC(oplist, ...) M_APPLY_API(M_GET_INC_ALLOC oplist, oplist, __VA_ARGS__) #define M_CALL_OOR_SET(oplist, ...) M_APPLY_API(M_GET_OOR_SET oplist, oplist, __VA_ARGS__) #define M_CALL_OOR_EQUAL(oplist, ...) M_APPLY_API(M_GET_OOR_EQUAL oplist, oplist, __VA_ARGS__) -//#define M_CALL_LIMITS(oplist, ...) M_APPLY_API(M_GET_LIMITS oplist, oplist, __VA_ARGS__) //#define M_CALL_PROPERTIES(oplist, ...) M_APPLY_API(M_GET_PROPERTIES oplist, oplist, __VA_ARGS__) //#define M_CALL_EMPLACE_TYPE(oplist, ...) M_APPLY_API(M_GET_EMPLACE_TYPE oplist, oplist, __VA_ARGS__) // As attribute customization @@ -3719,12 +3717,57 @@ M_INLINE size_t m_core_cstr_hash(const char str[]) #define M_OPLAPI_EXTRACT_API(...) ( __VA_ARGS__ ) -/* Define the no default function that generates a compiler error - if the method is expanded. +/* Define the no default function that generates + * a proper compiler error if the method is expanded. */ -#define M_NO_DEFAULT(...) \ - M_STATIC_ASSERT(false, M_LIB_MISSING_METHOD, \ - "The requested operator has no method registered in the given OPLIST. ") +#define M_NO_DEFAULT(operator, return_type) \ + (M_STATIC_ASSERT(false, M_LIB_MISSING_METHOD, \ + "The " #operator " operator has no method associated in the given OPLIST."),\ + (return_type) 0) + +#define M_NO_DEF_INIT_MOVE(...) M_NO_DEFAULT(INIT_MOVE, void) +#define M_NO_DEF_INIT_WITH(...) M_NO_DEFAULT(INIT_WITH, void) +#define M_NO_DEF_MOVE(...) M_NO_DEFAULT(MOVE, void) +#define M_NO_DEF_SWAP(...) M_NO_DEFAULT(SWAP, void) +#define M_NO_DEF_HASH(...) M_NO_DEFAULT(HASH, size_t) +#define M_NO_DEF_SORT(...) M_NO_DEFAULT(SORT, void) +#define M_NO_DEF_SPLICE_BACK(...) M_NO_DEFAULT(SPLICE_BACK, void) +#define M_NO_DEF_SPLICE_AT(...) M_NO_DEFAULT(SPLICE_AT, void) +#define M_NO_DEF_IT_TYPE(...) M_NO_DEFAULT(IT_TYPE, int) +#define M_NO_DEF_IT_FIRST(...) M_NO_DEFAULT(IT_FIRST, void) +#define M_NO_DEF_IT_LAST(...) M_NO_DEFAULT(IT_LAST, void) +#define M_NO_DEF_IT_END(...) M_NO_DEFAULT(IT_END, void) +#define M_NO_DEF_IT_SET(...) M_NO_DEFAULT(IT_SET, void) +#define M_NO_DEF_IT_END_P(...) M_NO_DEFAULT(IT_END_P, bool) +#define M_NO_DEF_IT_LAST_P(...) M_NO_DEFAULT(IT_LAST_P, bool) +#define M_NO_DEF_IT_EQUAL_P(...) M_NO_DEFAULT(IT_EQUAL_P, bool) +#define M_NO_DEF_IT_NEXT(...) M_NO_DEFAULT(IT_NEXT, void) +#define M_NO_DEF_IT_PREVIOUS(...) M_NO_DEFAULT(IT_PREVIOUS, void) +#define M_NO_DEF_IT_REF(...) M_NO_DEFAULT(IT_REF, void) +#define M_NO_DEF_IT_CREF(...) M_NO_DEFAULT(IT_CREF, void) +#define M_NO_DEF_IT_REMOVE(...) M_NO_DEFAULT(IT_REMOVE, void) +#define M_NO_DEF_IT_INSERT(...) M_NO_DEFAULT(IT_INSET, void) +#define M_NO_DEF_EMPTY_P(...) M_NO_DEFAULT(EMPTY_P, bool) +#define M_NO_DEF_RESET(...) M_NO_DEFAULT(RESET, void) +#define M_NO_DEF_GET_KEY(...) M_NO_DEFAULT(GET_KEY, void*) +#define M_NO_DEF_SET_KEY(...) M_NO_DEFAULT(SET_KEY, void) +#define M_NO_DEF_SAFE_GET_KEY(...) M_NO_DEFAULT(SAFE_GET_KEY, void*) +#define M_NO_DEF_ERASE_KEY(...) M_NO_DEFAULT(ERASE_KEY, void) +#define M_NO_DEF_GET_SIZE(...) M_NO_DEFAULT(GET_SIZE, size_t) +#define M_NO_DEF_PUSH(...) M_NO_DEFAULT(PUSH, void) +#define M_NO_DEF_POP(...) M_NO_DEFAULT(POP, void) +#define M_NO_DEF_PUSH_MOVE(...) M_NO_DEFAULT(PUSH_MOVE, void) +#define M_NO_DEF_POP_MOVE(...) M_NO_DEFAULT(POP_MOVE, void) +#define M_NO_DEF_REVERSE(...) M_NO_DEFAULT(REVERSE, void) +#define M_NO_DEF_GET_STR(...) M_NO_DEFAULT(GET_STR, void) +#define M_NO_DEF_PARSE_STR(...) M_NO_DEFAULT(PARSE_STR, bool) +#define M_NO_DEF_OUT_STR(...) M_NO_DEFAULT(OUT_STR, void) +#define M_NO_DEF_IN_STR(...) M_NO_DEFAULT(IN_STR, bool) +#define M_NO_DEF_OUT_SERIAL(...) M_NO_DEFAULT(OUT_SERIAL, m_serial_return_code_t) +#define M_NO_DEF_IN_SERIAL(...) M_NO_DEFAULT(IN_SERIAL, m_serial_return_code_t) +#define M_NO_DEF_OOR_SET(...) M_NO_DEFAULT(OOR_SET, void) +#define M_NO_DEF_OOR_EQUAL(...) M_NO_DEFAULT(OOR_EQUAL, bool) +#define M_NO_DEF_MEMPOOL(...) M_NO_DEFAULT(MEMPOOL, void) #define M_NO_DEF_TYPE \ M_STATIC_ASSERT(false, M_LIB_MISSING_METHOD, \