mdbx: add float-point-free mdbx_ratio2percents() and mdbx_ratio2digits() to API for tools.

This commit is contained in:
Леонид Юрьев (Leonid Yuriev)
2025-10-28 23:46:07 +03:00
parent 8b2aa9fb65
commit dccc807aff
2 changed files with 30 additions and 0 deletions

4
mdbx.h
View File

@@ -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 @} */

View File

@@ -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);
}