Add StringToInt64() and Int64ToString() natives (#1511)
This commit is contained in:
parent
a9d3cf4574
commit
f603b7aec3
@ -139,6 +139,22 @@ static cell_t StringToIntEx(IPluginContext *pCtx, const cell_t *params)
|
||||
return dummy - str;
|
||||
}
|
||||
|
||||
static cell_t StringToInt64(IPluginContext *pCtx, const cell_t *params)
|
||||
{
|
||||
char *str, *dummy = NULL;
|
||||
cell_t *addr;
|
||||
pCtx->LocalToString(params[1], &str);
|
||||
pCtx->LocalToPhysAddr(params[2], &addr);
|
||||
|
||||
// uint64_t for correct signed right shift.
|
||||
uint64_t number = (uint64_t)strtoll(str, &dummy, params[3]);
|
||||
|
||||
addr[0] = (cell_t)(number & 0xFFFFFFFFull);
|
||||
addr[1] = (cell_t)(number >> 32ull);
|
||||
|
||||
return dummy - str;
|
||||
}
|
||||
|
||||
static cell_t sm_numtostr(IPluginContext *pCtx, const cell_t *params)
|
||||
{
|
||||
char *str;
|
||||
@ -148,6 +164,17 @@ static cell_t sm_numtostr(IPluginContext *pCtx, const cell_t *params)
|
||||
return static_cast<cell_t>(res);
|
||||
}
|
||||
|
||||
static cell_t Int64ToString(IPluginContext *pCtx, const cell_t *params)
|
||||
{
|
||||
cell_t *num;
|
||||
char *str;
|
||||
pCtx->LocalToPhysAddr(params[1], &num);
|
||||
pCtx->LocalToString(params[2], &str);
|
||||
size_t res = ke::SafeSprintf(str, params[3], "%" KE_FMT_I64, (int64_t)num[1] << 32ll | (int64_t)num[0]);
|
||||
|
||||
return static_cast<cell_t>(res);
|
||||
}
|
||||
|
||||
static cell_t sm_strtofloat(IPluginContext *pCtx, const cell_t *params)
|
||||
{
|
||||
char *str, *dummy;
|
||||
@ -591,6 +618,7 @@ REGISTER_NATIVES(basicStrings)
|
||||
{"FormatEx", sm_formatex},
|
||||
{"GetCharBytes", GetCharBytes},
|
||||
{"IntToString", sm_numtostr},
|
||||
{"Int64ToString", Int64ToString},
|
||||
{"IsCharAlpha", IsCharAlpha},
|
||||
{"IsCharLower", IsCharLower},
|
||||
{"IsCharMB", IsCharMB},
|
||||
@ -607,6 +635,7 @@ REGISTER_NATIVES(basicStrings)
|
||||
{"strcopy", sm_strcopy},
|
||||
{"StringToInt", sm_strconvint},
|
||||
{"StringToIntEx", StringToIntEx},
|
||||
{"StringToInt64", StringToInt64},
|
||||
{"StringToFloat", sm_strtofloat},
|
||||
{"StringToFloatEx", StringToFloatEx},
|
||||
{"StripQuotes", StripQuotes},
|
||||
|
@ -195,6 +195,17 @@ native int StringToInt(const char[] str, int nBase=10);
|
||||
*/
|
||||
native int StringToIntEx(const char[] str, int &result, int nBase=10);
|
||||
|
||||
/**
|
||||
* Converts a string to a 64-bit integer.
|
||||
*
|
||||
* @param str String to convert.
|
||||
* @param result Array to store the upper and lower
|
||||
* 32-bits of the 64-bit integer.
|
||||
* @param nBase Numerical base to use. 10 is default.
|
||||
* @return Number of characters consumed.
|
||||
*/
|
||||
native int StringToInt64(const char[] str, int result[2], int nBase=10);
|
||||
|
||||
/**
|
||||
* Converts an integer to a string.
|
||||
*
|
||||
@ -205,6 +216,18 @@ native int StringToIntEx(const char[] str, int &result, int nBase=10);
|
||||
*/
|
||||
native int IntToString(int num, char[] str, int maxlength);
|
||||
|
||||
/**
|
||||
* Converts a 64-bit integer to a string.
|
||||
*
|
||||
* @param num Array containing the upper and lower
|
||||
* 32-bits of a 64-bit integer.
|
||||
* @param str Buffer to store string in.
|
||||
* @param maxlength Maximum length of string buffer.
|
||||
* @return Number of characters written to the buffer,
|
||||
* not including the null terminator.
|
||||
*/
|
||||
native int Int64ToString(const int num[2], char[] str, int maxlength);
|
||||
|
||||
/**
|
||||
* Converts a string to a floating point number.
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user