1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_WTF_TEXT_STRING_TO_NUMBER_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_WTF_TEXT_STRING_TO_NUMBER_H_
#include "base/containers/span.h"
#include "third_party/blink/renderer/platform/wtf/text/number_parsing_options.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_uchar.h"
#include "third_party/blink/renderer/platform/wtf/wtf_export.h"
namespace WTF {
class StringView;
enum class NumberParsingResult {
kSuccess,
kError,
// For UInt functions, kOverflowMin never happens. Negative numbers are
// treated as kError. This behavior matches to the HTML standard.
// https://html.spec.whatwg.org/C/#rules-for-parsing-non-negative-integers
kOverflowMin,
kOverflowMax,
};
// string -> int.
WTF_EXPORT int CharactersToInt(base::span<const LChar>,
NumberParsingOptions,
bool* ok);
WTF_EXPORT int CharactersToInt(base::span<const UChar>,
NumberParsingOptions,
bool* ok);
WTF_EXPORT int CharactersToInt(const StringView&,
NumberParsingOptions,
bool* ok);
// string -> unsigned.
WTF_EXPORT unsigned HexCharactersToUInt(base::span<const LChar>,
NumberParsingOptions,
bool* ok);
WTF_EXPORT unsigned HexCharactersToUInt(base::span<const UChar>,
NumberParsingOptions,
bool* ok);
WTF_EXPORT uint64_t HexCharactersToUInt64(base::span<const UChar>,
NumberParsingOptions,
bool* ok);
WTF_EXPORT uint64_t HexCharactersToUInt64(base::span<const LChar>,
NumberParsingOptions,
bool* ok);
WTF_EXPORT unsigned CharactersToUInt(base::span<const LChar>,
NumberParsingOptions,
bool* ok);
WTF_EXPORT unsigned CharactersToUInt(base::span<const UChar>,
NumberParsingOptions,
bool* ok);
// NumberParsingResult versions of CharactersToUInt. They can detect
// overflow. |NumberParsingResult*| should not be nullptr;
WTF_EXPORT unsigned CharactersToUInt(base::span<const LChar>,
NumberParsingOptions,
NumberParsingResult*);
WTF_EXPORT unsigned CharactersToUInt(base::span<const UChar>,
NumberParsingOptions,
NumberParsingResult*);
// string -> int64_t.
WTF_EXPORT int64_t CharactersToInt64(base::span<const LChar>,
NumberParsingOptions,
bool* ok);
WTF_EXPORT int64_t CharactersToInt64(base::span<const UChar>,
NumberParsingOptions,
bool* ok);
// string -> uint64_t.
WTF_EXPORT uint64_t CharactersToUInt64(base::span<const LChar>,
NumberParsingOptions,
bool* ok);
WTF_EXPORT uint64_t CharactersToUInt64(base::span<const UChar>,
NumberParsingOptions,
bool* ok);
// FIXME: Like the strict functions above, these give false for "ok" when there
// is trailing garbage. Like the non-strict functions above, these return the
// value when there is trailing garbage. It would be better if these were more
// consistent with the above functions instead.
// string -> double.
//
// These functions accepts:
// - leading '+'
// - numbers without leading zeros such as ".5"
// - numbers ending with "." such as "3."
// - scientific notation
// - leading whitespace (IsASCIISpace, not IsHTMLSpace)
// - no trailing whitespace
// - no trailing garbage
// - no numbers such as "NaN" "Infinity"
//
// A huge absolute number which a double can't represent is accepted, and
// +Infinity or -Infinity is returned.
//
// A small absolute numbers which a double can't represent is accepted, and
// 0 is returned
WTF_EXPORT double CharactersToDouble(base::span<const LChar>, bool* ok);
WTF_EXPORT double CharactersToDouble(base::span<const UChar>, bool* ok);
// |parsed_length| will have the length of characters which was parsed as a
// double number. It will be 0 if the input string isn't a number. It will be
// smaller than |length| if the input string contains trailing
// whiespace/garbage.
WTF_EXPORT double CharactersToDouble(base::span<const LChar>,
size_t& parsed_length);
WTF_EXPORT double CharactersToDouble(base::span<const UChar>,
size_t& parsed_length);
// string -> float.
//
// These functions accepts:
// - leading '+'
// - numbers without leading zeros such as ".5"
// - numbers ending with "." such as "3."
// - scientific notation
// - leading whitespace (IsASCIISpace, not IsHTMLSpace)
// - no trailing whitespace
// - no trailing garbage
// - no numbers such as "NaN" "Infinity"
//
// A huge absolute number which a float can't represent is accepted, and
// +Infinity or -Infinity is returned.
//
// A small absolute numbers which a float can't represent is accepted, and
// 0 is returned
WTF_EXPORT float CharactersToFloat(base::span<const LChar>, bool* ok);
WTF_EXPORT float CharactersToFloat(base::span<const UChar>, bool* ok);
// |parsed_length| will have the length of characters which was parsed as a
// flaot number. It will be 0 if the input string isn't a number. It will be
// smaller than |length| if the input string contains trailing
// whiespace/garbage.
WTF_EXPORT float CharactersToFloat(base::span<const LChar>,
size_t& parsed_length);
WTF_EXPORT float CharactersToFloat(base::span<const UChar>,
size_t& parsed_length);
} // namespace WTF
using WTF::CharactersToInt;
using WTF::CharactersToUInt;
using WTF::CharactersToInt64;
using WTF::CharactersToUInt64;
using WTF::CharactersToDouble;
using WTF::CharactersToFloat;
#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_WTF_TEXT_STRING_TO_NUMBER_H_
|