8#ifndef INCLUDED_BSLSTL_STRINGSTREAM
9#define INCLUDED_BSLSTL_STRINGSTREAM
148#include <bslscm_version.h>
171#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
184template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
187 ,
public std::basic_iostream<CHAR_TYPE, CHAR_TRAITS> {
196 typedef std::basic_iostream<CHAR_TYPE, CHAR_TRAITS> BaseStream;
197 typedef std::ios_base ios_base;
199 typedef BloombergLP::bslmf::MovableRefUtil MoveUtil;
244 ios_base::openmode modeBitMask,
258 BloombergLP::bslmf::MovableRef<StringType> initialString);
260 BloombergLP::bslmf::MovableRef<StringType> initialString,
263 BloombergLP::bslmf::MovableRef<StringType> initialString,
264 ios_base::openmode modeBitMask);
266 BloombergLP::bslmf::MovableRef<StringType> initialString,
267 ios_base::openmode modeBitMask,
281 template <
class SALLOC>
289 : BaseType(initialString.
begin(),
291 ios_base::in | ios_base::out,
293 , BaseStream(BaseType::
rdbuf())
310 template <
class SALLOC>
314 ios_base::openmode modeBitMask,
318 : BaseType(initialString.
begin(),
322 , BaseStream(BaseType::
rdbuf())
340 template <
class STRING_VIEW_LIKE_TYPE>
343 const STRING_VIEW_LIKE_TYPE& initialString,
346 : BaseType(initialString, ios_base::in | ios_base::out,
allocator)
347 , BaseStream(BaseType::
rdbuf())
366 template <
class STRING_VIEW_LIKE_TYPE>
368 const STRING_VIEW_LIKE_TYPE& initialString,
369 ios_base::openmode modeBitMask,
372 : BaseType(initialString, modeBitMask,
allocator)
373 , BaseStream(BaseType::
rdbuf())
379#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
393#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
406 void str(BloombergLP::bslmf::MovableRef<StringType> value);
407 template <
class SALLOC>
413 return this->
rdbuf()->str(value);
420 template <
class STRING_VIEW_LIKE_TYPE>
422 str(const STRING_VIEW_LIKE_TYPE& value)
425 this->
rdbuf()->str(value);
428#ifdef BSLS_COMPILERFEATURES_SUPPORT_REF_QUALIFIERS
434#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
454 StreamBufType *
rdbuf()
const;
458#ifdef BSLS_COMPILERFEATURES_SUPPORT_REF_QUALIFIERS
459 StringType
str() const &;
461 StringType
str()
const;
464#ifndef BSLS_PLATFORM_CMP_SUN
470 template <
class SALLOC>
472 bsl::IsStdAllocator<SALLOC>::value,
477 return this->
rdbuf()->str(allocator);
487#if defined(BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY) \
488 && defined(BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE)
494template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
512template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
514 bsl::basic_stringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR> >
532template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
536: BaseType(ios_base::in | ios_base::out,
allocator)
537, BaseStream(BaseType::rdbuf())
541template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
547, BaseStream(BaseType::rdbuf())
551template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
556: BaseType(initialString, ios_base::in | ios_base::out,
allocator)
557, BaseStream(BaseType::rdbuf())
561template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
565 ios_base::openmode modeBitMask,
567: BaseType(initialString, modeBitMask,
allocator)
568, BaseStream(BaseType::rdbuf())
572template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
576: BaseType(MoveUtil::move(initialString), ios_base::in | ios_base::out)
577, BaseStream(BaseType::rdbuf())
581template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
586: BaseType(MoveUtil::move(initialString),
587 ios_base::in | ios_base::out,
589, BaseStream(BaseType::rdbuf())
593template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
597 ios_base::openmode modeBitMask)
598: BaseType(MoveUtil::move(initialString), modeBitMask)
599, BaseStream(BaseType::rdbuf())
603template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
607 ios_base::openmode modeBitMask,
609: BaseType(MoveUtil::move(initialString), modeBitMask,
allocator)
610, BaseStream(BaseType::rdbuf())
614#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
615template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
620: BaseType(
std::move(original))
621, BaseStream(
std::move(original))
623 BaseStream::set_rdbuf(BaseType::rdbuf());
628#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
629template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
631basic_stringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>&
632basic_stringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::
634operator=(basic_stringstream&&
rhs)
636 this->BaseType::operator=(std::move(
rhs));
637 this->BaseStream::operator=(std::move(
rhs));
643#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
644template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
647void basic_stringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::swap(
648 basic_stringstream& other)
650#ifdef BSLS_PLATFORM_CMP_GNU
651# pragma GCC diagnostic push
652# pragma GCC diagnostic ignored "-Wstringop-overflow"
656 || this->rdbuf()->get_allocator()
657 == other.rdbuf()->get_allocator());
658 this->BaseType::swap(other);
659 this->BaseStream::swap(other);
660#ifdef BSLS_PLATFORM_CMP_GNU
661# pragma GCC diagnostic pop
666template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
671 this->rdbuf()->str(value);
674template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
677 BloombergLP::bslmf::MovableRef<StringType> value)
679 this->rdbuf()->str(MoveUtil::move(value));
682#ifdef BSLS_COMPILERFEATURES_SUPPORT_REF_QUALIFIERS
683template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
688 return std::move(*this->rdbuf()).str();
693template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
695typename basic_stringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::StreamBufType *
698 return this->BaseType::rdbuf();
701#ifdef BSLS_COMPILERFEATURES_SUPPORT_REF_QUALIFIERS
702template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
707 return this->rdbuf()->str();
710template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
712typename basic_stringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::StringType
715 return this->rdbuf()->str();
719template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
721typename basic_stringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::ViewType
725 return this->rdbuf()->view();
731#if defined(BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY) \
732 && defined(BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE)
733template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
735void bsl::swap(basic_stringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>& a,
736 basic_stringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>& b)
Definition bslstl_stringbuf.h:835
Definition bslma_bslallocator.h:588
Definition bslstl_stringview.h:471
Definition bslstl_string.h:1252
Definition bslstl_stringbuf.h:248
Definition bslstl_stringstream.h:187
CHAR_TRAITS traits_type
Definition bslstl_stringstream.h:209
basic_stringstream(const STRING_VIEW_LIKE_TYPE &initialString, ios_base::openmode modeBitMask, allocator=allocator_type())
Definition bslstl_stringstream.h:367
traits_type::pos_type pos_type
Definition bslstl_stringstream.h:213
StringType str() const
Definition bslstl_stringstream.h:713
traits_type::int_type int_type
Definition bslstl_stringstream.h:211
basic_stringstream(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_stringstream.h:283
basic_stringstream(const STRING_VIEW_LIKE_TYPE &initialString, allocator=allocator_type())
Definition bslstl_stringstream.h:342
bsl::enable_if< bsl::IsStdAllocator< SALLOC >::value, basic_string< CHAR_TYPE, CHAR_TRAITS, SALLOC > >::type str(const SALLOC &allocator) const
Definition bslstl_stringstream.h:474
traits_type::off_type off_type
Definition bslstl_stringstream.h:212
~basic_stringstream()=default
Destroy this object.
bsl::enable_if<!bsl::is_same< ALLOCATOR, SALLOC >::value, void >::type str(const basic_string< CHAR_TYPE, CHAR_TRAITS, SALLOC > &value)
Definition bslstl_stringstream.h:410
CHAR_TYPE char_type
Definition bslstl_stringstream.h:208
StreamBufType * rdbuf() const
Definition bslstl_stringstream.h:696
ALLOCATOR allocator_type
Definition bslstl_stringstream.h:210
ViewType view() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_stringstream.h:722
basic_stringstream(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_stringstream.h:311
#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
#define BSLS_KEYWORD_NOEXCEPT
Definition bsls_keyword.h:674
#define BSLSTL_STRINGVIEWLIKEPARAM_ONLY_ENABLE_IF_T(...)
Definition bslstl_stringviewlikeparam.h:159
Definition bdlat_valuetypefunctions.h:939
basic_stringstream< wchar_t, char_traits< wchar_t >, allocator< wchar_t > > wstringstream
Definition bslstl_iosfwd.h:108
basic_stringstream< char, char_traits< char >, allocator< char > > stringstream
Definition bslstl_iosfwd.h:99
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
T::iterator begin(T &container)
Definition bslstl_iterator.h:1593
CHAR_TRAITS
Definition bslstl_string.h:3917
T::iterator end(T &container)
Definition bslstl_iterator.h:1621
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