8#ifndef INCLUDED_BSLSTL_STRINGREF
9#define INCLUDED_BSLSTL_STRINGREF
307#include <bslscm_version.h>
332#if defined(BSLS_PLATFORM_OS_AIX)
338using BloombergLP::bslstl_stringview_relops::operator==;
339using BloombergLP::bslstl_stringview_relops::operator!=;
340using BloombergLP::bslstl_stringview_relops::operator<;
341using BloombergLP::bslstl_stringview_relops::operator>;
342using BloombergLP::bslstl_stringview_relops::operator<=;
343using BloombergLP::bslstl_stringview_relops::operator>=;
373template <
class CHAR_TYPE>
402 void write(std::basic_ostream<CHAR_TYPE>& stream)
const;
431 template <
class INT_TYPE>
466#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_PMR_STRING
467 StringRefImp(
const std::pmr::basic_string<CHAR_TYPE>& str);
518 template <
class INT_TYPE>
576 operator std::basic_string<CHAR_TYPE>()
const;
609 const CHAR_TYPE *
data()
const;
659 template <
class CHAR_TYPE>
668 template <
class CHAR_TYPE>
678 template <
class CHAR_TYPE>
686template <
class CHAR_TYPE>
690template <
class CHAR_TYPE>
694template <
class CHAR_TYPE>
698template <
class CHAR_TYPE>
701 const std::basic_string<CHAR_TYPE>& rhs);
702template <
class CHAR_TYPE>
706template <
class CHAR_TYPE>
710template <
class CHAR_TYPE>
713 const CHAR_TYPE *rhs);
718template <
class CHAR_TYPE,
class HASHALG>
737template <
class CHAR_TYPE>
740 std::basic_ostream<CHAR_TYPE>& stream)
const
743 stream.write(data(), length());
751template <
class CHAR_TYPE>
758template <
class CHAR_TYPE>
759template <
class INT_TYPE>
762 const CHAR_TYPE *data,
766: Base(data, data + length)
772template <
class CHAR_TYPE>
775: Base(data, data + length)
780template <
class CHAR_TYPE>
789template <
class CHAR_TYPE>
792: Base(data, data + Base::cStringLength(data))
797template <
class CHAR_TYPE>
805template <
class CHAR_TYPE>
808: Base(str.data(), str.data() + str.length())
812template <
class CHAR_TYPE>
815: Base(str.data(), str.data() + str.length())
819#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_PMR_STRING
820template <
class CHAR_TYPE>
823 const std::pmr::basic_string<CHAR_TYPE>& str)
824: Base(str.data(), str.data() + str.length())
829template <
class CHAR_TYPE>
835: Base(original.begin() + startIndex,
836 original.begin() + startIndex +
837 std::min(numCharacters, original.length() - startIndex))
844template <
class CHAR_TYPE>
845template <
class INT_TYPE>
848 const CHAR_TYPE *data,
858template <
class CHAR_TYPE>
867template <
class CHAR_TYPE>
874template <
class CHAR_TYPE>
882 data + std::char_traits<CHAR_TYPE>::length(data));
885template <
class CHAR_TYPE>
892template <
class CHAR_TYPE>
899template <
class CHAR_TYPE>
907template <
class CHAR_TYPE>
914 return begin()[index];
919template <
class CHAR_TYPE>
923 return std::basic_string<CHAR_TYPE>(begin(), end());
928template <
class CHAR_TYPE>
936template <
class CHAR_TYPE>
941 return Base::data() + Base::size();
944template <
class CHAR_TYPE>
952template <
class CHAR_TYPE>
960template <
class CHAR_TYPE>
967template <
class CHAR_TYPE>
971 return begin() == end();
974template <
class CHAR_TYPE>
978 return begin() == end();
981template <
class CHAR_TYPE>
986 return end() - begin();
989template <
class CHAR_TYPE>
994 return end() - begin();
997template <
class CHAR_TYPE>
1006 int result = std::char_traits<CHAR_TYPE>::compare(
1009 std::min(this->length(), other.
length()));
1011 if (result == 0 && this->length() != other.
length()) {
1012 result = this->length() < other.
length() ? -1 : 1;
1021template <
class CHAR_TYPE>
1034 const const_iterator end = a.
end();
1035 for (const_iterator pc = a.
begin(); pc < end; ++pc, ++b) {
1055 return std::char_traits<CHAR_TYPE>::compare(pc,
1064template <
class CHAR_TYPE>
1075template <
class CHAR_TYPE>
1083 const const_iterator end = a.
end();
1085 for (const_iterator pc = a.
begin(); pc < end; ++pc, c = *++b) {
1086 if (0 == c || *pc != c) {
1096template <
class CHAR_TYPE>
1099 const StringRefImp<CHAR_TYPE>& rhs)
1103 result.
reserve(lhs.length() + rhs.length());
1104 result.
assign(lhs.begin(), lhs.end());
1105 result.
append(rhs.begin(), rhs.end());
1110template <
class CHAR_TYPE>
1114 const StringRefImp<CHAR_TYPE>& rhs)
1116 return StringRefImp<CHAR_TYPE>(lhs) +
rhs;
1119template <
class CHAR_TYPE>
1125 return lhs + StringRefImp<CHAR_TYPE>(rhs);
1128template <
class CHAR_TYPE>
1132 const StringRefImp<CHAR_TYPE>& rhs)
1134 return StringRefImp<CHAR_TYPE>(lhs) +
rhs;
1137template <
class CHAR_TYPE>
1141 const std::basic_string<CHAR_TYPE>& rhs)
1143 return lhs + StringRefImp<CHAR_TYPE>(rhs);
1146template <
class CHAR_TYPE>
1150 const StringRefImp<CHAR_TYPE>& rhs)
1155 return StringRefImp<CHAR_TYPE>(lhs) +
rhs;
1158template <
class CHAR_TYPE>
1162 const CHAR_TYPE *rhs)
1167 return lhs + StringRefImp<CHAR_TYPE>(rhs);
1170template <
class CHAR_TYPE,
class HASHALG>
1173 const StringRefImp<CHAR_TYPE>& input)
1175 using ::BloombergLP::bslh::hashAppend;
1176 hashAlg(input.data(),
sizeof(CHAR_TYPE)*input.length());
1180#if defined(BSLS_COMPILERFEATURES_SUPPORT_EXTERN_TEMPLATE)
1187operator+(
const StringRefImp<char>& lhs,
const StringRefImp<char>& rhs);
1191operator+(
const StringRefImp<wchar_t>& lhs,
const StringRefImp<wchar_t>& rhs);
1197#ifndef BDE_OPENSOURCE_PUBLICATION
1202#ifdef bslstl_StringRefImp
1203#undef bslstl_StringRefImp
1206#define bslstl_StringRefImp bslstl::StringRefImp
1208#ifdef bslstl_StringRefWide
1209#undef bslstl_StringRefWide
1212#define bslstl_StringRefWide bslstl::StringRefWide
1214#ifdef bslstl_StringRef
1215#undef bslstl_StringRef
1218#define bslstl_StringRef bslstl::StringRef
Definition bslstl_stringview.h:471
Definition bslstl_string.h:1252
size_type length() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_string.h:7301
basic_string & assign(const basic_string &replacement)
Definition bslstl_string.h:6347
CHAR_TYPE * data() BSLS_KEYWORD_NOEXCEPT
Definition bslstl_string.h:7177
void reserve(size_type newCapacity)
Definition bslstl_string.h:6020
basic_string & append(const basic_string &suffix)
Definition bslstl_string.h:6188
Definition bslstl_stringrefdata.h:214
Definition bslstl_stringref.h:374
const CHAR_TYPE & const_reference
Definition bslstl_stringref.h:384
bsl::reverse_iterator< const_iterator > const_reverse_iterator
Definition bslstl_stringref.h:387
bool empty() const
Definition bslstl_stringref.h:969
BSLMF_NESTED_TRAIT_DECLARATION(StringRefImp, bsl::is_trivially_copyable)
size_type size() const
Definition bslstl_stringref.h:992
void reset()
Definition bslstl_stringref.h:901
const_reverse_iterator rend() const
Definition bslstl_stringref.h:955
std::ptrdiff_t difference_type
Definition bslstl_stringref.h:388
const_reference operator[](size_type index) const
Definition bslstl_stringref.h:910
StringRefImp(const StringRefImp &original)=default
const CHAR_TYPE & reference
Definition bslstl_stringref.h:383
int compare(const StringRefImp &other) const
Definition bslstl_stringref.h:999
const CHAR_TYPE * const_iterator
Definition bslstl_stringref.h:386
const CHAR_TYPE * data() const
Definition bslstl_stringref.h:962
const CHAR_TYPE value_type
Definition bslstl_stringref.h:382
const_iterator end() const
Definition bslstl_stringref.h:939
bool isEmpty() const
Definition bslstl_stringref.h:976
StringRefImp()
Definition bslstl_stringref.h:753
const CHAR_TYPE * iterator
Definition bslstl_stringref.h:385
size_type length() const
Definition bslstl_stringref.h:984
void assign(const CHAR_TYPE *data, INT_TYPE length, typename bsl::enable_if< bsl::is_integral< INT_TYPE >::value, bslmf::Nil >::type=bslmf::Nil())
Definition bslstl_stringref.h:847
~StringRefImp()=default
Destroy this object.
StringRefImp & operator=(const StringRefImp &rhs)=default
std::size_t size_type
Standard Library general container requirements.
Definition bslstl_stringref.h:391
const_reverse_iterator rbegin() const
Definition bslstl_stringref.h:947
const_iterator begin() const
Definition bslstl_stringref.h:931
#define BSLS_ASSERT_SAFE(X)
Definition bsls_assert.h:1917
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
void hashAppend(HASH_ALGORITHM &hashAlgorithm, const BigEndianInt16 &object)
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
ALLOCATOR & lhs
Definition bslstl_string.h:3917
Definition bslstl_algorithm.h:84
StringRefImp< char > StringRef
Definition bslstl_stringref.h:725
RandomAccessIterator< T, ITER_IMP, TAG_TYPE > operator+(const RandomAccessIterator< T, ITER_IMP, TAG_TYPE > &lhs, std::ptrdiff_t rhs)
void hashAppend(HASHALG &hashAlg, const StringRefImp< CHAR_TYPE > &input)
Pass the specified input to the specified hashAlg
StringRefImp< wchar_t > StringRefWide
Definition bslstl_stringref.h:726
Definition bdldfp_decimal.h:5549
Definition bslmf_enableif.h:530
Definition bslmf_isintegral.h:140
Definition bslmf_istriviallycopyable.h:324
Definition bslmf_nil.h:133
Definition bslstl_stringref.h:651
static int compare(const StringRefImp< CHAR_TYPE > &a, const CHAR_TYPE *b)
Definition bslstl_stringref.h:1022
static bool compareEqual(const StringRefImp< CHAR_TYPE > &a, const StringRefImp< CHAR_TYPE > &b)
Definition bslstl_stringref.h:1066