31#ifndef ETL_BASIC_STRING_INCLUDED
32#define ETL_BASIC_STRING_INCLUDED
139 namespace private_basic_string
142 template <
typename T =
void>
147 typedef size_t size_type;
155 template <
typename T>
158 template <
typename T>
161 template <
typename T>
170 typedef size_t size_type;
235#if ETL_HAS_STRING_TRUNCATION_CHECKS
265#if ETL_HAS_STRING_CLEAR_AFTER_USE
294#if ETL_HAS_STRING_TRUNCATION_CHECKS
314#if ETL_HAS_STRING_TRUNCATION_CHECKS || ETL_HAS_STRING_CLEAR_AFTER_USE
324 template <
typename T>
335 typedef const T* const_pointer;
338 typedef ETL_OR_STD::reverse_iterator<iterator> reverse_iterator;
339 typedef ETL_OR_STD::reverse_iterator<const_iterator> const_reverse_iterator;
341 typedef typename etl::iterator_traits<iterator>::difference_type difference_type;
403 return reverse_iterator(
end());
412 return const_reverse_iterator(
end());
421 return reverse_iterator(
begin());
428 const_reverse_iterator
rend()
const
430 return const_reverse_iterator(
begin());
439 return const_reverse_iterator(
cend());
446 const_reverse_iterator
crend()
const
448 return const_reverse_iterator(
cbegin());
470#if ETL_HAS_STRING_TRUNCATION_CHECKS
473#if ETL_HAS_ERROR_ON_STRING_TRUNCATION
608 ETL_CONSTEXPR const_pointer
data()
const
640#if ETL_HAS_STRING_TRUNCATION_CHECKS
641 if (
other.is_truncated())
645#if ETL_HAS_ERROR_ON_STRING_TRUNCATION
651#if ETL_HAS_STRING_CLEAR_AFTER_USE
652 if (
other.is_secure())
679#if ETL_HAS_STRING_TRUNCATION_CHECKS
680 if (
other.is_truncated())
684#if ETL_HAS_ERROR_ON_STRING_TRUNCATION
690#if ETL_HAS_STRING_CLEAR_AFTER_USE
691 if (
other.is_secure())
712#if ETL_HAS_STRING_TRUNCATION_CHECKS
715#if ETL_HAS_ERROR_ON_STRING_TRUNCATION
733#if ETL_HAS_STRING_TRUNCATION_CHECKS
736#if ETL_HAS_ERROR_ON_STRING_TRUNCATION
756 template <
typename TIterator>
759#if ETL_IS_DEBUG_BUILD
760 difference_type
d = etl::distance(first, last);
773#if ETL_HAS_STRING_TRUNCATION_CHECKS
776#if ETL_HAS_ERROR_ON_STRING_TRUNCATION
792#if ETL_HAS_STRING_TRUNCATION_CHECKS
795#if ETL_HAS_ERROR_ON_STRING_TRUNCATION
802 etl::fill_n(
begin(),
n, value);
829#if ETL_HAS_STRING_TRUNCATION_CHECKS
832#if ETL_HAS_ERROR_ON_STRING_TRUNCATION
859#if ETL_HAS_STRING_TRUNCATION_CHECKS
864#if ETL_HAS_ERROR_ON_STRING_TRUNCATION
925 template <
class TIterator>
945 if (position !=
end())
962 if (position !=
end())
969#if ETL_HAS_STRING_TRUNCATION_CHECKS
972#if ETL_HAS_ERROR_ON_STRING_TRUNCATION
1005#if ETL_HAS_STRING_TRUNCATION_CHECKS
1008#if ETL_HAS_ERROR_ON_STRING_TRUNCATION
1020#if ETL_HAS_STRING_TRUNCATION_CHECKS
1023#if ETL_HAS_ERROR_ON_STRING_TRUNCATION
1046#if ETL_HAS_STRING_TRUNCATION_CHECKS
1049#if ETL_HAS_ERROR_ON_STRING_TRUNCATION
1075 template <
typename TIterator>
1086 const size_type n = etl::distance(first, last);
1091#if ETL_HAS_STRING_TRUNCATION_CHECKS
1094#if ETL_HAS_ERROR_ON_STRING_TRUNCATION
1106#if ETL_HAS_STRING_TRUNCATION_CHECKS
1109#if ETL_HAS_ERROR_ON_STRING_TRUNCATION
1136#if ETL_HAS_STRING_TRUNCATION_CHECKS
1139#if ETL_HAS_ERROR_ON_STRING_TRUNCATION
1151 while (first != last)
1171 insert(
begin() + position, str.cbegin(), str.cend());
1173#if ETL_HAS_STRING_TRUNCATION_CHECKS
1174 if (str.is_truncated())
1178#if ETL_HAS_ERROR_ON_STRING_TRUNCATION
1206#if ETL_HAS_STRING_TRUNCATION_CHECKS
1207 if (str.is_truncated())
1211#if ETL_HAS_ERROR_ON_STRING_TRUNCATION
1353 count = etl::min(count,
size() -
pos);
1360 etl::copy_n(p_buffer +
pos, count,
dest);
1377 if ((
pos + str.size()) >
size())
1401#if ETL_IS_DEBUG_BUILD
1428#if ETL_IS_DEBUG_BUILD
1458 return etl::distance(
begin(),
i);
1473 if ((str.size()) >
size())
1478 if (position >=
size())
1483 position =
size() - position;
1485 const_reverse_iterator
iposition = etl::search(
rbegin() + position,
rend(), str.rbegin(), str.rend());
1511 if (position >=
size())
1516 position =
size() - position;
1519 const_reverse_iterator
srend(
s);
1545 if (position >=
size())
1550 position =
size() - position;
1553 const_reverse_iterator
srend(
s);
1574 if (position >=
size())
1579 position =
size() - position;
1581 const_reverse_iterator
i = etl::find(
rbegin() + position,
rend(),
c);
1633#if ETL_HAS_STRING_TRUNCATION_CHECKS
1638#if ETL_HAS_ERROR_ON_STRING_TRUNCATION
1665#if ETL_HAS_STRING_TRUNCATION_CHECKS
1670#if ETL_HAS_ERROR_ON_STRING_TRUNCATION
1793 template <
typename TIterator>
1817 str.p_buffer + str.
size());
1830 return compare(p_buffer + position,
1831 p_buffer + position +
length_,
1833 str.p_buffer + str.
size());
1848 return compare(p_buffer + position,
1849 p_buffer + position +
length_,
1870 return compare(p_buffer + position,
1871 p_buffer + position +
length_,
1881 return compare(p_buffer + position,
1882 p_buffer + position +
length_,
1915 if (position <
size())
1921 if (p_buffer[
i] ==
s[
j])
1939 if (position <
size())
1943 if (p_buffer[
i] ==
c)
1960 return find_last_of(str.c_str(), position, str.size());
1986 position = etl::min(position,
size() - 1);
1988 const_reverse_iterator it =
rbegin() +
size() - position - 1;
1990 while (it !=
rend())
1994 if (p_buffer[position] ==
s[
j])
2019 position = etl::min(position,
size() - 1);
2021 const_reverse_iterator it =
rbegin() +
size() - position - 1;
2023 while (it !=
rend())
2025 if (p_buffer[position] ==
c)
2065 if (position <
size())
2073 if (p_buffer[
i] ==
s[
j])
2096 if (position <
size())
2100 if (*(p_buffer +
i) !=
c)
2143 position = etl::min(position,
size() - 1);
2145 const_reverse_iterator it =
rbegin() +
size() - position - 1;
2147 while (it !=
rend())
2153 if (p_buffer[position] ==
s[
j])
2181 position = etl::min(position,
size() - 1);
2183 const_reverse_iterator it =
rbegin() +
size() - position - 1;
2185 while (it !=
rend())
2187 if (p_buffer[position] != c)
2252#if ETL_HAS_ISTRING_REPAIR
2256 virtual void repair() = 0;
2264#if ETL_HAS_STRING_TRUNCATION_CHECKS
2277#if ETL_HAS_STRING_TRUNCATION_CHECKS
2304#if ETL_HAS_STRING_TRUNCATION_CHECKS
2331 else if (*first1 > *first2)
2342 if ((first1 == last1) && (first2 == last2))
2347 else if (first1 == last1)
2364#if ETL_HAS_STRING_CLEAR_AFTER_USE
2385#if defined(ETL_POLYMORPHIC_STRINGS) || defined(ETL_POLYMORPHIC_CONTAINERS) || defined(ETL_ISTRING_REPAIR_ENABLE)
2393#if ETL_HAS_STRING_CLEAR_AFTER_USE
2419 template <
typename T>
2422 return (
lhs.size() ==
rhs.size()) && etl::equal(
lhs.begin(),
lhs.end(),
rhs.begin());
2432 template <
typename T>
2445 template <
typename T>
2458 template <
typename T>
2471 template <
typename T>
2484 template <
typename T>
2497 template <
typename T>
2500 return etl::lexicographical_compare(
lhs.begin(),
lhs.end(),
rhs.begin(),
rhs.end());
2510 template <
typename T>
2523 template <
typename T>
2537 template <
typename T>
2550 template <
typename T>
2563 template <
typename T>
2577 template <
typename T>
2590 template <
typename T>
2603 template <
typename T>
2617 template <
typename T>
2630 template <
typename T>
2643 template <
typename T>
ETL_CONSTEXPR14 flags< T, MASK > & set() ETL_NOEXCEPT
Set the bits.
Definition flags.h:102
ETL_CONSTEXPR bool test() const ETL_NOEXCEPT
Tests bits.
Definition flags.h:87
Definition basic_string.h:326
int compare(size_type position, size_type length_, const ibasic_string &str) const
Compare position / length with string.
Definition basic_string.h:1823
ibasic_string & append(TIterator first, TIterator last)
Definition basic_string.h:926
size_type find_last_of(const_pointer s, size_type position=npos) const
Definition basic_string.h:1968
size_type rfind(const_pointer s, size_type position=npos) const
Definition basic_string.h:1502
etl::ibasic_string< T > & insert(size_type position, const etl::ibasic_string< T > &str)
Definition basic_string.h:1167
ibasic_string & append(const T *str)
Definition basic_string.h:892
size_type find_last_not_of(const_pointer s, size_type position=npos) const
Definition basic_string.h:2125
size_type find(const_pointer s, size_type pos=0) const
Definition basic_string.h:1399
ibasic_string & operator=(const ibasic_string &rhs)
Assignment operator.
Definition basic_string.h:2202
ibasic_string & append(const ibasic_string &str, size_type subposition, size_type sublength=npos)
Definition basic_string.h:879
const_reverse_iterator rbegin() const
Definition basic_string.h:410
reference operator[](size_type i)
Definition basic_string.h:520
void assign(const etl::ibasic_string< T > &other, size_type subposition, size_type sublength)
Definition basic_string.h:668
pointer data_end()
Definition basic_string.h:617
iterator erase(const_iterator first, const_iterator last)
Definition basic_string.h:1313
iterator insert(const_iterator position, TIterator first, TIterator last)
Definition basic_string.h:1076
size_type find_last_of(const ibasic_string< T > &str, size_type position=npos) const
Definition basic_string.h:1958
size_type find_first_of(value_type c, size_type position=0) const
Definition basic_string.h:1937
size_type find(T c, size_type position=0) const
Definition basic_string.h:1452
void pop_back()
Definition basic_string.h:843
size_type rfind(const ibasic_string< T > &str, size_type position=npos) const
Definition basic_string.h:1471
void initialize_free_space()
Clears the free space to string terminator value.
Definition basic_string.h:2262
ibasic_string & replace(size_type position, size_type length_, const_pointer s, size_type n)
Replace characters from 'position' of 'length' with 'n' characters from pointed to string.
Definition basic_string.h:1719
iterator to_iterator(const_iterator itr) const
Convert from const_iterator to iterator.
Definition basic_string.h:2406
ibasic_string & replace(size_type position, size_type length_, size_type n, value_type c)
Replace characters from 'position' of 'length' with 'n' copies of 'c'.
Definition basic_string.h:1756
ibasic_string & replace(const_iterator first, const_iterator last, const ibasic_string &str)
Definition basic_string.h:1621
size_type find_first_of(const ibasic_string< T > &str, size_type position=0) const
Definition basic_string.h:1892
const_reference back() const
Definition basic_string.h:590
const_iterator begin() const
Definition basic_string.h:356
size_type find_last_of(const_pointer s, size_type position, size_type n) const
Definition basic_string.h:1979
reverse_iterator rbegin()
Definition basic_string.h:401
ibasic_string & replace(const_iterator first, const_iterator last, TIterator first_replace, TIterator last_replace)
Replace characters from 'first' of 'last' with characters from 'first_replace' to 'last_replace'.
Definition basic_string.h:1794
void resize(size_type new_size)
Definition basic_string.h:456
size_type find_last_not_of(const_pointer s, size_type position, size_type n) const
Definition basic_string.h:2136
size_type find_first_not_of(const_pointer s, size_type position=0) const
Definition basic_string.h:2052
size_type rfind(T c, size_type position=npos) const
Definition basic_string.h:1572
etl::ibasic_string< T > & erase(size_type position, size_type length_=npos)
Definition basic_string.h:1267
int compare(const value_type *s) const
Compare with C string.
Definition basic_string.h:1857
int compare(size_type position, size_type length_, const_pointer s) const
Compare position / length with C string.
Definition basic_string.h:1868
iterator insert(const_iterator position, size_type n, T value)
Definition basic_string.h:989
const_reference at(size_type i) const
Definition basic_string.h:553
void clear()
Clears the string.
Definition basic_string.h:810
int compare(size_type position, size_type length_, const ibasic_string &str, size_type subposition, size_type sublength) const
Compare position / length with string / subposition / sublength.
Definition basic_string.h:1839
reverse_iterator rend()
Definition basic_string.h:419
iterator erase(iterator i_element)
Definition basic_string.h:1282
const_reverse_iterator crend() const
Definition basic_string.h:446
reference at(size_type i)
Definition basic_string.h:541
~ibasic_string()
Destructor.
Definition basic_string.h:2391
ibasic_string & replace(const_iterator first, const_iterator last, const_pointer s)
Replace characters from 'first' 'last' with pointed to string.
Definition basic_string.h:1701
size_type find(const_pointer s, size_type pos, size_type n) const
Definition basic_string.h:1426
size_type find_first_of(const_pointer s, size_type position=0) const
Definition basic_string.h:1902
ibasic_string & replace(size_type position, size_type length_, const ibasic_string &str, size_type subposition, size_type sublength)
Replace characters from 'position' of 'length' with 'str' from 'subposition' of 'sublength'.
Definition basic_string.h:1650
iterator begin()
Definition basic_string.h:347
iterator end()
Definition basic_string.h:365
ibasic_string & replace(const_iterator first, const_iterator last, size_type n, value_type c)
Replace characters from 'first' of 'last' with 'n' copies of 'c'.
Definition basic_string.h:1775
ibasic_string & replace(const_iterator first, const_iterator last, const_pointer s, size_type n)
Replace characters from 'first' to 'last' with 'n' characters from pointed to string.
Definition basic_string.h:1738
void assign(TIterator first, TIterator last)
Definition basic_string.h:757
etl::ibasic_string< T > & insert(size_type position, const etl::ibasic_string< T > &str, size_type subposition, size_type sublength)
Definition basic_string.h:1194
size_type find(const ibasic_string< T > &str, size_type pos=0) const
Definition basic_string.h:1375
void push_back(T value)
Definition basic_string.h:820
size_type find_first_not_of(const_pointer s, size_type position, size_type n) const
Definition basic_string.h:2063
void assign(size_type n, T value)
Definition basic_string.h:788
const_reverse_iterator crbegin() const
Definition basic_string.h:437
iterator insert(const_iterator position, T value)
Definition basic_string.h:937
etl::ibasic_string< T > & insert(size_type position, const_pointer s, size_type n)
Definition basic_string.h:1239
ibasic_string & replace(size_type position, size_type length_, const ibasic_string &str)
Definition basic_string.h:1599
ibasic_string(T *p_buffer_, size_type MAX_SIZE_)
Constructor.
Definition basic_string.h:2290
etl::ibasic_string< T > & insert(size_type position, size_type n, value_type c)
Definition basic_string.h:1253
const_reverse_iterator rend() const
Definition basic_string.h:428
size_type find_last_not_of(const ibasic_string< T > &str, size_type position=npos) const
Definition basic_string.h:2115
const_pointer data_end() const
Definition basic_string.h:626
void assign(const etl::ibasic_string< T > &other)
Definition basic_string.h:636
const_iterator cend() const
Definition basic_string.h:392
const_pointer c_str() const
Return a pointer to a C string.
Definition basic_string.h:1336
void assign(const_pointer other, size_type length_)
Definition basic_string.h:729
void resize(size_type new_size, T value)
Definition basic_string.h:466
ETL_CONSTEXPR const_pointer data() const
Definition basic_string.h:608
const_reference front() const
Definition basic_string.h:572
pointer data()
Definition basic_string.h:599
size_type find_first_not_of(value_type c, size_type position=0) const
Definition basic_string.h:2094
ibasic_string & append(size_type n, T c)
Definition basic_string.h:914
size_type find_first_not_of(const ibasic_string< T > &str, size_type position=0) const
Definition basic_string.h:2042
size_type find_last_of(value_type c, size_type position=npos) const
Definition basic_string.h:2012
size_type copy(pointer dest, size_type count, size_type pos=0) const
Definition basic_string.h:1347
ibasic_string & append(const ibasic_string &str)
Definition basic_string.h:855
ibasic_string & replace(size_type position, size_type length_, const_pointer s)
Replace characters from 'position' of 'length' with pointed to string.
Definition basic_string.h:1682
reference front()
Definition basic_string.h:563
reference back()
Definition basic_string.h:581
const_iterator cbegin() const
Definition basic_string.h:383
void initialise()
Initialise the string.
Definition basic_string.h:2299
ibasic_string & operator+=(const ibasic_string &rhs)
+= operator.
Definition basic_string.h:2225
void trim_to_terminator()
Definition basic_string.h:2275
void uninitialized_resize(size_type new_size)
Definition basic_string.h:497
ibasic_string & append(const T *str, size_type n)
Definition basic_string.h:903
int compare(size_type position, size_type length_, const_pointer s, size_type n) const
Compare position / length with C string / n.
Definition basic_string.h:1879
size_type rfind(const_pointer s, size_type position, size_type length_) const
Definition basic_string.h:1538
size_type find_first_of(const_pointer s, size_type position, size_type n) const
Definition basic_string.h:1913
int compare(const ibasic_string &str) const
Compare with string.
Definition basic_string.h:1812
const_iterator end() const
Definition basic_string.h:374
iterator erase(const_iterator i_element)
Definition basic_string.h:1295
etl::ibasic_string< T > & insert(size_type position, const_pointer s)
Definition basic_string.h:1225
void fill(T value)
Definition basic_string.h:510
void repair_buffer(T *p_buffer_)
Fix the internal pointers after a low level memory copy.
Definition basic_string.h:2312
void assign(const_pointer other)
Definition basic_string.h:703
Definition basic_string.h:144
Definition basic_string.h:167
void set_secure()
Sets the 'secure' flag to the requested state.
Definition basic_string.h:269
bool is_secure() const
Gets the 'secure' state flag.
Definition basic_string.h:277
const size_type CAPACITY
The maximum number of elements in the string.
Definition basic_string.h:312
bool full() const
Definition basic_string.h:203
~string_base()
Destructor.
Definition basic_string.h:307
ETL_DEPRECATED bool truncated() const
Definition basic_string.h:242
void set_truncated(bool status)
Sets the 'truncated' flag.
Definition basic_string.h:298
size_type max_size() const
Definition basic_string.h:221
string_base(size_type max_size_)
Constructor.
Definition basic_string.h:288
void clear_truncated()
Clears the 'truncated' flag.
Definition basic_string.h:259
size_type length() const
Definition basic_string.h:185
size_type current_size
The current number of elements in the string.
Definition basic_string.h:311
size_type available() const
Definition basic_string.h:230
bool empty() const
Definition basic_string.h:194
size_type capacity() const
Definition basic_string.h:212
bool is_truncated() const
Definition basic_string.h:251
size_type size() const
Definition basic_string.h:176
Definition basic_string.h:84
Definition basic_string.h:70
Definition basic_string.h:112
Definition basic_string.h:98
Definition basic_string.h:126
#define ETL_ASSERT(b, e)
Definition error_handler.h:316
Definition exception.h:47
Definition integral_limits.h:516
bitset_ext
Definition absolute.h:38
bool operator>(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:693
bool operator>=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:705
bool operator!=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:654
ETL_CONSTEXPR14 size_t strlen(const T *t)
Alternative strlen for all character types.
Definition char_traits.h:285
bool operator==(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:642
bool operator<(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:666
bool operator<=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:681
pair holds two objects of arbitrary type
Definition utility.h:164