diff --git a/mdbx.h b/mdbx.h index cb6644b4..b0bab6f3 100644 --- a/mdbx.h +++ b/mdbx.h @@ -6675,6 +6675,10 @@ LIBMDBX_API int mdbx_env_chk(MDBX_env *env, const MDBX_chk_callbacks_t *cb, MDBX * \returns Нулевое значение в случае успеха, иначе код ошибки. */ LIBMDBX_API int mdbx_env_chk_encount_problem(MDBX_chk_context_t *ctx); +LIBMDBX_API const char *mdbx_ratio2digits(uint64_t numerator, uint64_t denominator, int precision, char* buffer, size_t buffer_size); + +LIBMDBX_API const char *mdbx_ratio2percents(uint64_t value, uint64_t whole, char *buffer, size_t buffer_size); + /** end of chk @} */ /** end of c_api @} */ diff --git a/src/api-extra.c b/src/api-extra.c index 9175c9cd..9094e997 100644 --- a/src/api-extra.c +++ b/src/api-extra.c @@ -163,3 +163,29 @@ int mdbx_txn_unlock(MDBX_env *env) { lck_txn_unlock(env); return MDBX_SUCCESS; } + +/*------------------------------------------------------------------------------ + * Auxiliary */ + +__cold const char *mdbx_ratio2digits(uint64_t numerator, uint64_t denominator, int precision, char *buffer, + size_t buffer_size) { + if (!buffer) + return "nullptr"; + else if (buffer_size < sizeof(ratio2digits_buffer_t)) + return "buffer-to-small"; + else if (!denominator) + return numerator ? "infinity" : "undefined"; + else + return ratio2digits(numerator, denominator, (ratio2digits_buffer_t *)buffer, precision); +} + +__cold const char *mdbx_ratio2percents(uint64_t value, uint64_t whole, char *buffer, size_t buffer_size) { + if (!buffer) + return "nullptr"; + else if (buffer_size < sizeof(ratio2digits_buffer_t)) + return "buffer-to-small"; + else if (!whole) + return value ? "infinity" : "undefined"; + else + return ratio2percent(value, whole, (ratio2digits_buffer_t *)buffer); +}