8#ifndef INCLUDED_BSLSTL_ISTRINGSTREAM
9#define INCLUDED_BSLSTL_ISTRINGSTREAM
140#include <bslscm_version.h>
163#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
176template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
179 ,
public std::basic_istream<CHAR_TYPE, CHAR_TRAITS> {
188 typedef std::basic_istream<CHAR_TYPE, CHAR_TRAITS> BaseStream;
189 typedef std::ios_base ios_base;
191 typedef BloombergLP::bslmf::MovableRefUtil MoveUtil;
236 ios_base::openmode modeBitMask,
251 BloombergLP::bslmf::MovableRef<StringType> initialString);
253 BloombergLP::bslmf::MovableRef<StringType> initialString,
256 BloombergLP::bslmf::MovableRef<StringType> initialString,
257 ios_base::openmode modeBitMask);
259 BloombergLP::bslmf::MovableRef<StringType> initialString,
260 ios_base::openmode modeBitMask,
274 template <
class SALLOC>
281 : BaseType(initialString.
begin(),
285 , BaseStream(BaseType::
rdbuf())
302 template <
class SALLOC>
306 ios_base::openmode modeBitMask,
310 : BaseType(initialString.
begin(),
312 modeBitMask | ios_base::in,
314 , BaseStream(BaseType::
rdbuf())
332 template <
class STRING_VIEW_LIKE_TYPE>
335 const STRING_VIEW_LIKE_TYPE& initialString,
338 : BaseType(initialString, ios_base::in,
allocator)
339 , BaseStream(BaseType::
rdbuf())
359 template <
class STRING_VIEW_LIKE_TYPE>
361 const STRING_VIEW_LIKE_TYPE& initialString,
362 ios_base::openmode modeBitMask,
365 : BaseType(initialString, modeBitMask | ios_base::in,
allocator)
366 , BaseStream(BaseType::
rdbuf())
371#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
384#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
397 void str(BloombergLP::bslmf::MovableRef<StringType> value);
398 template <
class SALLOC>
404 this->
rdbuf()->str(value);
411 template <
class STRING_VIEW_LIKE_TYPE>
413 str(const STRING_VIEW_LIKE_TYPE& value)
416 this->
rdbuf()->str(value);
419#ifdef BSLS_COMPILERFEATURES_SUPPORT_REF_QUALIFIERS
425#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
445 StreamBufType *
rdbuf()
const;
447#ifdef BSLS_COMPILERFEATURES_SUPPORT_REF_QUALIFIERS
448 StringType
str() const &;
450 StringType
str()
const;
455#ifndef BSLS_PLATFORM_CMP_SUN
461 template <
class SALLOC>
463 bsl::IsStdAllocator<SALLOC>::value,
468 return this->
rdbuf()->str(allocator);
478#if defined(BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY) \
479 && defined(BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE)
485template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
506template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
511, BaseStream(BaseType::
rdbuf())
515template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
520: BaseType(modeBitMask | ios_base::in,
allocator)
521, BaseStream(BaseType::rdbuf())
525template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
530: BaseType(initialString, ios_base::in,
allocator)
531, BaseStream(BaseType::rdbuf())
535template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
539 ios_base::openmode modeBitMask,
541: BaseType(initialString, modeBitMask | ios_base::in,
allocator)
542, BaseStream(BaseType::rdbuf())
546template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
550: BaseType(MoveUtil::move(initialString), ios_base::in)
551, BaseStream(BaseType::rdbuf())
555template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
560: BaseType(MoveUtil::move(initialString), ios_base::in,
allocator)
561, BaseStream(BaseType::rdbuf())
565template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
569 ios_base::openmode modeBitMask)
570: BaseType(MoveUtil::move(initialString), modeBitMask | ios_base::in)
571, BaseStream(BaseType::rdbuf())
575template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
579 ios_base::openmode modeBitMask,
581: BaseType(MoveUtil::move(initialString),
582 modeBitMask | ios_base::in,
584, BaseStream(BaseType::rdbuf())
588#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
589template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
594: BaseType(
std::move(original))
595, BaseStream(
std::move(original))
597 BaseStream::set_rdbuf(BaseType::rdbuf());
602#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
603template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
605basic_istringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>&
606basic_istringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::
608operator=(basic_istringstream&&
rhs)
610 this->BaseType::operator=(std::move(
rhs));
611 this->BaseStream::operator=(std::move(
rhs));
617#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
618template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
621void basic_istringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::swap(
622 basic_istringstream& other)
624#ifdef BSLS_PLATFORM_CMP_GNU
625# pragma GCC diagnostic push
626# pragma GCC diagnostic ignored "-Wstringop-overflow"
630 || this->rdbuf()->get_allocator()
631 == other.rdbuf()->get_allocator());
632 this->BaseType::swap(other);
633 this->BaseStream::swap(other);
634#ifdef BSLS_PLATFORM_CMP_GNU
635# pragma GCC diagnostic pop
640template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
645 this->rdbuf()->str(value);
648template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
651 BloombergLP::bslmf::MovableRef<StringType> value)
653 this->rdbuf()->str(MoveUtil::move(value));
656#ifdef BSLS_COMPILERFEATURES_SUPPORT_REF_QUALIFIERS
657template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
662 return std::move(*this->rdbuf()).str();
667template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
670basic_istringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::StreamBufType *
673 return this->BaseType::rdbuf();
676#ifdef BSLS_COMPILERFEATURES_SUPPORT_REF_QUALIFIERS
677template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
682 return this->rdbuf()->str();
685template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
687typename basic_istringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::StringType
690 return this->rdbuf()->str();
694template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
696typename basic_istringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::ViewType
700 return this->rdbuf()->view();
706#if defined(BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY) \
707 && defined(BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE)
708template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
710void bsl::swap(basic_istringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>& a,
711 basic_istringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>& b)
724template <
class CHAR_TYPE,
class CHAR_TRAITS,
class ALLOCATOR>
726 bsl::basic_istringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR> >
Definition bslstl_stringbuf.h:835
Definition bslma_bslallocator.h:588
Definition bslstl_istringstream.h:179
bsl::enable_if< bsl::IsStdAllocator< SALLOC >::value, basic_string< CHAR_TYPE, CHAR_TRAITS, SALLOC > >::type str(const SALLOC &allocator) const
Definition bslstl_istringstream.h:465
~basic_istringstream()=default
CHAR_TRAITS traits_type
Definition bslstl_istringstream.h:201
basic_istringstream(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_istringstream.h:303
basic_istringstream(const STRING_VIEW_LIKE_TYPE &initialString, ios_base::openmode modeBitMask, allocator=allocator_type())
Definition bslstl_istringstream.h:360
basic_istringstream(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_istringstream.h:275
ALLOCATOR allocator_type
Definition bslstl_istringstream.h:202
basic_istringstream(const STRING_VIEW_LIKE_TYPE &initialString, allocator=allocator_type())
Definition bslstl_istringstream.h:334
traits_type::int_type int_type
Definition bslstl_istringstream.h:203
traits_type::pos_type pos_type
Definition bslstl_istringstream.h:205
ViewType view() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_istringstream.h:697
bsl::enable_if<!bsl::is_same< ALLOCATOR, SALLOC >::value, void >::type str(const basic_string< CHAR_TYPE, CHAR_TRAITS, SALLOC > &value)
Definition bslstl_istringstream.h:401
StringType str() const
Definition bslstl_istringstream.h:688
CHAR_TYPE char_type
Definition bslstl_istringstream.h:200
traits_type::off_type off_type
Definition bslstl_istringstream.h:204
StreamBufType * rdbuf() const
Definition bslstl_istringstream.h:671
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
Definition bdlat_valuetypefunctions.h:939
basic_istringstream< wchar_t, char_traits< wchar_t >, allocator< wchar_t > > wistringstream
Definition bslstl_iosfwd.h:104
basic_istringstream< char, char_traits< char >, allocator< char > > istringstream
Definition bslstl_iosfwd.h:95
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