8#ifndef INCLUDED_BDLB_INDEXSPANSTRINGUTIL
9#define INCLUDED_BDLB_INDEXSPANSTRINGUTIL
156#include <bdlscm_version.h>
162#include <bsl_functional.h>
163#include <bsl_string.h>
164#include <bsl_string_view.h>
193 template <
class CHAR_TYPE,
class CHAR_TRAITS>
204 template <
class CHAR_TYPE,
class CHAR_TRAITS>
215 template <
class CHAR_TYPE,
class CHAR_TRAITS>
229 template <
class CHAR_TYPE,
class CHAR_TRAITS>
240 template <
class CHAR_TYPE,
class CHAR_TRAITS>
244 CHAR_TRAITS>::const_iterator begin,
253 template <
class CHAR_TYPE,
class CHAR_TRAITS>
257 CHAR_TRAITS>::const_iterator begin,
259 CHAR_TRAITS>::const_iterator end);
267 template <
class CHAR_TYPE>
279 template <
class CHAR_TYPE>
291 template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
298 ALLOCATOR>::const_iterator begin,
300 template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
302 const std::basic_string<CHAR_TYPE,
305 typename std::basic_string<CHAR_TYPE,
307 ALLOCATOR>::const_iterator begin,
316 template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
323 ALLOCATOR>::const_iterator begin,
326 ALLOCATOR>::const_iterator end);
327 template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
329 const std::basic_string<CHAR_TYPE,
332 typename std::basic_string<CHAR_TYPE,
334 ALLOCATOR>::const_iterator begin,
335 typename std::basic_string<CHAR_TYPE,
337 ALLOCATOR>::const_iterator end);
416 std::string::const_iterator begin,
419 std::wstring::const_iterator begin,
421#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_PMR_STRING
423 std::pmr::string::const_iterator begin,
426 std::pmr::wstring::const_iterator begin,
455 std::string::const_iterator begin,
456 std::string::const_iterator end);
458 std::wstring::const_iterator begin,
459 std::wstring::const_iterator end);
460#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_PMR_STRING
462 std::pmr::string::const_iterator begin,
463 std::pmr::string::const_iterator end);
465 std::pmr::wstring::const_iterator begin,
466 std::pmr::wstring::const_iterator end);
479template <
class CHAR_TYPE,
class CHAR_TRAITS>
482IndexSpanStringUtil::bindImp(
493template <
class CHAR_TYPE,
class CHAR_TRAITS>
496IndexSpanStringUtil::createFromPosImp(
507 return IndexSpan(begin, end - begin);
510template <
class CHAR_TYPE,
class CHAR_TRAITS>
513IndexSpanStringUtil::createImp(
523 return IndexSpan(begin, length);
526template <
class CHAR_TYPE,
class CHAR_TRAITS>
529IndexSpanStringUtil::createImp(
537 bsl::less_equal<const_pointer> lessEqual;
538 bsl::greater_equal<const_pointer> greaterEqual;
540 const_pointer stringBegin =
string.data();
541 const_pointer stringEnd =
string.data() +
string.length();
542 const_pointer subStringBegin = subString.
data();
543 const_pointer subStringEnd = subString.
data() + subString.
length();
551 BSLS_ASSERT(lessEqual( subStringBegin, stringEnd ));
553 BSLS_ASSERT(greaterEqual(subStringBegin, stringBegin));
554 BSLS_ASSERT(greaterEqual(subStringEnd, stringBegin));
556 return IndexSpan(subStringBegin - stringBegin, subString.
length());
559template <
class CHAR_TYPE,
class CHAR_TRAITS>
562IndexSpanStringUtil::createImp(
565 CHAR_TRAITS>::const_iterator begin,
572 return IndexSpan(begin -
string.
begin(), length);
575template <
class CHAR_TYPE,
class CHAR_TRAITS>
578IndexSpanStringUtil::createImp(
581 CHAR_TRAITS>::const_iterator begin,
583 CHAR_TRAITS>::const_iterator end)
590 return IndexSpan(begin -
string.
begin(), end - begin);
593template <
class CHAR_TYPE>
596IndexSpanStringUtil::createImp(
605 return IndexSpan(begin -
string.
begin(), length);
608template <
class CHAR_TYPE>
611IndexSpanStringUtil::createImp(
621 return IndexSpan(begin -
string.
begin(), end - begin);
624template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
627IndexSpanStringUtil::createImp(
633 ALLOCATOR>::const_iterator begin,
640 return IndexSpan(begin -
string.
begin(), length);
643template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
646IndexSpanStringUtil::createImp(
647 const std::basic_string<CHAR_TYPE,
650 typename std::basic_string<CHAR_TYPE,
652 ALLOCATOR>::const_iterator begin,
659 return IndexSpan(begin -
string.
begin(), length);
662template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
665IndexSpanStringUtil::createImp(
671 ALLOCATOR>::const_iterator begin,
674 ALLOCATOR>::const_iterator end)
681 return IndexSpan(begin -
string.
begin(), end - begin);
684template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
687IndexSpanStringUtil::createImp(
688 const std::basic_string<CHAR_TYPE,
691 typename std::basic_string<CHAR_TYPE,
693 ALLOCATOR>::const_iterator begin,
694 typename std::basic_string<CHAR_TYPE,
696 ALLOCATOR>::const_iterator end)
703 return IndexSpan(begin -
string.
begin(), end - begin);
712 return bindImp(
string, span);
720 return bindImp(
string, span);
729 return createFromPosImp(
string, begin, end);
738 return createFromPosImp(
string, begin, end);
747 return createImp(
string, begin, length);
756 return createImp(
string, begin, length);
764 return createImp(
string, subString);
772 return createImp(
string, subString);
781 return createImp(
string, begin, length);
790 return createImp(
string, begin, length);
799 return createImp(
string, begin, length);
808 return createImp(
string, begin, length);
817 return createImp(
string, begin, length);
826 return createImp(
string, begin, length);
832 std::string::const_iterator begin,
835 return createImp(
string, begin, length);
841 std::wstring::const_iterator begin,
844 return createImp(
string, begin, length);
847#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_PMR_STRING
851 std::pmr::string::const_iterator begin,
854 return createImp(
string, begin, length);
860 std::pmr::wstring::const_iterator begin,
863 return createImp(
string, begin, length);
873 return createImp(
string, begin, end);
882 return createImp(
string, begin, end);
891 return createImp(
string, begin, end);
900 return createImp(
string, begin, end);
909 return createImp(
string, begin, end);
918 return createImp(
string, begin, end);
924 std::string::const_iterator begin,
925 std::string::const_iterator end)
927 return createImp(
string, begin, end);
933 std::wstring::const_iterator begin,
934 std::wstring::const_iterator end)
936 return createImp(
string, begin, end);
939#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_PMR_STRING
943 std::pmr::string::const_iterator begin,
944 std::pmr::string::const_iterator end)
946 return createImp(
string, begin, end);
952 std::pmr::wstring::const_iterator begin,
953 std::pmr::wstring::const_iterator end)
955 return createImp(
string, begin, end);
Definition bdlb_indexspan.h:309
size_type position() const
Return the position attribute.
Definition bdlb_indexspan.h:453
bsl::size_t size_type
The type of the position and length attributes.
Definition bdlb_indexspan.h:315
size_type length() const
Return the length attribute.
Definition bdlb_indexspan.h:447
Definition bslstl_stringview.h:471
const value_type * const_pointer
Definition bslstl_stringview.h:478
BSLS_KEYWORD_CONSTEXPR size_type length() const BSLS_KEYWORD_NOEXCEPT
Return the length of this view.
Definition bslstl_stringview.h:1913
BSLS_KEYWORD_CONSTEXPR const_pointer data() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_stringview.h:1988
const value_type * const_iterator
Definition bslstl_stringview.h:481
Definition bslstl_string.h:1252
const CHAR_TYPE * const_iterator
Definition bslstl_string.h:1282
Definition bslstl_stringref.h:374
const CHAR_TYPE * const_iterator
Definition bslstl_stringref.h:386
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
bsl::size_t size(const TYPE &array)
Return the number of elements in the specified array.
Definition bdlb_algorithmworkaroundutil.h:74
T::iterator begin(T &container)
Definition bslstl_iterator.h:1593
T::iterator end(T &container)
Definition bslstl_iterator.h:1621
Definition bdlb_indexspanstringutil.h:181
static bsl::string_view bind(const bsl::string_view &string, const IndexSpan &span)
Definition bdlb_indexspanstringutil.h:709
static IndexSpan createFromPositions(const bsl::string_view &string, IndexSpan::size_type begin, IndexSpan::size_type end)
Definition bdlb_indexspanstringutil.h:725
static IndexSpan create(const bsl::string_view &string, IndexSpan::size_type begin, IndexSpan::size_type length)
Definition bdlb_indexspanstringutil.h:743