8#ifndef INCLUDED_BSLSTL_STRINGBUF
9#define INCLUDED_BSLSTL_STRINGBUF
185#include <bslscm_version.h>
215#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
220#ifndef BDE_OMIT_INTERNAL_DEPRECATED
221#ifndef BDE_DONT_ALLOW_TRANSITIVE_INCLUDES
228#ifdef BSLS_ASSERTIMPUTIL_AVOID_STRING_CONSTANTS
229extern const char s_bslstl_stringbuf_h[];
230#undef BSLS_ASSERTIMPUTIL_FILE
231#define BSLS_ASSERTIMPUTIL_FILE BloombergLP::s_bslstl_stringbuf_h
246template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
248 :
public std::basic_streambuf<CHAR_TYPE, CHAR_TRAITS> {
252 typedef std::basic_streambuf<CHAR_TYPE, CHAR_TRAITS> BaseType;
256 typedef BloombergLP::bslmf::MovableRefUtil MoveUtil;
288 ios_base::openmode d_mode;
342 void updateStreamPositions(
off_type inputOffset = 0,
356 bool extendInputArea();
376 bool arePointersValid(
const char_type *first,
398 ios_base::seekdir whence,
399 ios_base::openmode modeBitMask = ios_base::in | ios_base::out);
409 ios_base::openmode modeBitMask = ios_base::in | ios_base::out);
421 std::streamsize numCharacters);
467 std::streamsize numCharacters);
506 ios_base::openmode modeBitMask,
526 ios_base::openmode modeBitMask);
529 ios_base::openmode modeBitMask,
542 template <
class SALLOC>
552 , d_str(initialString.
data(), initialString.size(),
allocator)
553 , d_endHint(initialString.size())
554 , d_mode(ios_base::in | ios_base::out)
557 updateStreamPositions();
572 template <
class SALLOC>
576 ios_base::openmode modeBitMask,
581 , d_str(initialString.
data(), initialString.size(),
allocator)
582 , d_endHint(initialString.size())
583 , d_mode(modeBitMask)
586 updateStreamPositions(0, d_mode & ios_base::ate ? d_endHint : 0);
601 template <
class STRING_VIEW_LIKE_TYPE>
604 const STRING_VIEW_LIKE_TYPE& initialString,
608 , d_str(ViewType(initialString).
data(),
609 ViewType(initialString).size(),
611 , d_endHint(ViewType(initialString).size())
612 , d_mode(ios_base::in | ios_base::out)
615 updateStreamPositions();
631 template <
class STRING_VIEW_LIKE_TYPE>
633 ios_base::openmode modeBitMask,
637 d_str(ViewType(initialString).
data(),
638 ViewType(initialString).size(),
640 , d_endHint(ViewType(initialString).size())
641 , d_mode(modeBitMask)
644 updateStreamPositions(0, d_mode & ios_base::ate ? d_endHint : 0);
647#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
664#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
680 void str(
const StringType& value);
681 void str(BloombergLP::bslmf::MovableRef<StringType> value);
682 template <
class SALLOC>
689 d_endHint = d_str.
size();
690 updateStreamPositions(0, d_mode & ios_base::ate ? d_endHint : 0);
697 template <
class STRING_VIEW_LIKE_TYPE>
699 str(const STRING_VIEW_LIKE_TYPE& value)
703 d_str.
assign(sv.data(), sv.size());
704 d_endHint = d_str.
size();
705 updateStreamPositions(0, d_mode & ios_base::ate ? d_endHint : 0);
708#ifdef BSLS_COMPILERFEATURES_SUPPORT_REF_QUALIFIERS
722#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
751#ifdef BSLS_COMPILERFEATURES_SUPPORT_REF_QUALIFIERS
752 StringType
str() const &;
754 StringType
str()
const;
757#ifndef BSLS_PLATFORM_CMP_SUN
770 template <
class SALLOC>
772 bsl::IsStdAllocator<SALLOC>::value,
795#if defined(BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY) \
796 && defined(BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE)
802template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
834template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
842 typedef BloombergLP::bslmf::MovableRefUtil MoveUtil;
845 StreamBufType d_bufObj;
873 ios_base::openmode modeBitMask,
875 : d_bufObj(initialString, modeBitMask,
allocator)
880 BloombergLP::bslmf::MovableRef<StringType> initialString,
881 ios_base::openmode modeBitMask,
883 : d_bufObj(MoveUtil::move(initialString), modeBitMask,
allocator)
888 BloombergLP::bslmf::MovableRef<StringType> initialString,
889 ios_base::openmode modeBitMask)
890 : d_bufObj(MoveUtil::move(initialString), modeBitMask)
894 template <
class STRING_ITER>
897 ios_base::openmode modeBitMask,
902 d_bufObj.str(MoveUtil::move(tempStr));
913 template <
class STRING_VIEW_LIKE_TYPE>
915 const STRING_VIEW_LIKE_TYPE& initialString,
916 ios_base::openmode modeBitMask,
919 : d_bufObj(initialString, modeBitMask,
allocator)
923#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
930 : d_bufObj(
std::move(original.d_bufObj))
938 StringBufContainer(StringBufContainer&& original,
939 const ALLOCATOR& allocator)
940 : d_bufObj(
std::move(original.d_bufObj), allocator)
949#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
957 d_bufObj = std::move(
rhs.d_bufObj);
963#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
969 d_bufObj.swap(other.d_bufObj);
976 return const_cast<StreamBufType *
>(&d_bufObj);
989template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
991basic_stringbuf<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::
992 updateInputPointers(
char_type *currentInputPosition)
997 &d_str[0] +
static_cast<std::ptrdiff_t
>(streamSize()));
1002 currentInputPosition,
1003 dataPtr +
static_cast<std::ptrdiff_t
>(streamSize()));
1004 return pos_type(currentInputPosition - dataPtr);
1007template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1009basic_stringbuf<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::
1010 updateOutputPointers(
char_type *currentOutputPosition)
1017 std::size_t dataSize = d_str.
size();
1019 pos_type outputPos = currentOutputPosition - dataPtr;
1020 this->setp(dataPtr, dataPtr + dataSize);
1022 while (bumpAmount > INT_MAX) {
1023 this->pbump(INT_MAX);
1024 bumpAmount -= INT_MAX;
1027 this->pbump(
int(bumpAmount));
1032template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1033void basic_stringbuf<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::
1042 if (d_mode & ios_base::out) {
1045 std::size_t dataSize = d_str.
size();
1046 this->setp(dataPtr, dataPtr + dataSize);
1047 off_type bumpAmount = outputOffset;
1048 while (bumpAmount < INT_MIN) {
1049 this->pbump(INT_MIN);
1050 bumpAmount -= INT_MIN;
1052 while (bumpAmount > INT_MAX) {
1053 this->pbump(INT_MAX);
1054 bumpAmount -= INT_MAX;
1057 this->pbump(
int(bumpAmount));
1061 if (d_mode & ios_base::in) {
1065 dataPtr + inputOffset,
1066 dataPtr +
static_cast<std::ptrdiff_t
>(streamSize()));
1070template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1071bool basic_stringbuf<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::extendInputArea()
1075 if (d_mode & ios_base::out && this->pptr() > this->egptr()) {
1076 d_endHint = streamSize();
1077 updateInputPointers(this->gptr());
1085template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1087 basic_stringbuf<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::streamSize()
const
1090 this->pptr() - this->pbase());
1097template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1098bool basic_stringbuf<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::arePointersValid(
1103 const bool isNull = first == 0;
1106 return first == bufferBegin
1107 && last <= bufferEnd
1113template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1117 ios_base::seekdir whence,
1118 ios_base::openmode modeBitMask)
1123 if (((modeBitMask & (ios_base::in | ios_base::out)) ==
1124 (ios_base::in | ios_base::out))
1125 && whence == ios_base::cur) {
1133 if ((modeBitMask & ios_base::in) && (d_mode & ios_base::in)) {
1137 case ios_base::beg: {
1138 inputPtr = this->eback() + offset;
1140 case ios_base::cur: {
1141 inputPtr = this->gptr() + offset;
1143 case ios_base::end: {
1144 inputPtr = this->eback()
1145 +
static_cast<std::ptrdiff_t
>(streamSize())
1153 if (inputPtr < this->eback()
1155 this->eback() +
static_cast<std::ptrdiff_t
>(streamSize())) {
1161 newPos = updateInputPointers(inputPtr);
1166 if ((modeBitMask & ios_base::out) && (d_mode & ios_base::out)) {
1170 case ios_base::beg: {
1171 outputPtr = this->pbase() + offset;
1173 case ios_base::cur: {
1174 outputPtr = this->pptr() + offset;
1176 case ios_base::end: {
1177 outputPtr = this->pbase()
1178 +
static_cast<std::ptrdiff_t
>(streamSize())
1186 if (outputPtr < this->pbase()
1188 this->pbase() +
static_cast<std::ptrdiff_t
>(streamSize())) {
1194 newPos = updateOutputPointers(outputPtr);
1200template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1205 ios_base::openmode modeBitMask)
1212template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1216 std::streamsize numCharacters)
1218 if ((d_mode & ios_base::in) == 0) {
1227 if (this->gptr() != this->egptr()) {
1230 std::streamsize available = this->egptr() - this->gptr();
1231 std::streamsize readChars = std::min(available,
1234 traits_type::copy(result, this->gptr(), std::size_t(readChars));
1235 this->gbump(
int(readChars));
1243template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1247 if ((d_mode & ios_base::in) == 0) {
1248 return traits_type::eof();
1251 if (this->gptr() != this->egptr()) {
1254 return traits_type::to_int_type(*this->gptr());
1257 if (extendInputArea()) {
1264 return traits_type::eof();
1267template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1271 if ((d_mode & ios_base::in) == 0) {
1272 return traits_type::eof();
1275 if (this->gptr() != this->egptr()) {
1278 int_type c = traits_type::to_int_type(*this->gptr());
1283 if (extendInputArea()) {
1290 return traits_type::eof();
1293template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1298 if (this->gptr() == this->eback()) {
1302 return traits_type::eof();
1305 if (traits_type::eq_int_type(character, traits_type::eof())
1306 || traits_type::eq_int_type(
1308 traits_type::to_int_type(*(this->gptr() - 1)))) {
1313 return traits_type::to_int_type(*this->gptr());
1316 if (d_mode & ios_base::out) {
1321 *this->gptr() = traits_type::to_char_type(character);
1325 return traits_type::eof();
1328template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1332 std::streamsize numCharacters)
1334 if ((d_mode & ios_base::out) == 0) {
1342 std::streamsize spaceLeft = d_str.
data() + d_str.
size() - this->pptr();
1343 std::ptrdiff_t toOverwrite =
1344 std::ptrdiff_t(std::min(spaceLeft, numCharacters));
1349 traits_type::copy(this->pptr(), inputString, toOverwrite);
1351 off_type inputOffset = this->gptr() - this->eback();
1353 if (numCharacters == toOverwrite) {
1357 off_type newHigh = numCharacters + this->pptr() - this->pbase();
1358 d_endHint = std::max(d_endHint, newHigh);
1360 updateStreamPositions(inputOffset, newHigh);
1366 d_str.
append(inputString + toOverwrite, inputString + numCharacters);
1371 d_endHint = d_str.
size();
1372 updateStreamPositions(inputOffset, d_endHint);
1375 return numCharacters;
1378template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1383 if ((d_mode & ios_base::out) == 0) {
1384 return traits_type::eof();
1387 if (traits_type::eq_int_type(character, traits_type::eof())) {
1390 return traits_type::not_eof(character);
1393 char_type c = traits_type::to_char_type(character);
1394 if (this->pptr() != this->epptr()) {
1401 d_endHint = streamSize();
1407 off_type inputOffset = this->gptr() - this->eback();
1417 d_endHint = d_str.
size();
1418 updateStreamPositions(inputOffset, d_endHint);
1425template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1431, d_mode(ios_base::in | ios_base::out)
1433 updateStreamPositions();
1436template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1443, d_mode(modeBitMask)
1445 updateStreamPositions();
1448template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1454, d_endHint(initialString.size())
1455, d_mode(ios_base::in | ios_base::out)
1457 updateStreamPositions();
1460template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1464 ios_base::openmode modeBitMask,
1468, d_endHint(initialString.size())
1469, d_mode(modeBitMask)
1471 updateStreamPositions(0, d_mode & ios_base::ate ? d_endHint : 0);
1474template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1477 basic_stringbuf(BloombergLP::bslmf::MovableRef<StringType> initialString)
1479, d_str(MoveUtil::move(initialString))
1480, d_endHint(d_str.size())
1481, d_mode(ios_base::in | ios_base::out)
1483 updateStreamPositions();
1486template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1489 basic_stringbuf(BloombergLP::bslmf::MovableRef<StringType> initialString,
1492, d_str(MoveUtil::move(initialString),
allocator)
1493, d_endHint(d_str.size())
1494, d_mode(ios_base::in | ios_base::out)
1496 updateStreamPositions();
1499template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1502 basic_stringbuf(BloombergLP::bslmf::MovableRef<StringType> initialString,
1503 ios_base::openmode modeBitMask)
1505, d_str(MoveUtil::move(initialString))
1506, d_endHint(d_str.size())
1507, d_mode(modeBitMask)
1509 updateStreamPositions(0, d_mode & ios_base::ate ? d_endHint : 0);
1512template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1515 basic_stringbuf(BloombergLP::bslmf::MovableRef<StringType> initialString,
1516 ios_base::openmode modeBitMask,
1519, d_str(MoveUtil::move(initialString),
allocator)
1520, d_endHint(d_str.size())
1521, d_mode(modeBitMask)
1523 updateStreamPositions(0, d_mode & ios_base::ate ? d_endHint : 0);
1526#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
1527template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1532, d_str(
std::move(original.d_str))
1533, d_endHint(
std::move(original.d_endHint))
1534, d_mode(
std::move(original.d_mode))
1538 const off_type inputOffset = original.gptr() - original.eback();
1539 const off_type outputOffset = original.pptr() - original.pbase();
1540 updateStreamPositions(inputOffset, outputOffset);
1542 this->pubimbue(original.getloc());
1544 if (original.d_endHint > 0 &&
1545 static_cast<size_t>(original.d_endHint) > original.d_str.size()) {
1549 original.d_endHint = 0;
1550 original.updateStreamPositions();
1554template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1556basic_stringbuf<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::
1557 basic_stringbuf(basic_stringbuf&& original,
1558 const allocator_type& allocator)
1560, d_str(
std::move(original.d_str), allocator)
1561, d_endHint(
std::move(original.d_endHint))
1562, d_mode(
std::move(original.d_mode))
1566 const off_type inputOffset = original.gptr() - original.eback();
1567 const off_type outputOffset = original.pptr() - original.pbase();
1568 updateStreamPositions(inputOffset, outputOffset);
1570 this->pubimbue(original.getloc());
1572 if (original.d_endHint > 0 &&
1573 static_cast<size_t>(original.d_endHint) > original.d_str.size()) {
1577 original.d_endHint = 0;
1578 original.updateStreamPositions();
1583template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1587 if (d_mode & ios_base::in) {
1593 if (d_mode & ios_base::out) {
1601#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
1602template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1610 const off_type inputOffset =
rhs.gptr() -
rhs.eback();
1611 const off_type inputSize =
rhs.egptr() -
rhs.eback();
1612 const off_type outputOffset =
rhs.pptr() -
rhs.pbase();
1613 const off_type outputSize =
rhs.epptr() -
rhs.pbase();
1615 this->pubimbue(
rhs.getloc());
1617 d_str = std::move(
rhs.d_str);
1618 d_endHint = std::move(
rhs.d_endHint);
1619 d_mode = std::move(
rhs.d_mode);
1623 char_type *dataPtr = &d_str[0];
1627 this->setp(dataPtr, dataPtr + outputSize);
1628 this->pbump(
static_cast<int>(outputOffset));
1630 dataPtr + inputOffset,
1631 dataPtr + inputSize);
1635 if (
rhs.d_endHint > 0 &&
1636 static_cast<size_t>(
rhs.d_endHint) >
rhs.d_str.size()) {
1641 rhs.updateStreamPositions();
1648template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1653 d_endHint = d_str.
size();
1654 updateStreamPositions(0, d_mode & ios_base::ate ? d_endHint : 0);
1657template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1659 BloombergLP::bslmf::MovableRef<StringType> value)
1663 d_str = MoveUtil::move(lvalue);
1664 d_endHint = d_str.
size();
1665 updateStreamPositions(0, d_mode & ios_base::ate ? d_endHint : 0);
1668#ifdef BSLS_COMPILERFEATURES_SUPPORT_REF_QUALIFIERS
1669template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1673 if (d_mode & ios_base::out) {
1674 d_str.
resize(
static_cast<typename StringType::size_type
>(streamSize()));
1675 this->setp(d_str.
data(), d_str.
data());
1677 else if (d_mode & ios_base::in) {
1678 if (streamSize() > 0) {
1679 if (this->eback() != d_str.
data()) {
1680 d_str.
erase(0, this->eback() - d_str.
data());
1682 d_str.
resize(
static_cast<typename StringType::size_type
>(
1688 StringType ret = std::move(d_str);
1690 updateStreamPositions();
1695#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
1696template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1697void basic_stringbuf<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::swap(
1698 basic_stringbuf& other)
1708 const off_type inputOffset = this->gptr() - this->eback();
1709 const off_type outputOffset = this->pptr() - this->pbase();
1710 const std::locale loc = this->getloc();
1712 const off_type otherInputOffset = other.gptr() - other.eback();
1713 const off_type otherOutputOffset = other.pptr() - other.pbase();
1714 const std::locale otherLoc = other.getloc();
1718 this->BaseType::swap(other);
1722 this->pubimbue(otherLoc);
1723 other.pubimbue(loc);
1725 d_str.swap(other.d_str);
1726 BloombergLP::bslalg::SwapUtil::swap(&this->d_endHint, &other.d_endHint);
1727 BloombergLP::bslalg::SwapUtil::swap(&this->d_mode, &other.d_mode);
1731 this->updateStreamPositions(otherInputOffset, otherOutputOffset);
1732 other.updateStreamPositions( inputOffset, outputOffset);
1737template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1746template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1749#ifdef BSLS_COMPILERFEATURES_SUPPORT_REF_QUALIFIERS
1758template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1760typename basic_stringbuf<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::ViewType
1764 if (d_mode & ios_base::out) {
1765 return ViewType(d_str.
begin(),
1766 static_cast<std::ptrdiff_t
>(streamSize()));
1769 if (d_mode & ios_base::in) {
1770 return ViewType(this->eback(), this->egptr() - this->eback());
1779#if defined(BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY) \
1780 && defined(BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE)
1781template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1782void bsl::swap(basic_stringbuf<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>& a,
1783 basic_stringbuf<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>& b)
1785 typedef BloombergLP::bslmf::MovableRefUtil MoveUtil;
1787 if (a.get_allocator() == b.get_allocator()
1792 basic_stringbuf<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR> aCopy(
1795 basic_stringbuf<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR> bCopy(
1811template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
1813 bsl::basic_stringbuf<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR> >
1821#ifdef BSLS_ASSERTIMPUTIL_AVOID_STRING_CONSTANTS
1822#undef BSLS_ASSERTIMPUTIL_FILE
1823#define BSLS_ASSERTIMPUTIL_FILE BSLS_ASSERTIMPUTIL_DEFAULTFILE
Definition bslstl_stringbuf.h:835
StreamBufType * rdbuf() const
Definition bslstl_stringbuf.h:974
StringBufContainer(const StringType &initialString, ios_base::openmode modeBitMask, const ALLOCATOR &allocator)
Definition bslstl_stringbuf.h:872
StringBufContainer(ios_base::openmode modeBitMask, const ALLOCATOR &allocator)
Definition bslstl_stringbuf.h:860
StringBufContainer(BloombergLP::bslmf::MovableRef< StringType > initialString, ios_base::openmode modeBitMask)
Definition bslstl_stringbuf.h:887
StringBufContainer(const ALLOCATOR &allocator)
Definition bslstl_stringbuf.h:855
StringBufContainer(STRING_ITER first, STRING_ITER last, ios_base::openmode modeBitMask, const ALLOCATOR &allocator)
Definition bslstl_stringbuf.h:895
StringBufContainer(const StringType &initialString, const ALLOCATOR &allocator)
Definition bslstl_stringbuf.h:866
StringBufContainer(BloombergLP::bslmf::MovableRef< StringType > initialString, ios_base::openmode modeBitMask, const ALLOCATOR &allocator)
Definition bslstl_stringbuf.h:879
StringBufContainer(const STRING_VIEW_LIKE_TYPE &initialString, ios_base::openmode modeBitMask, allocator)
Definition bslstl_stringbuf.h:914
~StringBufContainer()=default
Definition bslma_bslallocator.h:588
Definition bslstl_stringview.h:471
Definition bslstl_string.h:1252
basic_string & assign(const basic_string &replacement)
Definition bslstl_string.h:6347
size_type size() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_string.h:7292
allocator_type get_allocator() const BSLS_KEYWORD_NOEXCEPT
Return the allocator used by this string to supply memory.
Definition bslstl_string.h:7423
void push_back(CHAR_TYPE character)
Append the specified character to this string.
Definition bslstl_string.h:6330
CHAR_TYPE * data() BSLS_KEYWORD_NOEXCEPT
Definition bslstl_string.h:7177
void resize(size_type newLength, CHAR_TYPE character)
Definition bslstl_string.h:5977
void swap(basic_string &other) BSLS_KEYWORD_NOEXCEPT_SPECIFICATION(AllocatorTraits const_iterator begin() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_string.h:2792
basic_string & erase(size_type position=0, size_type numChars=npos)
Definition bslstl_string.h:6740
size_type capacity() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_string.h:7323
basic_string & append(const basic_string &suffix)
Definition bslstl_string.h:6188
Definition bslstl_stringbuf.h:248
ViewType view() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_stringbuf.h:1761
virtual pos_type seekoff(off_type offset, ios_base::seekdir whence, ios_base::openmode modeBitMask=ios_base::in|ios_base::out)
Definition bslstl_stringbuf.h:1115
virtual int_type pbackfail(int_type character=traits_type::eof())
Definition bslstl_stringbuf.h:1295
StringType str() const
Definition bslstl_stringbuf.h:1752
virtual pos_type seekpos(pos_type absoluteOffset, ios_base::openmode modeBitMask=ios_base::in|ios_base::out)
Definition bslstl_stringbuf.h:1203
traits_type::off_type off_type
Definition bslstl_stringbuf.h:264
basic_stringbuf(const bsl::basic_string< CHAR_TYPE, CHAR_TRAITS, SALLOC > &initialString, const allocator_type &allocator=allocator_type(), typename bsl::enable_if< !bsl::is_same< ALLOCATOR, SALLOC >::value, void * >::type=0)
Definition bslstl_stringbuf.h:544
virtual std::streamsize xsgetn(char_type *result, std::streamsize numCharacters)
Definition bslstl_stringbuf.h:1214
allocator_type get_allocator() const BSLS_KEYWORD_NOEXCEPT
Return the allocator used by the underlying string to supply memory.
Definition bslstl_stringbuf.h:1740
CHAR_TYPE char_type
Definition bslstl_stringbuf.h:260
bsl::enable_if< bsl::IsStdAllocator< SALLOC >::value, basic_string< CHAR_TYPE, CHAR_TRAITS, SALLOC > >::type str(const SALLOC &allocator) const
Definition bslstl_stringbuf.h:774
CHAR_TRAITS traits_type
Definition bslstl_stringbuf.h:261
~basic_stringbuf()
Destroy this object.
Definition bslstl_stringbuf.h:1585
virtual int_type uflow()
Definition bslstl_stringbuf.h:1269
basic_stringbuf(const bsl::basic_string< CHAR_TYPE, CHAR_TRAITS, SALLOC > &initialString, ios_base::openmode modeBitMask, const allocator_type &allocator=allocator_type(), typename bsl::enable_if< !bsl::is_same< ALLOCATOR, SALLOC >::value, void * >::type=0)
Definition bslstl_stringbuf.h:573
basic_stringbuf(const STRING_VIEW_LIKE_TYPE &initialString, allocator=allocator_type())
Definition bslstl_stringbuf.h:603
virtual std::streamsize xsputn(const char_type *inputString, std::streamsize numCharacters)
Definition bslstl_stringbuf.h:1330
virtual int_type underflow()
Definition bslstl_stringbuf.h:1245
traits_type::int_type int_type
Definition bslstl_stringbuf.h:263
traits_type::pos_type pos_type
Definition bslstl_stringbuf.h:265
basic_stringbuf(const STRING_VIEW_LIKE_TYPE &initialString, ios_base::openmode modeBitMask, BSLSTL_STRINGVIEWLIKEPARAM_ONLY_ENABLE_IF_T(const allocator_type &) allocator=allocator_type())
Definition bslstl_stringbuf.h:632
virtual int_type overflow(int_type character=traits_type::eof())
Definition bslstl_stringbuf.h:1380
bsl::enable_if<!bsl::is_same< ALLOCATOR, SALLOC >::value, void >::type str(const basic_string< CHAR_TYPE, CHAR_TRAITS, SALLOC > &value)
Definition bslstl_stringbuf.h:685
ALLOCATOR allocator_type
Definition bslstl_stringbuf.h:262
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_ASSERT_OPT_UNREACHABLE(X)
Definition bsls_assert.h:2065
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
#define BSLS_KEYWORD_NOEXCEPT
Definition bsls_keyword.h:674
#define BSLSTL_STRINGVIEWLIKEPARAM_ONLY_ENABLE_IF_T(...)
Definition bslstl_stringviewlikeparam.h:159
void swap(OptionValue &a, OptionValue &b)
bsl::size_t size(const TYPE &array)
Return the number of elements in the specified array.
bool isNull(const TYPE &object)
Definition bdlat_valuetypefunctions.h:939
basic_stringbuf< wchar_t, char_traits< wchar_t >, allocator< wchar_t > > wstringbuf
Definition bslstl_iosfwd.h:102
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
basic_stringbuf< char, char_traits< char >, allocator< char > > stringbuf
Definition bslstl_iosfwd.h:93
CHAR_TRAITS
Definition bslstl_string.h:3917
BSLS_KEYWORD_CONSTEXPR CONTAINER::value_type * data(CONTAINER &container)
Definition bslstl_iterator.h:1325
Definition baljsn_encoder_testtypes.h:76
Definition bdldfp_decimal.h:5549
Definition bslma_allocatortraits.h:1089
Definition bslmf_enableif.h:530
Definition bslmf_issame.h:146
Definition bslma_usesbslmaallocator.h:344