mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-20 05:05:38 +00:00
Suffix for integral values
This commit is contained in:
parent
3d279499d0
commit
16ce798345
@ -877,6 +877,88 @@ inline T parse(const char * data, size_t size)
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
inline std::enable_if_t<is_integral_v<T>, void>
|
||||||
|
readTextWithSuffix(T & x, ReadBuffer & buf)
|
||||||
|
{
|
||||||
|
readIntText(x, buf);
|
||||||
|
if (buf.eof())
|
||||||
|
return;
|
||||||
|
switch (*buf.position())
|
||||||
|
{
|
||||||
|
case 'k':
|
||||||
|
{
|
||||||
|
++buf.position();
|
||||||
|
if (buf.eof())
|
||||||
|
{
|
||||||
|
x *= 1000;
|
||||||
|
}
|
||||||
|
else if (*buf.position() == 'i')
|
||||||
|
{
|
||||||
|
x = (x << 10);
|
||||||
|
++buf.position();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
assertEOF(buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 'M':
|
||||||
|
{
|
||||||
|
++buf.position();
|
||||||
|
if (buf.eof())
|
||||||
|
{
|
||||||
|
x *= 1000000;
|
||||||
|
}
|
||||||
|
else if (*buf.position() == 'i')
|
||||||
|
{
|
||||||
|
x = (x << 20);
|
||||||
|
++buf.position();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
assertEOF(buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 'G':
|
||||||
|
{
|
||||||
|
if (buf.eof())
|
||||||
|
{
|
||||||
|
x *= 1000000000;
|
||||||
|
}
|
||||||
|
else if (*buf.position() == 'i')
|
||||||
|
{
|
||||||
|
x = (x << 30);
|
||||||
|
++buf.position();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
assertEOF(buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 'T':
|
||||||
|
{
|
||||||
|
if (buf.eof())
|
||||||
|
{
|
||||||
|
x *= 1000000000000;
|
||||||
|
}
|
||||||
|
else if (*buf.position() == 'i')
|
||||||
|
{
|
||||||
|
x = (x << 40);
|
||||||
|
++buf.position();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
assertEOF(buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
inline void readTextWithSuffix(T & x, ReadBuffer & buf) { readText(x, buf); }
|
||||||
|
|
||||||
/// Read something from text format, but expect complete parse of given text
|
/// Read something from text format, but expect complete parse of given text
|
||||||
/// For example: 723145 -- ok, 213MB -- not ok
|
/// For example: 723145 -- ok, 213MB -- not ok
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@ -884,7 +966,7 @@ inline T completeParse(const char * data, size_t size)
|
|||||||
{
|
{
|
||||||
T res;
|
T res;
|
||||||
ReadBufferFromMemory buf(data, size);
|
ReadBufferFromMemory buf(data, size);
|
||||||
readText(res, buf);
|
readTextWithSuffix(res, buf);
|
||||||
assertEOF(buf);
|
assertEOF(buf);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user