31 using size_type = std::allocator_traits<allocator_type>::size_type;
40 explicit StringRef(
const char *s) : base_(s), len_(strlen(s)) {}
41 constexpr StringRef(
const char *s,
size_t n) : base_(s), len_(n) {}
42 template<
typename CharT>
43 constexpr StringRef(
const CharT *s,
size_t n) : base_(reinterpret_cast<const char *>(s)), len_(n) {}
44 template<
typename InputIt>
46 : base_(reinterpret_cast<const char *>(&*first)), len_(std::distance(first, last)) {}
47 template<
typename InputIt>
49 : base_(reinterpret_cast<const char *>(first)), len_(std::distance(first, last)) {}
50 template<
typename CharT,
size_t N>
constexpr static StringRef from_lit(
const CharT (&s)[N]) {
73 constexpr const char *
c_str()
const {
return base_; }
76 constexpr bool empty()
const {
return len_ == 0; }
79 std::string
str()
const {
return std::string(base_, len_); }
80 const uint8_t *
byte()
const {
return reinterpret_cast<const uint8_t *
>(base_); }
82 operator std::string()
const {
return str(); }
88 return std::string::npos;
89 const char *result = std::strstr(base_ +
pos, s);
91 if (result && result + std::strlen(s) <= base_ + len_)
92 return static_cast<size_type>(result - base_);
93 return std::string::npos;
97 return std::string::npos;
98 const void *result = std::memchr(base_ +
pos,
static_cast<unsigned char>(c), len_ -
pos);
99 return result ?
static_cast<size_type>(
static_cast<const char *
>(result) - base_) : std::string::npos;
105 return std::string();
106 size_type actual_count = (count == std::string::npos ||
pos + count > len_) ? len_ -
pos : count;
107 return std::string(base_ +
pos, actual_count);
116 return lhs.
size() == rhs.
size() && std::equal(std::begin(lhs), std::end(lhs), std::begin(rhs));
120 return lhs.
size() == rhs.size() && std::equal(std::begin(lhs), std::end(lhs), std::begin(rhs));
126 return lhs.
size() == strlen(rhs) && std::equal(std::begin(lhs), std::end(lhs), rhs);
143 PGM_P p =
reinterpret_cast<PGM_P
>(rhs);
144 size_t rhs_len = strlen_P(p);
145 if (lhs.
size() != rhs_len) {
148 return memcmp_P(lhs.
c_str(), p, rhs_len) == 0;
159 return std::lexicographical_compare(std::begin(lhs), std::end(lhs), std::begin(rhs), std::end(rhs));
168 auto str = std::string(lhs);
174 auto str = lhs.
str();
180 auto str = lhs.
str();
186 std::string str(lhs);
204 R result = conv(str.
c_str(), &
end, base);
StringRef is a reference to a string owned by something else.
StringRef(const std::string &s)
std::allocator< char > allocator_type
std::reverse_iterator< const_iterator > const_reverse_iterator
size_type find(char c, size_type pos=0) const
const_reverse_iterator crend() const
constexpr const char * c_str() const
constexpr StringRef(const CharT *s, size_t n)
std::char_traits< char > traits_type
const value_type * const_pointer
constexpr size_type length() const
size_type find(const char *s, size_type pos=0) const
Find first occurrence of substring, returns std::string::npos if not found.
traits_type::char_type value_type
constexpr const_iterator cend() const
constexpr const_reference operator[](size_type pos) const
constexpr const_iterator begin() const
constexpr StringRef(const char *s, size_t n)
constexpr bool empty() const
const_reverse_iterator rbegin() const
constexpr size_type size() const
static constexpr StringRef from_lit(const CharT(&s)[N])
constexpr const_iterator end() const
std::allocator_traits< allocator_type >::size_type size_type
std::string substr(size_type pos=0, size_type count=std::string::npos) const
Return substring as std::string.
std::allocator_traits< allocator_type >::difference_type difference_type
StringRef(InputIt first, InputIt last)
static StringRef from_maybe_nullptr(const char *s)
const value_type & const_reference
const_reverse_iterator rend() const
constexpr const_iterator cbegin() const
const_reverse_iterator crbegin() const
const_pointer const_iterator
const uint8_t * byte() const
StringRef(InputIt *first, InputIt *last)
R parse_number(const StringRef &str, size_t *pos, F conv)
Providing packet encoding functions for exchanging data with a remote host.
std::string operator+(const char *lhs, const StringRef &rhs)
bool operator==(optional< T > const &x, optional< U > const &y)
double stod(const StringRef &str, size_t *pos=nullptr)
bool operator!=(optional< T > const &x, optional< U > const &y)
void convertToJson(const StringRef &src, JsonVariant dst)
std::string & operator+=(std::string &lhs, const StringRef &rhs)
float stof(const StringRef &str, size_t *pos=nullptr)
int stoi(const StringRef &str, size_t *pos=nullptr, int base=10)
bool operator<(optional< T > const &x, optional< U > const &y)
long stol(const StringRef &str, size_t *pos=nullptr, int base=10)