mirror of
https://github.com/fluencelabs/redis
synced 2025-03-19 00:50:50 +00:00
Utils: added function to get radix 10 string length of signed integer.
This commit is contained in:
parent
7e6b4ea67b
commit
c95507881a
12
src/util.c
12
src/util.c
@ -251,6 +251,18 @@ uint32_t digits10(uint64_t v) {
|
||||
return 12 + digits10(v / 1000000000000UL);
|
||||
}
|
||||
|
||||
/* Like digits10() but for signed values. */
|
||||
uint32_t sdigits10(int64_t v) {
|
||||
if (v < 0) {
|
||||
/* Abs value of LLONG_MIN requires special handling. */
|
||||
uint64_t uv = (v != LLONG_MIN) ?
|
||||
-v : ((uint64_t) LLONG_MAX)+1;
|
||||
return digits10(uv)+1; /* +1 for the minus. */
|
||||
} else {
|
||||
return digits10(v);
|
||||
}
|
||||
}
|
||||
|
||||
/* Convert a long long into a string. Returns the number of
|
||||
* characters needed to represent the number.
|
||||
* If the buffer is not big enough to store the string, 0 is returned.
|
||||
|
@ -35,6 +35,8 @@
|
||||
int stringmatchlen(const char *p, int plen, const char *s, int slen, int nocase);
|
||||
int stringmatch(const char *p, const char *s, int nocase);
|
||||
long long memtoll(const char *p, int *err);
|
||||
uint32_t digits10(uint64_t v);
|
||||
uint32_t sdigits10(int64_t v);
|
||||
int ll2string(char *s, size_t len, long long value);
|
||||
int string2ll(const char *s, size_t slen, long long *value);
|
||||
int string2l(const char *s, size_t slen, long *value);
|
||||
|
Loading…
x
Reference in New Issue
Block a user