Commit 09bd1fafb131020a81e6519f65e9ba58d7a09abd

Authored by Jay Berkenbilt
1 parent bcea54fc

Improve efficiency of number to string conversion

Showing 1 changed file with 15 additions and 5 deletions
libqpdf/QUtil.cc
... ... @@ -267,16 +267,26 @@ int_to_string_base_internal(T num, int base, int length)
267 267 throw std::logic_error(
268 268 "int_to_string_base called with unsupported base");
269 269 }
270   - std::ostringstream buf;
271   - buf.imbue(std::locale::classic());
272   - buf << std::setbase(base) << std::nouppercase << num;
  270 + std::string cvt;
  271 + if (base == 10)
  272 + {
  273 + // Use the more efficient std::to_string when possible
  274 + cvt = std::to_string(num);
  275 + }
  276 + else
  277 + {
  278 + std::ostringstream buf;
  279 + buf.imbue(std::locale::classic());
  280 + buf << std::setbase(base) << std::nouppercase << num;
  281 + cvt = buf.str();
  282 + }
273 283 std::string result;
274   - int str_length = QIntC::to_int(buf.str().length());
  284 + int str_length = QIntC::to_int(cvt.length());
275 285 if ((length > 0) && (str_length < length))
276 286 {
277 287 result.append(QIntC::to_size(length - str_length), '0');
278 288 }
279   - result += buf.str();
  289 + result += cvt;
280 290 if ((length < 0) && (str_length < -length))
281 291 {
282 292 result.append(QIntC::to_size(-length - str_length), ' ');
... ...