add functions: iniGetDoubleCorrectValueEx and iniGetPercentCorrectValueEx

rw_perf_optimization
YuQing 2022-08-26 11:02:36 +08:00
parent e11b22ad7d
commit f47f136f56
3 changed files with 157 additions and 2 deletions

View File

@ -1,7 +1,8 @@
Version 1.60 2022-08-25 Version 1.60 2022-08-26
* normalize_path for base_path * normalize_path for base_path
* struct fast_task_info add field recv_body for dynamic recv buffer * struct fast_task_info add field recv_body for dynamic recv buffer
* add functions: iniGetDoubleCorrectValueEx and iniGetPercentCorrectValueEx
Version 1.59 2022-07-21 Version 1.59 2022-07-21
* open file with flag O_CLOEXEC * open file with flag O_CLOEXEC

View File

@ -2921,6 +2921,64 @@ int64_t iniCheckAndCorrectIntValue(IniFullContext *pIniContext,
return nValue; return nValue;
} }
double iniCheckAndCorrectDoubleValue(IniFullContext *pIniContext,
const char *szItemName, const double dValue,
const double dMinValue, const double dMaxValue)
{
char section_prompt[128];
if (dValue < dMinValue) {
INI_FILL_SECTION_PROMPT(section_prompt, sizeof(section_prompt),
pIniContext->section_name);
logWarning("file: "__FILE__", line: %d, "
"config file: %s, %sitem name: %s, item value: %.2f"
" < min value: %.2f, set to min value: %.2f",
__LINE__, pIniContext->filename, section_prompt,
szItemName, dValue, dMinValue, dMinValue);
return dMinValue;
} else if (dValue > dMaxValue) {
INI_FILL_SECTION_PROMPT(section_prompt, sizeof(section_prompt),
pIniContext->section_name);
logWarning("file: "__FILE__", line: %d, "
"config file: %s, %sitem name: %s, item value: %.2f"
" > max value: %.2f, set to max value: %.2f",
__LINE__, pIniContext->filename, section_prompt,
szItemName, dValue, dMaxValue, dMaxValue);
return dMaxValue;
}
return dValue;
}
double iniCheckAndCorrectPercentValue(IniFullContext *pIniContext,
const char *szItemName, const double dValue,
const double dMinValue, const double dMaxValue)
{
char section_prompt[128];
if (dValue < dMinValue) {
INI_FILL_SECTION_PROMPT(section_prompt, sizeof(section_prompt),
pIniContext->section_name);
logWarning("file: "__FILE__", line: %d, "
"config file: %s, %sitem name: %s, item value: %.2f%%"
" < min value: %.2f%%, set to min value: %.2f%%",
__LINE__, pIniContext->filename, section_prompt,
szItemName, dValue * 100, dMinValue * 100, dMinValue * 100);
return dMinValue;
} else if (dValue > dMaxValue) {
INI_FILL_SECTION_PROMPT(section_prompt, sizeof(section_prompt),
pIniContext->section_name);
logWarning("file: "__FILE__", line: %d, "
"config file: %s, %sitem name: %s, item value: %.2f%%"
" > max value: %.2f%%, set to max value: %.2f%%",
__LINE__, pIniContext->filename, section_prompt,
szItemName, dValue * 100, dMaxValue * 100, dMaxValue * 100);
return dMaxValue;
}
return dValue;
}
int64_t iniGetInt64ValueEx(const char *szSectionName, int64_t iniGetInt64ValueEx(const char *szSectionName,
const char *szItemName, IniContext *pContext, const char *szItemName, IniContext *pContext,
const int64_t nDefaultValue, const bool bRetryGlobal) const int64_t nDefaultValue, const bool bRetryGlobal)
@ -2952,6 +3010,36 @@ int64_t iniGetInt64CorrectValueEx(IniFullContext *pIniContext,
value, nMinValue, nMaxValue); value, nMinValue, nMaxValue);
} }
double iniGetDoubleCorrectValueEx(IniFullContext *pIniContext,
const char *szItemName, const double dbDefaultValue,
const double dbMinValue, const double dbMaxValue,
const bool bRetryGlobal)
{
double value;
value = iniGetDoubleValueEx(pIniContext->section_name, szItemName,
pIniContext->context, dbDefaultValue, bRetryGlobal);
return iniCheckAndCorrectDoubleValue(pIniContext, szItemName,
value, dbMinValue, dbMaxValue);
}
int iniGetPercentCorrectValueEx(IniFullContext *pIniContext,
const char *szItemName, double *dbItemValue,
const double dbDefaultValue, const double dbMinValue,
const double dbMaxValue, const bool bRetryGlobal)
{
int result;
if ((result=iniGetPercentValueEx(pIniContext, szItemName, dbItemValue,
dbDefaultValue, bRetryGlobal)) == 0)
{
*dbItemValue = iniCheckAndCorrectPercentValue(pIniContext,
szItemName, *dbItemValue, dbMinValue, dbMaxValue);
}
return result;
}
int64_t iniGetByteValueEx(const char *szSectionName, int64_t iniGetByteValueEx(const char *szSectionName,
const char *szItemName, IniContext *pContext, const char *szItemName, IniContext *pContext,
const int64_t nDefaultValue, const int nDefaultUnitBytes, const int64_t nDefaultValue, const int nDefaultUnitBytes,

View File

@ -159,6 +159,16 @@ extern "C" {
iniGetByteCorrectValueEx(ini_ctx, item_name, \ iniGetByteCorrectValueEx(ini_ctx, item_name, \
default_value, 1, min_value, max_value, false) default_value, 1, min_value, max_value, false)
#define iniGetDoubleCorrectValue(ini_ctx, item_name, \
default_value, min_value, max_value) \
iniGetDoubleCorrectValueEx(ini_ctx, item_name, \
default_value, 1, min_value, max_value, false)
#define iniGetPercentCorrectValue(ini_ctx, item_name, \
item_value, default_value, min_value, max_value) \
iniGetPercentCorrectValueEx(ini_ctx, item_name, item_value, \
default_value, min_value, max_value, false)
int iniSetAnnotationCallBack(AnnotationEntry *annotations, int count); int iniSetAnnotationCallBack(AnnotationEntry *annotations, int count);
void iniDestroyAnnotationCallBack(); void iniDestroyAnnotationCallBack();
@ -288,7 +298,7 @@ int iniGetIntValueEx(const char *szSectionName,
const char *szItemName, IniContext *pContext, const char *szItemName, IniContext *pContext,
const int nDefaultValue, const bool bRetryGlobal); const int nDefaultValue, const bool bRetryGlobal);
/** check and correct item value /** check and correct int value
* parameters: * parameters:
* pIniContext: the full ini context * pIniContext: the full ini context
* szItemName: the item name * szItemName: the item name
@ -301,6 +311,32 @@ int64_t iniCheckAndCorrectIntValue(IniFullContext *pIniContext,
const char *szItemName, const int64_t nValue, const char *szItemName, const int64_t nValue,
const int64_t nMinValue, const int64_t nMaxValue); const int64_t nMinValue, const int64_t nMaxValue);
/** check and correct double value
* parameters:
* pIniContext: the full ini context
* szItemName: the item name
* dValue: the item value
* dMinValue: the min value to check (including)
* dMaxValue: the max value to check (including)
* return: corrected value
*/
double iniCheckAndCorrectDoubleValue(IniFullContext *pIniContext,
const char *szItemName, const double dValue,
const double dMinValue, const double dMaxValue);
/** check and correct double value (show as percentage)
* parameters:
* pIniContext: the full ini context
* szItemName: the item name
* dValue: the item value
* dMinValue: the min value to check (including)
* dMaxValue: the max value to check (including)
* return: corrected value
*/
double iniCheckAndCorrectPercentValue(IniFullContext *pIniContext,
const char *szItemName, const double dValue,
const double dMinValue, const double dMaxValue);
/** get item correct value (32 bits integer) /** get item correct value (32 bits integer)
* parameters: * parameters:
* pIniContext: the full ini context * pIniContext: the full ini context
@ -416,6 +452,20 @@ double iniGetDoubleValueEx(const char *szSectionName,
const char *szItemName, IniContext *pContext, const char *szItemName, IniContext *pContext,
const double dbDefaultValue, const bool bRetryGlobal); const double dbDefaultValue, const bool bRetryGlobal);
/** get item correct double value
* parameters:
* pIniContext: the full ini context
* szItemName: the item name
* dbDefaultValue: the default value
* dbMinValue: the min value to check (including)
* dbMaxValue: the max value to check (including)
* bRetryGlobal: if fetch from global section when the item not exist
* return: double value, return dbDefaultValue when the item not exist
*/
double iniGetDoubleCorrectValueEx(IniFullContext *pIniContext,
const char *szItemName, const double dbDefaultValue,
const double dbMinValue, const double dbMaxValue,
const bool bRetryGlobal);
/** get item percent double value /** get item percent double value
* parameters: * parameters:
@ -430,6 +480,22 @@ int iniGetPercentValueEx(IniFullContext *ini_ctx,
const char *item_name, double *item_value, const char *item_name, double *item_value,
const double default_value, const bool retry_global); const double default_value, const bool retry_global);
/** get item correct double value (show as percentage)
* parameters:
* pIniContext: the full ini context
* szItemName: the item name
* dbItemValue: store the item value
* dbDefaultValue: the default value
* dbMinValue: the min value to check (including)
* dbMaxValue: the max value to check (including)
* bRetryGlobal: if fetch from global section when the item not exist
* return: error no, 0 for success, != 0 for fail
*/
int iniGetPercentCorrectValueEx(IniFullContext *pIniContext,
const char *szItemName, double *dbItemValue,
const double dbDefaultValue, const double dbMinValue,
const double dbMaxValue, const bool bRetryGlobal);
/** print all items /** print all items
* parameters: * parameters:
* pContext: the ini context * pContext: the ini context