Alien-libpanda
view release on metacpan or search on metacpan
src/panda/basic_string.h view on Meta::CPAN
return rfind(str._str, pos, str._length);
}
size_type rfind (const CharT* s, size_type pos, size_type count) const {
for (const CharT* ptr = _str + ((pos >= _length - count) ? (_length - count) : pos); ptr >= _str; --ptr)
if (traits_type::compare(ptr, s, count) == 0) return ptr - _str;
return npos;
}
template<class _CharT, typename = typename std::enable_if<std::is_same<_CharT, CharT>::value>::type>
size_type rfind (const _CharT* const& s, size_type pos = 0) const {
return rfind(s, pos, traits_type::length(s));
}
template <size_type SIZE>
size_type rfind (const CharT (&s)[SIZE], size_type pos = 0) const {
return rfind(s, pos, SIZE-1);
}
size_type rfind (CharT ch, size_type pos = npos) const {
const CharT* ptr = _str + (pos >= _length ? _length : (pos+1));
while (--ptr >= _str) if (traits_type::eq(*ptr, ch)) return ptr - _str;
return npos;
}
size_type rfind (basic_string_view<CharT, Traits> sv, size_type pos = npos) const {
return rfind(sv.data(), pos, sv.length());
}
template <class Alloc2>
size_type find_first_of (const basic_string<CharT, Traits, Alloc2>& str, size_type pos = 0) const {
return find_first_of(str._str, pos, str._length);
}
size_type find_first_of (const CharT* s, size_type pos, size_type count) const {
if (count == 0) return npos;
const CharT* end = _str + _length;
for (const CharT* ptr = _str + pos; ptr < end; ++ptr) if (traits_type::find(s, count, *ptr)) return ptr - _str;
return npos;
}
template<class _CharT, typename = typename std::enable_if<std::is_same<_CharT, CharT>::value>::type>
size_type find_first_of (const _CharT* const& s, size_type pos = 0) const {
return find_first_of(s, pos, traits_type::length(s));
}
template <size_type SIZE>
size_type find_first_of (const CharT (&s)[SIZE], size_type pos = 0) const {
return find_first_of(s, pos, SIZE-1);
}
size_type find_first_of (CharT ch, size_type pos = 0) const {
return find(ch, pos);
}
size_type find_first_of (basic_string_view<CharT, Traits> sv, size_type pos = 0) const {
return find_first_of(sv.data(), pos, sv.length());
}
template <class Alloc2>
size_type find_first_not_of (const basic_string<CharT, Traits, Alloc2>& str, size_type pos = 0) const {
return find_first_not_of(str._str, pos, str._length);
}
size_type find_first_not_of (const CharT* s, size_type pos, size_type count) const {
if (count == 0) return pos >= _length ? npos : pos;
const CharT* end = _str + _length;
for (const CharT* ptr = _str + pos; ptr < end; ++ptr) if (!traits_type::find(s, count, *ptr)) return ptr - _str;
return npos;
}
template<class _CharT, typename = typename std::enable_if<std::is_same<_CharT, CharT>::value>::type>
size_type find_first_not_of (const _CharT* const& s, size_type pos = 0) const {
return find_first_not_of(s, pos, traits_type::length(s));
}
template <size_type SIZE>
size_type find_first_not_of (const CharT (&s)[SIZE], size_type pos = 0) const {
return find_first_not_of(s, pos, SIZE-1);
}
size_type find_first_not_of (CharT ch, size_type pos = 0) const {
const CharT* end = _str + _length;
for (const CharT* ptr = _str + pos; ptr < end; ++ptr) if (!traits_type::eq(*ptr, ch)) return ptr - _str;
return npos;
}
size_type find_first_not_of (basic_string_view<CharT, Traits> sv, size_type pos = 0) const {
return find_first_not_of(sv.data(), pos, sv.length());
}
template <class Alloc2>
size_type find_last_of (const basic_string<CharT, Traits, Alloc2>& str, size_type pos = npos) const {
return find_last_of(str._str, pos, str._length);
}
size_type find_last_of (const CharT* s, size_type pos, size_type count) const {
if (count == 0) return npos;
for (const CharT* ptr = _str + (pos >= _length ? (_length - 1) : pos); ptr >= _str; --ptr)
if (traits_type::find(s, count, *ptr)) return ptr - _str;
return npos;
}
template<class _CharT, typename = typename std::enable_if<std::is_same<_CharT, CharT>::value>::type>
size_type find_last_of (const _CharT* const& s, size_type pos = npos) const {
return find_last_of(s, pos, traits_type::length(s));
}
template <size_type SIZE>
size_type find_last_of (const CharT (&s)[SIZE], size_type pos = npos) const {
return find_last_of(s, pos, SIZE-1);
}
size_type find_last_of (CharT ch, size_type pos = npos) const {
return rfind(ch, pos);
}
size_type find_last_of (basic_string_view<CharT, Traits> sv, size_type pos = npos) const {
return find_last_of(sv.data(), pos, sv.length());
}
template <class Alloc2>
size_type find_last_not_of (const basic_string<CharT, Traits, Alloc2>& str, size_type pos = npos) const {
return find_last_not_of(str._str, pos, str._length);
}
size_type find_last_not_of (const CharT* s, size_type pos, size_type count) const {
if (count == 0) return pos >= _length ? (_length-1) : pos;
for (const CharT* ptr = _str + (pos >= _length ? (_length - 1) : pos); ptr >= _str; --ptr)
if (!traits_type::find(s, count, *ptr)) return ptr - _str;
return npos;
}
template<class _CharT, typename = typename std::enable_if<std::is_same<_CharT, CharT>::value>::type>
size_type find_last_not_of (const _CharT* const& s, size_type pos = npos) const {
return find_last_not_of(s, pos, traits_type::length(s));
}
template <size_type SIZE>
size_type find_last_not_of (const CharT (&s)[SIZE], size_type pos = npos) const {
return find_last_not_of(s, pos, SIZE-1);
}
size_type find_last_not_of (CharT ch, size_type pos = npos) const {
for (const CharT* ptr = _str + (pos >= _length ? (_length - 1) : pos); ptr >= _str; --ptr)
if (!traits_type::eq(*ptr, ch)) return ptr - _str;
return npos;
}
size_type find_last_not_of (basic_string_view<CharT, Traits> sv, size_type pos = npos) const {
return find_last_not_of(sv.data(), pos, sv.length());
}
basic_string& append (size_type count, CharT ch) {
if (count) {
_reserve_save(_length + count);
traits_type::assign(_str + _length, count, ch);
_length += count;
}
return *this;
}
template <class Alloc2>
basic_string& append (const basic_string<CharT, Traits, Alloc2>& str) {
if (str._length) { // can't call append(const CharT*, size_type) because otherwise if &str == this a fuckup would occur
_reserve_save(_length + str._length);
traits_type::copy(_str + _length, str._str, str._length);
_length += str._length;
}
return *this;
}
template <class Alloc2>
basic_string& append (const basic_string<CharT, Traits, Alloc2>& str, size_type pos, size_type count = npos) {
if (pos > str._length) throw std::out_of_range("basic_string::append");
if (count > str._length - pos) count = str._length - pos;
if (count) { // can't call append(const CharT*, size_type) because otherwise if &str == this a fuckup would occur
_reserve_save(_length + count);
traits_type::copy(_str + _length, str._str + pos, count);
_length += count;
}
return *this;
}
basic_string& append (const CharT* s, size_type count) { // 's' MUST NOT BE any part of this->data()
if (count) {
_reserve_save(_length + count);
traits_type::copy(_str + _length, s, count);
_length += count;
}
return *this;
}
template<class _CharT, typename = typename std::enable_if<std::is_same<_CharT, CharT>::value>::type>
basic_string& append (const _CharT* const& s) {
return append(s, traits_type::length(s));
}
template <size_type SIZE>
basic_string& append (const CharT (&s)[SIZE]) {
return append(s, SIZE-1);
}
basic_string& append (std::initializer_list<CharT> ilist) {
return append(ilist.begin(), ilist.size());
}
basic_string& append (basic_string_view<CharT, Traits> sv) {
return append(sv.data(), sv.length());
}
( run in 1.078 second using v1.01-cache-2.11-cpan-acebb50784d )