$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] lexical_cast optimization
From: Jonathan Brannan (kickace_at_[hidden])
Date: 2008-12-05 10:40:13
we have found that atoi/strtol/strtoll/strtod are slow compared to the
optimized output (gcc -O2/3) of a very simple * 10 loop. The C number
converters work for a large varity of bases, which makes them slower
than needed for base 10.
we use something like:
template<typename TInteger>
bool validated_to_unsigned_int(
const char* str_value, size_t size,
TInteger& result)
{
size_t i = 0;
for(const char* p = str_value; i < size; ++p, ++i)
{
char digit = *p;
if (digit >= '0' && digit <='9')
{
result = result * 10 + digit - '0';
}
else
{
return false;
}
}
return true;
}
with wrappers for signed and ones that throw exceptions. We have a
few converters that are faster, but only without error checking (base
16 conversion with lookup table works for small numbers, for example)