6#pragma push_macro("_LIBCPP_REMOVE_TRANSITIVE_INCLUDES")
7#ifndef _LIBCPP_REMOVE_TRANSITIVE_INCLUDES
8#define _LIBCPP_REMOVE_TRANSITIVE_INCLUDES
24 ->
decltype(
static_cast<const char*
>(std::declval<const U&>().data()),
25 static_cast<std::size_t
>(std::declval<const U&>().size()), std::true_type{});
27 static std::false_type
test(...);
31 ->
decltype(std::declval<U&>().append(
static_cast<const char*
>(
nullptr), std::size_t{}),
34 static std::false_type
own(...);
54 typename
std::enable_if<
55 detail::StringLike<T>::value && !
std::is_same<T,
String>::value,
int>::type = 0>
58 typename std::enable_if<
61 return T(data_, size_);
63 template <
class Iterator,
64 typename std::enable_if<!std::is_integral<Iterator>::value,
int>::type = 0>
75 const char*
c_str() const noexcept {
return data_; }
76 const char*
data() const noexcept {
return data_; }
77 char*
data() noexcept {
return data_; }
80 bool empty() const noexcept {
return size_ == 0; }
88 char&
back() noexcept {
return data_[size_ - 1]; }
89 const char&
back() const noexcept {
return data_[size_ - 1]; }
91 void clear() noexcept;
108 return find(value, pos);
128String
operator+(
const String& a,
const String& b);
130template <
class Stream,
class T,
131 typename std::enable_if<std::is_same<typename std::decay<T>::type, String>::value &&
132 !std::is_same<Stream, StringBuffer>::value,
134auto operator<<(Stream& stream, T&& text) ->
decltype(stream.write(text.data(), text.size())) {
135 return stream.
write(text.data(), text.size());
137template <
class Stream>
140 int c = stream.peek();
141 while (c != -1 && (c ==
' ' || c ==
'\t' || c ==
'\n' || c ==
'\r')) {
145 while (c != -1 && c !=
' ' && c !=
'\t' && c !=
'\n' && c !=
'\r') {
146 text.
push_back(
static_cast<char>(stream.get()));
149 if (text.
empty()) stream.setstate(Stream::failbit);
152template <
class Stream>
156 while (stream.get(c)) {
157 if (c ==
'\n')
return true;
160 return !text.
empty();
167 size_t result = 2166136261u;
168 for (
char c : value) result = (result ^ static_cast<unsigned char>(c)) * 16777619u;
174#pragma pop_macro("_LIBCPP_REMOVE_TRANSITIVE_INCLUDES")
StringBuffer & write(const char *data, std::size_t size)
Definition buffer.cpp:5
void resize(size_type size, char value='\0')
Definition string.cpp:63
char * iterator
Definition string.h:45
size_type find_first_of(char value, size_type pos=0) const noexcept
Definition string.h:107
char * data() noexcept
Definition string.h:77
const char & back() const noexcept
Definition string.h:89
String & operator+=(char value)
Definition string.h:100
const char * data() const noexcept
Definition string.h:76
size_type rfind(const String &text, size_type pos=npos) const noexcept
Definition string.cpp:117
size_type find_last_of(char value, size_type pos=npos) const noexcept
Definition string.cpp:109
~String()
Definition string.cpp:18
String substr(size_type pos=0, size_type count=npos) const
Definition string.cpp:127
const_iterator end() const noexcept
Definition string.h:85
const_iterator begin() const noexcept
Definition string.h:84
size_type length() const noexcept
Definition string.h:79
const char * c_str() const noexcept
Definition string.h:75
iterator end() noexcept
Definition string.h:83
iterator begin() noexcept
Definition string.h:82
char & back() noexcept
Definition string.h:88
String & operator+=(const char *text)
Definition string.h:99
void clear() noexcept
Definition string.cpp:50
const char * const_iterator
Definition string.h:46
size_type capacity() const noexcept
Definition string.h:81
String(Iterator first, Iterator last)
Definition string.h:65
String & append(const char *text, size_type size)
Definition string.cpp:69
size_type size() const noexcept
Definition string.h:78
void push_back(char value)
Definition string.cpp:92
void reserve(size_type capacity)
Definition string.cpp:54
bool empty() const noexcept
Definition string.h:80
char value_type
Definition string.h:44
char & operator[](size_type i) noexcept
Definition string.h:86
int compare(const String &other) const noexcept
Definition string.cpp:93
std::size_t size_type
Definition string.h:43
const char & operator[](size_type i) const noexcept
Definition string.h:87
String & replace(size_type pos, size_type count, const String &text)
Definition string.cpp:132
String() noexcept
Definition string.cpp:10
static constexpr size_type npos
Definition string.h:47
size_type find(const String &text, size_type pos=0) const noexcept
Definition string.cpp:98
String & operator=(const String &other)
Definition string.cpp:39
Definition assert_text.cpp:5
bool operator!=(const String &a, const String &b) noexcept
Definition string.h:123
StringBuffer & operator<<(StringBuffer &buffer, const Printer &printer)
Definition print.h:331
String operator+(const String &a, const String &b)
Definition string.cpp:141
bool operator==(const String &a, const String &b) noexcept
Definition string.h:122
bool operator>=(const String &a, const String &b) noexcept
Definition string.h:127
Stream & operator>>(Stream &stream, String &text)
Definition string.h:138
bool getline(Stream &stream, String &text)
Definition string.h:153
bool operator<(const String &a, const String &b) noexcept
Definition string.h:124
bool operator>(const String &a, const String &b) noexcept
Definition string.h:125
bool operator<=(const String &a, const String &b) noexcept
Definition string.h:126
static auto test(int) -> decltype(static_cast< const char * >(std::declval< const U & >().data()), static_cast< std::size_t >(std::declval< const U & >().size()), std::true_type{})
static constexpr bool value
Definition string.h:28
static std::false_type test(...)
static auto own(int) -> decltype(std::declval< U & >().append(static_cast< const char * >(nullptr), std::size_t{}), std::true_type{})
static constexpr bool owning
Definition string.h:35
static std::false_type own(...)