8#ifndef INCLUDED_BSLSTL_OSTRINGSTREAM
9#define INCLUDED_BSLSTL_OSTRINGSTREAM
139#include <bslscm_version.h>
162#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
175template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
178 ,
public std::basic_ostream<CHAR_TYPE, CHAR_TRAITS> {
187 typedef std::basic_ostream<CHAR_TYPE, CHAR_TRAITS> BaseStream;
188 typedef std::ios_base ios_base;
190 typedef BloombergLP::bslmf::MovableRefUtil MoveUtil;
234 ios_base::openmode modeBitMask,
249 BloombergLP::bslmf::MovableRef<StringType> initialString);
251 BloombergLP::bslmf::MovableRef<StringType> initialString,
254 BloombergLP::bslmf::MovableRef<StringType> initialString,
255 ios_base::openmode modeBitMask);
257 BloombergLP::bslmf::MovableRef<StringType> initialString,
258 ios_base::openmode modeBitMask,
272 template <
class SALLOC>
279 : BaseType(initialString.
begin(),
283 , BaseStream(BaseType::
rdbuf())
301 template <
class SALLOC>
305 ios_base::openmode modeBitMask,
309 : BaseType(initialString.
begin(),
311 modeBitMask | ios_base::out,
313 , BaseStream(BaseType::
rdbuf())
331 template <
class STRING_VIEW_LIKE_TYPE>
334 const STRING_VIEW_LIKE_TYPE& initialString,
337 : BaseType(initialString, ios_base::out,
allocator)
338 , BaseStream(BaseType::
rdbuf())
358 template <
class STRING_VIEW_LIKE_TYPE>
360 const STRING_VIEW_LIKE_TYPE& initialString,
361 ios_base::openmode modeBitMask,
364 : BaseType(initialString, modeBitMask | ios_base::out,
allocator)
365 , BaseStream(BaseType::
rdbuf())
370#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
386#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
399 void str(BloombergLP::bslmf::MovableRef<StringType> value);
400 template <
class SALLOC>
406 return this->
rdbuf()->str(value);
413 template <
class STRING_VIEW_LIKE_TYPE>
415 str(const STRING_VIEW_LIKE_TYPE& value)
418 this->
rdbuf()->str(value);
421#ifdef BSLS_COMPILERFEATURES_SUPPORT_REF_QUALIFIERS
427#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
450 StreamBufType *
rdbuf() const;
452#ifdef BSLS_COMPILERFEATURES_SUPPORT_REF_QUALIFIERS
453 StringType
str() const &;
455 StringType
str()
const;
460#ifndef BSLS_PLATFORM_CMP_SUN
466 template <
class SALLOC>
468 bsl::IsStdAllocator<SALLOC>::value,
473 return this->
rdbuf()->str(allocator);
483#if defined(BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY) \
484 && defined(BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE)
490template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
508template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
510 bsl::basic_ostringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR> >
528template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
533, BaseStream(BaseType::rdbuf())
537template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
542: BaseType(modeBitMask | ios_base::out,
allocator)
543, BaseStream(BaseType::rdbuf())
547template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
552: BaseType(initialString, ios_base::out,
allocator)
553, BaseStream(BaseType::rdbuf())
557template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
561 ios_base::openmode modeBitMask,
563: BaseType(initialString, modeBitMask | ios_base::out,
allocator)
564, BaseStream(BaseType::rdbuf())
568template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
572: BaseType(MoveUtil::move(initialString), ios_base::out)
573, BaseStream(BaseType::rdbuf())
577template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
582: BaseType(MoveUtil::move(initialString), ios_base::out,
allocator)
583, BaseStream(BaseType::rdbuf())
587template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
591 ios_base::openmode modeBitMask)
592: BaseType(MoveUtil::move(initialString), modeBitMask | ios_base::out)
593, BaseStream(BaseType::rdbuf())
597template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
601 ios_base::openmode modeBitMask,
603: BaseType(MoveUtil::move(initialString),
604 modeBitMask | ios_base::out,
606, BaseStream(BaseType::rdbuf())
610#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
611template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
616: BaseType(
std::move(original))
617, BaseStream(
std::move(original))
619 BaseStream::set_rdbuf(BaseType::rdbuf());
622template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
624basic_ostringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::
625basic_ostringstream(basic_ostringstream&& original,
626 const allocator_type& allocator)
627: BaseType(
std::move(original), allocator)
628, BaseStream(
std::move(original))
630 BaseStream::set_rdbuf(BaseType::rdbuf());
635#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
636template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
638basic_ostringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>&
639basic_ostringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::
641operator=(basic_ostringstream&&
rhs)
643 this->BaseType::operator=(std::move(
rhs));
644 this->BaseStream::operator=(std::move(
rhs));
650template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
655 this->rdbuf()->str(value);
658template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
661 BloombergLP::bslmf::MovableRef<StringType> value)
663 this->rdbuf()->str(MoveUtil::move(value));
666#ifdef BSLS_COMPILERFEATURES_SUPPORT_REF_QUALIFIERS
667template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
672 return std::move(*this->rdbuf()).str();
676#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
677template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
680void basic_ostringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::swap(
681 basic_ostringstream& other)
683#ifdef BSLS_PLATFORM_CMP_GNU
684# pragma GCC diagnostic push
685# pragma GCC diagnostic ignored "-Wstringop-overflow"
689 || get_allocator() == other.get_allocator());
690 this->BaseType::swap(other);
691 this->BaseStream::swap(other);
692#ifdef BSLS_PLATFORM_CMP_GNU
693# pragma GCC diagnostic pop
699template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
705 return rdbuf()->get_allocator();
708template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
711 basic_ostringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::StreamBufType *
714 return this->BaseType::rdbuf();
717#ifdef BSLS_COMPILERFEATURES_SUPPORT_REF_QUALIFIERS
718template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
723 return this->rdbuf()->str();
726template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
728typename basic_ostringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::StringType
731 return this->rdbuf()->str();
735template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
737typename basic_ostringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::ViewType
741 return this->rdbuf()->view();
747#if defined(BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY) \
748 && defined(BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE)
749template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
751void bsl::swap(basic_ostringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>& a,
752 basic_ostringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>& b)
754 typedef BloombergLP::bslmf::MovableRefUtil MoveUtil;
756 if (a.get_allocator() == b.get_allocator()
761 basic_ostringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR> aCopy(
764 basic_ostringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR> bCopy(
Definition bslstl_stringbuf.h:835
Definition bslma_bslallocator.h:588
Definition bslstl_ostringstream.h:178
ALLOCATOR allocator_type
Definition bslstl_ostringstream.h:201
traits_type::pos_type pos_type
Definition bslstl_ostringstream.h:204
basic_ostringstream(const STRING_VIEW_LIKE_TYPE &initialString, ios_base::openmode modeBitMask, allocator=allocator_type())
Definition bslstl_ostringstream.h:359
CHAR_TYPE char_type
Definition bslstl_ostringstream.h:199
allocator_type get_allocator() const BSLS_KEYWORD_NOEXCEPT
Return the allocator used by the underlying buffer to supply memory.
Definition bslstl_ostringstream.h:702
StringType str() const
Definition bslstl_ostringstream.h:729
bsl::enable_if< bsl::IsStdAllocator< SALLOC >::value, basic_string< CHAR_TYPE, CHAR_TRAITS, SALLOC > >::type str(const SALLOC &allocator) const
Definition bslstl_ostringstream.h:470
ViewType view() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_ostringstream.h:738
basic_ostringstream(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_ostringstream.h:273
traits_type::off_type off_type
Definition bslstl_ostringstream.h:203
basic_ostringstream(const STRING_VIEW_LIKE_TYPE &initialString, allocator=allocator_type())
Definition bslstl_ostringstream.h:333
~basic_ostringstream()=default
bsl::enable_if<!bsl::is_same< ALLOCATOR, SALLOC >::value, void >::type str(const basic_string< CHAR_TYPE, CHAR_TRAITS, SALLOC > &value)
Definition bslstl_ostringstream.h:403
StreamBufType * rdbuf() const
Definition bslstl_ostringstream.h:712
traits_type::int_type int_type
Definition bslstl_ostringstream.h:202
basic_ostringstream(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_ostringstream.h:302
CHAR_TRAITS traits_type
Definition bslstl_ostringstream.h:200
Definition bslstl_stringview.h:471
Definition bslstl_string.h:1252
Definition bslstl_stringbuf.h:248
#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
void swap(OptionValue &a, OptionValue &b)
Definition bdlat_valuetypefunctions.h:939
basic_ostringstream< wchar_t, char_traits< wchar_t >, allocator< wchar_t > > wostringstream
Definition bslstl_iosfwd.h:106
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
basic_ostringstream< char, char_traits< char >, allocator< char > > ostringstream
Definition bslstl_iosfwd.h:97
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