STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
xstring_insert.h
Go to the documentation of this file.
1 // xstring_insert.h internal header
2 // Copyright (c) Microsoft Corporation. All rights reserved.
3 #pragma once
4 #ifndef _XSTRING_INSERT_H
5 #define _XSTRING_INSERT_H
6 #ifndef RC_INVOKED
7 
8 #include <ostream>
9 
10 #pragma pack(push,_CRT_PACKING)
11 #pragma warning(push,_STL_WARNING_LEVEL)
12 #pragma warning(disable: _STL_DISABLED_WARNINGS)
13 #pragma push_macro("new")
14 #undef new
15 
17 
18 template<class _Elem,
19  class _Traits,
20  class _SizeT> inline
23  const _Elem * const _Data, const _SizeT _Size)
24  { // insert a character-type sequence into _Ostr as if through a basic_string copy
25  ios_base::iostate _State = ios_base::goodbit;
26  _SizeT _Pad = _Ostr.width() <= 0 || static_cast<_SizeT>(_Ostr.width()) <= _Size
27  ? 0 : static_cast<_SizeT>(_Ostr.width()) - _Size;
28  const typename basic_ostream<_Elem, _Traits>::sentry _Ok(_Ostr);
29 
30  if (!_Ok)
31  _State |= ios_base::badbit;
32  else
33  { // state okay, insert characters
35  if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left)
36  for (; 0 < _Pad; --_Pad) // pad on left
37  if (_Traits::eq_int_type(_Traits::eof(),
38  _Ostr.rdbuf()->sputc(_Ostr.fill())))
39  { // insertion failed, quit
40  _State |= ios_base::badbit;
41  break;
42  }
43 
44  if (_State == ios_base::goodbit
45  && _Ostr.rdbuf()->sputn(_Data, (streamsize)_Size)
46  != (streamsize)_Size)
47  _State |= ios_base::badbit;
48  else
49  for (; 0 < _Pad; --_Pad) // pad on right
50  if (_Traits::eq_int_type(_Traits::eof(),
51  _Ostr.rdbuf()->sputc(_Ostr.fill())))
52  { // insertion failed, quit
53  _State |= ios_base::badbit;
54  break;
55  }
56  _Ostr.width(0);
57  _CATCH_IO_(_Ostr)
58  }
59 
60  _Ostr.setstate(_State);
61  return (_Ostr);
62  }
63 
65 
66 #pragma pop_macro("new")
67 #pragma warning(pop)
68 #pragma pack(pop)
69 #endif /* RC_INVOKED */
70 #endif /* _XSTRING_INSERT_H */
#define _CATCH_IO_(x)
Definition: ostream:31
#define _STD_BEGIN
Definition: yvals.h:553
long long streamsize
Definition: iosfwd:23
_CRT_BEGIN_C_HEADER _Check_return_ _Ret_maybenull_ _In_ size_t _Size
Definition: corecrt_malloc.h:58
#define _TRY_IO_BEGIN
Definition: ostream:29
Definition: ostream:116
_Mysb *__CLR_OR_THIS_CALL rdbuf() const
Definition: ios:89
_Elem __CLR_OR_THIS_CALL fill() const
Definition: ios:110
_STD_BEGIN basic_ostream< _Elem, _Traits > & _Insert_string(basic_ostream< _Elem, _Traits > &_Ostr, const _Elem *const _Data, const _SizeT _Size)
Definition: xstring_insert.h:21
fmtflags __CLR_OR_THIS_CALL flags() const
Definition: xiosbase:375
_In_ size_t _Deref_pre_opt_z_ char const _In_ size_t _Inout_ mbstate_t * _State
Definition: wchar.h:78
Definition: iosfwd:577
streamsize __CLR_OR_THIS_CALL width() const
Definition: xiosbase:420
#define _STD_END
Definition: yvals.h:554
static constexpr _Iostate goodbit
Definition: xiosbase:86
int_type __CLR_OR_THIS_CALL sputc(_Elem _Ch)
Definition: streambuf:197
static constexpr _Iostate badbit
Definition: xiosbase:89
streamsize __CLR_OR_THIS_CALL sputn(const _Elem *_Ptr, streamsize _Count)
Definition: streambuf:204
void __CLR_OR_THIS_CALL setstate(iostate _State, bool _Reraise=false)
Definition: ios:55
static constexpr _Fmtflags adjustfield
Definition: xiosbase:75
Definition: xthread:165
static constexpr _Fmtflags left
Definition: xiosbase:61