parse_double.cpp 1.0 KB

123456789101112131415161718192021222324252627282930313233
  1. #include "parse_double.h"
  2. #include <contrib/libs/double-conversion/double-conversion/double-conversion.h>
  3. #include <cmath>
  4. namespace NYql::NJsonPath {
  5. using double_conversion::StringToDoubleConverter;
  6. double ParseDouble(const TStringBuf literal) {
  7. // FromString<double> from util/string/cast.h is permissive to junk in string.
  8. // In our case junk in string means bug in grammar.
  9. // See https://a.yandex-team.ru/arc/trunk/arcadia/util/string/cast.cpp?rev=6456750#L692
  10. struct TStringToNumberConverter: public StringToDoubleConverter {
  11. inline TStringToNumberConverter()
  12. : StringToDoubleConverter(
  13. NO_FLAGS,
  14. /* empty_string_value */ 0.0,
  15. /* junk_string_value */ NAN,
  16. /* infinity_symbol */ nullptr,
  17. /* nan_symbol */ nullptr
  18. )
  19. {
  20. }
  21. };
  22. int parsedCharactersCount = 0;
  23. return Singleton<TStringToNumberConverter>()->StringToDouble(literal.data(), literal.length(), &parsedCharactersCount);
  24. }
  25. }