122 static const auto MaxLen = std::numeric_limits<size_type>::max();
124 while (len < MaxLen) {
125 if (str[len] ==
'\0') {
135 :
Base(str.c_str(), str.size())
141 template <std::
size_t TN>
144 if ((0U <= TN) && (
back() ==
'\0')) {
151 template <std::
size_t TN>
154 if ((0U <= TN) && (
back() ==
'\0')) {
167 template <
std::
size_t TN>
171 if ((0U <= TN) && (
back() ==
'\0')) {
179 template <std::
size_t TN>
183 if ((0U <= TN) && (
back() ==
'\0')) {
281 constexpr bool empty() const noexcept
290 return std::string(
begin() + pos,
begin() + pos + std::min(
size() - pos, count));
318 auto toCopy = std::min(count,
size() - pos);
319 std::copy_n(
cbegin() + pos, toCopy, dest);
332 return compare(pos, count, other, 0, other.
size());
345 count1 = std::min(count1,
size() - pos1);
346 count2 = std::min(count2, other.
size() - pos2);
347 auto minCount = std::min(count1, count2);
348 for (
auto idx = 0U; idx < minCount; ++idx) {
349 auto thisCh = (*this)[pos1 + idx];
350 auto otherCh = other[pos2 + idx];
351 auto diff =
static_cast<int>(thisCh) -
static_cast<int>(otherCh);
357 return static_cast<int>(count1) -
static_cast<int>(count2);
386 auto remCount =
size() - pos;
387 if (remCount < str.
size()) {
392 for (
auto idx = pos; idx <= maxPos; ++idx) {
393 auto thisStrBeg =
cbegin() + idx;
394 auto thisStrEnd = thisStrBeg + str.
size();
395 if (std::equal(thisStrBeg, thisStrEnd, str.
begin())) {
426 pos = std::min(pos,
size() - 1);
427 for (
auto iter =
cbegin() + pos; iter !=
cend(); ++iter) {
428 auto foundIter = std::find(other.
cbegin(), other.
cend(), *iter);
429 if (foundIter != other.
cend()) {
462 pos = std::min(pos,
size() - 1);
463 auto begIter = std::reverse_iterator<const_iterator>(
cbegin() + pos + 1);
464 auto endIter = std::reverse_iterator<const_iterator>(
cbegin());
465 for (
auto iter = begIter; iter != endIter; ++iter) {
466 auto foundIter = std::find(other.
cbegin(), other.
cend(), *iter);
467 if (foundIter != other.
cend()) {
468 return static_cast<std::size_t
>(std::distance(iter, endIter)) - 1U;
500 pos = std::min(pos,
size() - 1);
501 for (
auto iter =
cbegin() + pos; iter !=
cend(); ++iter) {
502 auto foundIter = std::find(other.
cbegin(), other.
cend(), *iter);
503 if (foundIter == other.
cend()) {
536 pos = std::min(pos,
size() - 1);
537 auto begIter = std::reverse_iterator<const_iterator>(
cbegin() + pos + 1);
538 auto endIter = std::reverse_iterator<const_iterator>(
cbegin());
539 for (
auto iter = begIter; iter != endIter; ++iter) {
540 auto foundIter = std::find(other.
cbegin(), other.
cend(), *iter);
541 if (foundIter == other.
cend()) {
542 return static_cast<std::size_t
>(std::distance(iter, endIter)) - 1U;
575 return std::lexicographical_compare(str1.
begin(), str1.
end(), str2.
begin(), str2.
end());
584 return !(str2 < str1);
593 return (str2 < str1);
602 return !(str1 < str2);
622 return !(str1 == str2);
Contains comms::util::ArrayView class.
This file contains classes required for generic custom assertion functionality.
#define COMMS_ASSERT(expr)
Generic assert macro.
Definition Assert.h:168
Describes an object that can refer to a constant contiguous sequence of other objects.
Definition ArrayView.h:30
ArrayView & operator=(const ArrayView &)=default
Copy assign.
const_reference at(size_type pos) const
Element access with range check.
Definition ArrayView.h:219
constexpr const_iterator begin() const noexcept
Iterator to begining of the sequence.
Definition ArrayView.h:164
void remove_prefix(size_type n)
Narrow the view by skipping number of elements at the beginning.
Definition ArrayView.h:260
const_reverse_iterator crend() const noexcept
Reverse iterator to the beginning of the sequence.
Definition ArrayView.h:206
constexpr const_iterator end() const noexcept
Iterator to the end of the sequence.
Definition ArrayView.h:176
constexpr size_type size() const noexcept
Get number of element in the view.
Definition ArrayView.h:240
std::reverse_iterator< const_iterator > const_reverse_iterator
Same as std::reverse_iterator<const_iterator>
Definition ArrayView.h:82
std::size_t size_type
Equal to std::size_t.
Definition ArrayView.h:63
char * pointer
Pointer to the single element (T*)
Definition ArrayView.h:39
reverse_iterator rend() const noexcept
Reverse iterator to the beginning of the sequence.
Definition ArrayView.h:200
void remove_suffix(size_type n)
Narrow the view by dropping number of elements at the end.
Definition ArrayView.h:268
constexpr const_reference operator[](size_type pos) const
Element access operator.
Definition ArrayView.h:212
constexpr size_type length() const noexcept
Same as ref size()
Definition ArrayView.h:246
constexpr bool empty() const noexcept
Check the view is empty.
Definition ArrayView.h:253
constexpr const_iterator cend() const noexcept
Iterator to the end of the sequence.
Definition ArrayView.h:182
void swap(ArrayView &other) noexcept
Swap contents of two views.
Definition ArrayView.h:274
const_pointer const_iterator
Implementation defined constant RandomAccessIterator and ContiguousIterator whose value_type is T.
Definition ArrayView.h:70
char & reference
Reference to an element (T&)
Definition ArrayView.h:51
char value_type
Type of the single element.
Definition ArrayView.h:33
constexpr const_iterator cbegin() const noexcept
Iterator to begining of the sequence.
Definition ArrayView.h:170
const_reverse_iterator crbegin() const noexcept
Reverse iterator to the end of the sequence.
Definition ArrayView.h:194
const char & const_reference
Reference to a const element (const T&)
Definition ArrayView.h:57
const_reverse_iterator rbegin() const noexcept
Reverse iterator to the end of the sequence.
Definition ArrayView.h:188
const char * const_pointer
Pointer to the constant element (const T*)
Definition ArrayView.h:45
constexpr const_reference front() const
Access the first element.
Definition ArrayView.h:227
constexpr const_reference back() const
Access the last element.
Definition ArrayView.h:234
Describes an object that can refer to a constant contiguous sequence of char-like objects with the fi...
Definition StringView.h:34
constexpr const_reference front() const
Same as std::string_view::front()
Definition StringView.h:251
reference Reference
Same as reference.
Definition StringView.h:59
void swap(StringView &other) noexcept
Same as <a href="http://en.cppreference.com/w/cpp/string/basic_string_view/swap>std::string_view::swa...
Definition StringView.h:306
const_reverse_iterator ConstReverseIterator
Same as const_reverse_iterator.
Definition StringView.h:90
bool operator<(const StringView &str1, const StringView &str2)
Lexicographical compare between the string views.
Definition StringView.h:573
const_reverse_iterator reverse_iterator
Same as const_reverse_iterator.
Definition StringView.h:93
size_type find_first_of(const char *str, size_type pos=0)
Same as <a href="http://en.cppreference.com/w/cpp/string/basic_string_view/find_first_of>std::string_...
Definition StringView.h:450
size_type find_last_of(char c, size_type pos=npos)
Same as <a href="http://en.cppreference.com/w/cpp/string/basic_string_view/find_last_of>std::string_v...
Definition StringView.h:476
size_type find_first_of(const char *str, size_type pos, size_type count)
Same as <a href="http://en.cppreference.com/w/cpp/string/basic_string_view/find_first_of>std::string_...
Definition StringView.h:444
size_type find_last_not_of(const char *str, size_type pos=npos)
Same as <a href="http://en.cppreference.com/w/cpp/string/basic_string_view/find_last_not_of>std::stri...
Definition StringView.h:562
int compare(size_type pos1, size_type count1, const StringView &other, size_type pos2, size_type count2) const
Same as std::string_view::compare().
Definition StringView.h:336
size_type find_first_not_of(char c, size_type pos=0)
Same as <a href="http://en.cppreference.com/w/cpp/string/basic_string_view/find_first_not_of>std::str...
Definition StringView.h:512
const_reverse_iterator crend() const noexcept
Same as std::string_view::crend().
Definition StringView.h:232
StringView(const char *str) noexcept
Constructor.
Definition StringView.h:120
int compare(const char *s) const
Same as std::string_view::compare().
Definition StringView.h:361
const_reference ConstReference
Same as const_reference.
Definition StringView.h:65
typename Base::pointer pointer
Pointer to the character (char*)
Definition StringView.h:44
int compare(const StringView &other) const
Same as std::string_view::compare().
Definition StringView.h:324
const_reverse_iterator rbegin() const noexcept
Same as std::string_view::rbegin().
Definition StringView.h:214
value_type ValueType
Same as value_type.
Definition StringView.h:41
int compare(size_type pos, size_type count, const StringView &other) const
Same as std::string_view::compare().
Definition StringView.h:330
size_type find(char c, size_type pos=0) const
Same as std::string_view::find().
Definition StringView.h:403
void remove_suffix(size_type n)
Same as std::string_view::remove_suffix()
Definition StringView.h:300
size_type find_first_of(const StringView &other, size_type pos=0)
Same as <a href="http://en.cppreference.com/w/cpp/string/basic_string_view/find_first_of>std::string_...
Definition StringView.h:420
size_type find_first_not_of(const char *str, size_type pos=0)
Same as <a href="http://en.cppreference.com/w/cpp/string/basic_string_view/find_first_not_of>std::str...
Definition StringView.h:524
constexpr const_reference back() const
Same as std::string_view::back()
Definition StringView.h:257
StringView(const char(&str)[TN]) noexcept
Construct out of array of characters with known size.
Definition StringView.h:142
typename Base::const_reference const_reference
Reference to a const character (const char&)
Definition StringView.h:62
typename Base::const_reverse_iterator const_reverse_iterator
Same as std::reverse_iterator<const_iterator>
Definition StringView.h:87
constexpr const_iterator cbegin() const noexcept
Same as std::string_view::cbegin().
Definition StringView.h:196
size_type find_last_of(const char *str, size_type pos=npos)
Same as <a href="http://en.cppreference.com/w/cpp/string/basic_string_view/find_last_of>std::string_v...
Definition StringView.h:488
void swap(comms::util::StringView &str1, comms::util::StringView &str2)
Specializes the std::swap algorithm.
Definition StringView.h:636
constexpr const_pointer data() const noexcept
Same as std::string_view::data()
Definition StringView.h:263
static const auto npos
Special value, the meaning is the same as std::string_view::npos.
Definition StringView.h:100
const_iterator iterator
Same as const_iterator.
Definition StringView.h:81
constexpr bool empty() const noexcept
Same as std::string_view::empty()
Definition StringView.h:281
size_type find(const StringView &str, size_type pos=0) const
Same as std::string_view::find().
Definition StringView.h:379
typename Base::const_iterator const_iterator
Implementation defined constant RandomAccessIterator and ContiguousIterator whose value_type is char.
Definition StringView.h:75
size_type copy(char *dest, size_type count, size_type pos=0) const
Same as std::string_view::copy().
Definition StringView.h:312
typename Base::size_type size_type
Equal to std::size_t.
Definition StringView.h:68
const_pointer ConstPointer
Same as const_pointer.
Definition StringView.h:53
void remove_prefix(size_type n)
Same as std::string_view::remove_prefix()
Definition StringView.h:294
bool operator>=(const StringView &str1, const StringView &str2)
Lexicographical compare between the string views.
Definition StringView.h:600
reverse_iterator ReverseIterator
Same as reverse_iterator.
Definition StringView.h:96
~StringView() noexcept=default
Destructor.
constexpr iterator begin() const noexcept
Same as std::string_view::begin().
Definition StringView.h:190
StringView(const std::string &str) noexcept
Constructor.
Definition StringView.h:134
size_type find_last_of(const StringView &other, size_type pos=npos)
Same as <a href="http://en.cppreference.com/w/cpp/string/basic_string_view/find_last_of>std::string_v...
Definition StringView.h:456
int compare(size_type pos, size_type count, const char *s) const
Same as std::string_view::compare().
Definition StringView.h:367
size_type SizeType
Same as size_type;.
Definition StringView.h:71
reverse_iterator rend() const noexcept
Same as std::string_view::rend().
Definition StringView.h:226
iterator Iterator
Same as iterator.
Definition StringView.h:84
size_type find_last_not_of(const StringView &other, size_type pos=npos)
Same as <a href="http://en.cppreference.com/w/cpp/string/basic_string_view/find_last_not_of>std::stri...
Definition StringView.h:530
StringView() noexcept=default
Default constructor.
int compare(size_type pos1, size_type count1, const char *s, size_type count2) const
Same as std::string_view::compare().
Definition StringView.h:373
bool operator==(const StringView &str1, const StringView &str2)
Equality compare between the string views.
Definition StringView.h:609
pointer Pointer
Same as pointer.
Definition StringView.h:47
constexpr size_type length() const noexcept
Same as std::string_view::length()
Definition StringView.h:275
StringView & operator=(char(&str)[TN])
Assign array of characters with known size.
Definition StringView.h:180
typename Base::value_type value_type
Type of the character (char)
Definition StringView.h:38
constexpr const_reference operator[](size_type pos) const
Same as std::string_view::oprator[]()
Definition StringView.h:238
size_type find(const char *str, size_type pos, size_type count) const
Same as std::string_view::find().
Definition StringView.h:409
bool operator!=(const StringView &str1, const StringView &str2)
Inequality compare between the string views.
Definition StringView.h:620
constexpr iterator end() const noexcept
Same as std::string_view::end().
Definition StringView.h:202
bool operator>(const StringView &str1, const StringView &str2)
Lexicographical compare between the string views.
Definition StringView.h:591
std::string substr(size_type pos=0, size_type count=npos) const
Same as std::string_view::substr()
Definition StringView.h:287
size_type find_first_not_of(const char *str, size_type pos, size_type count)
Same as <a href="http://en.cppreference.com/w/cpp/string/basic_string_view/find_first_not_of>std::str...
Definition StringView.h:518
typename Base::reference reference
Reference to a character (char&)
Definition StringView.h:56
size_type find_last_of(const char *str, size_type pos, size_type count)
Same as <a href="http://en.cppreference.com/w/cpp/string/basic_string_view/find_last_of>std::string_v...
Definition StringView.h:482
const_reverse_iterator crbegin() const noexcept
Same as std::string_view::crbegin().
Definition StringView.h:220
typename Base::const_pointer const_pointer
Pointer to the constant character (const char*)
Definition StringView.h:50
size_type find_last_not_of(char c, size_type pos=0)
Same as <a href="http://en.cppreference.com/w/cpp/string/basic_string_view/find_last_not_of>std::stri...
Definition StringView.h:550
constexpr size_type size() const noexcept
Same as std::string_view::size()
Definition StringView.h:269
const_reference at(size_type pos) const
Similar to std::string_view::at()
Definition StringView.h:245
StringView(char(&str)[TN]) noexcept
Construct out of array of characters with known size.
Definition StringView.h:152
const_iterator ConstIterator
Same as const_iterator.
Definition StringView.h:78
size_type find_first_not_of(const StringView &other, size_type pos=0)
Same as <a href="http://en.cppreference.com/w/cpp/string/basic_string_view/find_first_not_of>std::str...
Definition StringView.h:494
bool operator<=(const StringView &str1, const StringView &str2)
Lexicographical compare between the string views.
Definition StringView.h:582
size_type find_last_not_of(const char *str, size_type pos, size_type count)
Same as <a href="http://en.cppreference.com/w/cpp/string/basic_string_view/find_last_not_of>std::stri...
Definition StringView.h:556
size_type find_first_of(char c, size_type pos=0)
Same as <a href="http://en.cppreference.com/w/cpp/string/basic_string_view/find_first_of>std::string_...
Definition StringView.h:438
constexpr const_iterator cend() const noexcept
Same as std::string_view::end().
Definition StringView.h:208
size_type find(const char *str, size_type pos=0) const
Same as std::string_view::find().
Definition StringView.h:415
Main namespace for all classes / functions of COMMS library.