31#ifndef ETL_STRING_INCLUDED
32#define ETL_STRING_INCLUDED
47 inline namespace literals
49 inline namespace string_literals
51 inline constexpr etl::string_view
operator ""_sv(
const char* str,
size_t length) ETL_NOEXCEPT
53 return etl::string_view{ str, length };
59 typedef etl::ibasic_string<char> istring;
66 template <
size_t MAX_SIZE_>
71 typedef istring base_type;
72 typedef istring interface_type;
74 typedef istring::value_type value_type;
75 typedef istring::size_type size_type;
77 static ETL_CONSTANT
size_t MAX_SIZE = MAX_SIZE_;
83 : istring(reinterpret_cast<value_type*>(&buffer), MAX_SIZE)
93 : istring(reinterpret_cast<value_type*>(&buffer), MAX_SIZE)
104 : istring(reinterpret_cast<value_type*>(&buffer), MAX_SIZE)
116 string(
const etl::istring& other,
size_t position,
size_t length = npos)
117 : istring(reinterpret_cast<value_type*>(&buffer), MAX_SIZE)
129 ETL_EXPLICIT_STRING_FROM_CHAR
string(
const value_type* text)
130 : istring(reinterpret_cast<value_type*>(&buffer), MAX_SIZE)
141 string(
const value_type* text,
size_t count)
142 : istring(reinterpret_cast<value_type*>(&buffer), MAX_SIZE)
145 this->
assign(text, text + count);
154 : istring(reinterpret_cast<value_type*>(&buffer), MAX_SIZE)
166 template <
typename TIterator>
168 : istring(reinterpret_cast<value_type*>(&buffer), MAX_SIZE)
171 this->
assign(first, last);
174#if ETL_HAS_INITIALIZER_LIST
178 string(std::initializer_list<value_type> init)
179 : istring(reinterpret_cast<
value_type*>(&buffer), MAX_SIZE)
182 this->
assign(init.begin(), init.end());
190 explicit string(
const etl::string_view& view)
191 : istring(reinterpret_cast<value_type*>(&buffer), MAX_SIZE)
206 if (position != this->
size())
210 length_ = etl::min(length_, this->
size() - position);
212 new_string.
assign(buffer + position, buffer + position + length_);
268#if ETL_HAS_ISTRING_REPAIR
269 virtual void repair() ETL_OVERRIDE
282 template <
size_t MAX_SIZE_>
283 ETL_CONSTANT
typename string<MAX_SIZE_>::size_type string<MAX_SIZE_>::MAX_SIZE;
293 typedef istring base_type;
294 typedef istring interface_type;
296 typedef istring::value_type value_type;
297 typedef istring::size_type size_type;
303 : istring(buffer, buffer_size - 1U)
313 : istring(buffer, buffer_size - 1U)
317 this->current_size = other.size();
330 string_ext(
const etl::istring& other, value_type* buffer, size_type buffer_size)
331 : istring(buffer, buffer_size - 1U)
335 this->current_size = other.size();
350 string_ext(
const etl::istring& other, value_type* buffer, size_type buffer_size, size_type position, size_type
length = npos)
351 : istring(buffer, buffer_size - 1U)
370 template <
typename TPo
inter>
371 string_ext(TPointer text, value_type* buffer, size_type buffer_size,
373 : istring(buffer, buffer_size - 1U)
390 template <
size_t Size>
391 string_ext(
const value_type (&literal)[Size], value_type* buffer, size_type buffer_size)
392 : istring(buffer, buffer_size - 1U)
410 string_ext(
const value_type* text, size_type count, value_type* buffer, size_type buffer_size)
411 : istring(buffer, buffer_size - 1U)
420 this->
assign(text, text + count);
429 string_ext(size_type count, value_type c, value_type* buffer, size_type buffer_size)
430 : istring(buffer, buffer_size - 1U)
440 explicit string_ext(
const etl::string_view& view, value_type* buffer, size_type buffer_size)
441 : istring(buffer, buffer_size - 1U)
445 this->current_size = view.size();
450 this->assign(view.begin(), view.end());
460 template <
typename TIterator>
461 string_ext(TIterator first, TIterator last, value_type* buffer, size_type buffer_size,
typename etl::enable_if<!etl::is_integral<TIterator>::value,
int>
::type = 0)
462 : istring(buffer, buffer_size - 1U)
471 this->
assign(first, last);
475#if ETL_HAS_INITIALIZER_LIST
480 : istring(buffer, buffer_size - 1U)
483 this->
assign(init.begin(), init.end());
536#if ETL_HAS_ISTRING_REPAIR
537 virtual void repair() ETL_OVERRIDE
555#if ETL_USING_8BIT_TYPES
557 struct hash<
etl::istring>
559 size_t operator()(
const etl::istring& text)
const
561 return etl::private_hash::generic_hash<size_t>(
reinterpret_cast<const uint8_t*
>(text.
data()),
562 reinterpret_cast<const uint8_t*
>(text.
data() + text.
size()));
566 template <
size_t SIZE>
567 struct hash<etl::
string<SIZE> >
569 size_t operator()(
const etl::string<SIZE>& text)
const
571 return etl::private_hash::generic_hash<size_t>(
reinterpret_cast<const uint8_t*
>(text.
data()),
572 reinterpret_cast<const uint8_t*
>(text.
data() + text.
size()));
579 size_t operator()(
const etl::string_ext& text)
const
581 return etl::private_hash::generic_hash<size_t>(
reinterpret_cast<const uint8_t*
>(text.
data()),
582 reinterpret_cast<const uint8_t*
>(text.
data() + text.
size()));
590 template<
size_t Array_Size>
599 template<
size_t MAX_SIZE,
size_t SIZE>
ETL_CONSTEXPR const_pointer data() const ETL_NOEXCEPT
Returns a const pointer to the first element of the internal storage.
Definition string_view.h:196
ETL_CONSTEXPR const_iterator end() const ETL_NOEXCEPT
Returns a const iterator to the end of the array.
Definition string_view.h:220
ETL_CONSTEXPR const_iterator begin() const ETL_NOEXCEPT
Returns a const iterator to the beginning of the array.
Definition string_view.h:204
bool is_within_buffer(const_pointer ptr) const
Definition basic_string.h:2718
void resize(size_type new_size)
Definition basic_string.h:481
void assign(const etl::ibasic_string< char > &other)
Definition basic_string.h:683
pointer data()
Definition basic_string.h:646
void initialise()
Definition basic_string.h:2491
void repair_buffer(char *p_buffer_)
Definition basic_string.h:2503
size_type length() const
Definition basic_string.h:202
size_type current_size
The current number of elements in the string.
Definition basic_string.h:336
size_type size() const
Definition basic_string.h:193
string_ext(const etl::istring &other, value_type *buffer, size_type buffer_size, size_type position, size_type length=npos)
Definition string.h:350
string_ext(value_type *buffer, size_type buffer_size)
Constructor.
Definition string.h:302
string_ext(const etl::string_ext &other, value_type *buffer, size_type buffer_size)
Definition string.h:312
string_ext(const etl::string_view &view, value_type *buffer, size_type buffer_size)
Definition string.h:440
string_ext(size_type count, value_type c, value_type *buffer, size_type buffer_size)
Definition string.h:429
string_ext(const etl::istring &other, value_type *buffer, size_type buffer_size)
Definition string.h:330
string_ext(const value_type(&literal)[Size], value_type *buffer, size_type buffer_size)
Definition string.h:391
string_ext(TPointer text, value_type *buffer, size_type buffer_size, typename etl::enable_if< etl::is_same< const value_type *, TPointer >::value, int >::type *=ETL_NULLPTR)
Definition string.h:371
void repair()
Fix the internal pointers after a low level memory copy.
Definition string.h:539
string_ext(const value_type *text, size_type count, value_type *buffer, size_type buffer_size)
Definition string.h:410
string_ext(TIterator first, TIterator last, value_type *buffer, size_type buffer_size, typename etl::enable_if<!etl::is_integral< TIterator >::value, int >::type=0)
Definition string.h:461
string_ext & operator=(const string_ext &rhs)
Assignment operator.
Definition string.h:490
Definition basic_string.h:115
etl::string< MAX_SIZE_ > substr(size_type position=0, size_type length_=npos) const
Definition string.h:202
void repair()
Fix the internal pointers after a low level memory copy.
Definition string.h:271
string()
Constructor.
Definition string.h:82
string(TIterator first, TIterator last, typename etl::enable_if<!etl::is_integral< TIterator >::value, int >::type=0)
Definition string.h:167
string(const etl::string_view &view)
Definition string.h:190
string(const etl::string< MAX_SIZE_ > &other)
Definition string.h:92
string(const etl::istring &other)
Definition string.h:103
string & operator=(const string &rhs)
Assignment operator.
Definition string.h:221
string(const etl::istring &other, size_t position, size_t length=npos)
Definition string.h:116
string(const value_type *text, size_t count)
Definition string.h:141
ETL_EXPLICIT_STRING_FROM_CHAR string(const value_type *text)
Definition string.h:129
string(size_type count, value_type c)
Definition string.h:153
#define ETL_ASSERT(b, e)
Definition error_handler.h:356
ETL_CONSTEXPR17 etl::enable_if<!etl::is_same< T, etl::nullptr_t >::value, T >::type * addressof(T &t)
Definition addressof.h:52
enable_if
Definition type_traits_generator.h:1254
is_same
Definition type_traits_generator.h:1104
bitset_ext
Definition absolute.h:39
etl::string< Array_Size - 1U > make_string(const char(&text)[Array_Size])
Hash function.
Definition string.h:591
etl::string< MAX_SIZE > make_string_with_capacity(const char(&text)[SIZE])
Make string with max capacity from string literal or array.
Definition string.h:600
ETL_CONSTEXPR14 size_t strlen(const T *t) ETL_NOEXCEPT
Alternative strlen for all character types.
Definition char_traits.h:287