STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Private Types | Private Member Functions | Static Private Member Functions | List of all members
money_put< _Elem, _OutIt > Class Template Reference
Inheritance diagram for money_put< _Elem, _OutIt >:
locale::facet _Facet_base _Crt_new_delete

Public Types

typedef _Elem char_type
 
typedef _OutIt iter_type
 
typedef basic_string< _Elem, char_traits< _Elem >, allocator< _Elem > > string_type
 

Public Member Functions

_OutIt put (_OutIt _Dest, bool _Intl, ios_base &_Iosbase, _Elem _Fill, long double _Val) const
 
_OutIt put (_OutIt _Dest, bool _Intl, ios_base &_Iosbase, _Elem _Fill, const string_type &_Val) const
 
 money_put (size_t _Refs=0)
 
 money_put (const _Locinfo &_Lobj, size_t _Refs=0)
 
- Public Member Functions inherited from locale::facet
virtual void __CLR_OR_THIS_CALL _Incref ()
 
virtual _Facet_base *__CLR_OR_THIS_CALL _Decref ()
 
__CLR_OR_THIS_CALL facet (const facet &)=delete
 
facet &__CLR_OR_THIS_CALL operator= (const facet &)=delete
 
- Public Member Functions inherited from _Facet_base
virtual __CLR_OR_THIS_CALL ~_Facet_base () _NOEXCEPT
 

Static Public Member Functions

static size_t _Getcat (const locale::facet **_Ppf=0, const locale *_Ploc=0)
 
- Static Public Member Functions inherited from locale::facet
static size_t __CLRCALL_OR_CDECL _Getcat (const facet **=0, const locale *=0)
 

Static Public Attributes

__PURE_APPDOMAIN_GLOBAL static _CRTIMP2_PURE locale::id id
 

Protected Member Functions

virtual __CLR_OR_THIS_CALL ~money_put () _NOEXCEPT
 
void _Init (const _Locinfo &)
 
virtual _OutIt __CLR_OR_THIS_CALL do_put (_OutIt _Dest, bool _Intl, ios_base &_Iosbase, _Elem _Fill, long double _Val) const
 
virtual _OutIt __CLR_OR_THIS_CALL do_put (_OutIt _Dest, bool _Intl, ios_base &_Iosbase, _Elem _Fill, const string_type &_Val) const
 
- Protected Member Functions inherited from locale::facet
__CLR_OR_THIS_CALL facet (size_t _Initrefs=0)
 
virtual __CLR_OR_THIS_CALL ~facet () _NOEXCEPT
 

Private Types

typedef moneypunct< _Elem, false_Mypunct0
 
typedef moneypunct< _Elem, true_Mypunct1
 

Private Member Functions

_OutIt _Putmfld (_OutIt _Dest, bool _Intl, ios_base &_Iosbase, _Elem _Fill, bool _Neg, string_type _Val, _Elem _E0) const
 

Static Private Member Functions

static _OutIt _Put (_OutIt _Dest, typename string_type::const_iterator _Source, size_t _Count)
 
static _OutIt _Rep (_OutIt _Dest, _Elem _Ch, size_t _Count)
 

Member Typedef Documentation

template<class _Elem , class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem> >>
typedef moneypunct<_Elem, false> money_put< _Elem, _OutIt >::_Mypunct0
private
template<class _Elem , class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem> >>
typedef moneypunct<_Elem, true> money_put< _Elem, _OutIt >::_Mypunct1
private
template<class _Elem , class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem> >>
typedef _Elem money_put< _Elem, _OutIt >::char_type
template<class _Elem , class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem> >>
typedef _OutIt money_put< _Elem, _OutIt >::iter_type
template<class _Elem , class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem> >>
typedef basic_string<_Elem, char_traits<_Elem>, allocator<_Elem> > money_put< _Elem, _OutIt >::string_type

Constructor & Destructor Documentation

template<class _Elem , class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem> >>
money_put< _Elem, _OutIt >::money_put ( size_t  _Refs = 0)
inlineexplicit
682  : locale::facet(_Refs)
683  { // construct from current locale
684  _BEGIN_LOCINFO(_Lobj)
685  _Init(_Lobj);
686  _END_LOCINFO()
687  }
Definition: xlocale:137
void _Init(const _Locinfo &)
Definition: xlocmon:709
template<class _Elem , class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem> >>
money_put< _Elem, _OutIt >::money_put ( const _Locinfo _Lobj,
size_t  _Refs = 0 
)
inline
690  : locale::facet(_Refs)
691  { // construct from specified locale
692  _Init(_Lobj);
693  }
Definition: xlocale:137
void _Init(const _Locinfo &)
Definition: xlocmon:709
template<class _Elem , class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem> >>
virtual __CLR_OR_THIS_CALL money_put< _Elem, _OutIt >::~money_put ( )
inlineprotectedvirtual
706  { // destroy the object
707  }

Member Function Documentation

template<class _Elem , class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem> >>
static size_t money_put< _Elem, _OutIt >::_Getcat ( const locale::facet **  _Ppf = 0,
const locale _Ploc = 0 
)
inlinestatic
697  { // return locale category mask and construct standard facet
698  if (_Ppf != 0 && *_Ppf == 0)
699  *_Ppf = new money_put<_Elem, _OutIt>(
700  _Locinfo(_Ploc->c_str()));
701  return (_X_MONETARY);
702  }
Definition: xlocinfo:53
_Ret_z_ const char * c_str() const
Definition: xlocale:424
Definition: xlocmon:653
#define _X_MONETARY
Definition: xlocinfo.h:40
template<class _Elem , class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem> >>
void money_put< _Elem, _OutIt >::_Init ( const _Locinfo )
inlineprotected
710  { // initialize from _Locinfo object
711  }
template<class _Elem , class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem> >>
static _OutIt money_put< _Elem, _OutIt >::_Put ( _OutIt  _Dest,
typename string_type::const_iterator  _Source,
size_t  _Count 
)
inlinestaticprivate
926  { // put [_Source, _Source + _Count) to _Dest
927  for (; 0 < _Count; --_Count, (void)++_Dest, ++_Source)
928  *_Dest = *_Source;
929  return (_Dest);
930  }
unsigned _Dest
Definition: mbstring.h:107
_Source
Definition: corecrt_wstring.h:187
_CRT_BEGIN_C_HEADER typedef void(__CRTDECL *terminate_handler)()
_Diff _Count
Definition: algorithm:1941
template<class _Elem , class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem> >>
_OutIt money_put< _Elem, _OutIt >::_Putmfld ( _OutIt  _Dest,
bool  _Intl,
ios_base _Iosbase,
_Elem  _Fill,
bool  _Neg,
string_type  _Val,
_Elem  _E0 
) const
inlineprivate
781  { // put string_type with just digits to _Dest
782  const _Mpunct<_Elem> *_Ppunct_fac;
783  if (_Intl)
784  _Ppunct_fac =
785  &_USE(_Iosbase.getloc(), _Mypunct1); // international
786  else
787  _Ppunct_fac =
788  &_USE(_Iosbase.getloc(), _Mypunct0); // local
789 
790  const string _Grouping = _Ppunct_fac->grouping();
791  int _Ifracdigits = _Ppunct_fac->frac_digits();
792  unsigned int _Fracdigits = _Ifracdigits < 0 ? -_Ifracdigits
793  : _Ifracdigits;
794 
795  if (_Val.size() <= _Fracdigits)
796  _Val.insert((size_t)0, _Fracdigits - _Val.size() + 1, _E0);
797  else if (*_Grouping.c_str() != CHAR_MAX && '\0' < *_Grouping.c_str())
798  { // grouping specified, add thousands separators
799  const _Elem _Kseparator = _Ppunct_fac->thousands_sep();
800  const char *_Pg = _Grouping.c_str();
801  size_t _Off = _Val.size() - _Fracdigits; // start of fraction
802 
803  while (*_Pg != CHAR_MAX && '\0' < *_Pg
804  && (size_t)*_Pg < _Off)
805  { // add a thousands separator, right to left
806  _Val.insert(_Off -= *_Pg, (size_t)1, _Kseparator);
807  if ('\0' < _Pg[1])
808  ++_Pg; // not last group, advance
809  }
810  }
811 
812  money_base::pattern _Pattern;
813  string_type _Sign;
814  if (_Neg)
815  { // negative value, choose appropriate format and sign
816  _Pattern = _Ppunct_fac->neg_format();
817  _Sign = _Ppunct_fac->negative_sign();
818  }
819  else
820  { // positive value, choose appropriate format and sign
821  _Pattern = _Ppunct_fac->pos_format();
822  _Sign = _Ppunct_fac->positive_sign();
823  }
824 
825  string_type _Symbol;
826  if (_Iosbase.flags() & ios_base::showbase)
827  _Symbol = _Ppunct_fac->curr_symbol(); // showbase ==> show $
828 
829  bool _Intern = false;
830  size_t _Fillcount, _Off;
831  for (_Fillcount = 0, _Off = 0; _Off < 4; ++_Off)
832  switch (_Pattern.field[_Off])
833  { // accumulate total length in _Fillcount
834  case money_base::symbol: // count currency symbol size
835  _Fillcount += _Symbol.size();
836  break;
837 
838  case money_base::sign: // count sign size
839  _Fillcount += _Sign.size();
840  break;
841 
842  case money_base::value: // count value field size
843  _Fillcount += _Val.size() + (0 < _Fracdigits ? 1 : 0)
844  + (_Val.size() <= _Fracdigits
845  ? _Fracdigits - _Val.size() + 1 : 0);
846  break;
847 
848  case money_base::space: // count space size
849  ++_Fillcount; // at least one space
850  // fall through
851 
852  case money_base::none: // count space size
853  if (_Off != 3)
854  _Intern = true; // optional internal fill
855  break;
856  }
857 
858  _Fillcount = _Iosbase.width() <= 0
859  || (size_t)_Iosbase.width() <= _Fillcount
860  ? 0 : (size_t)_Iosbase.width() - _Fillcount;
861 
862  ios_base::fmtflags _Afl =
863  _Iosbase.flags() & ios_base::adjustfield;
864  if (_Afl != ios_base::left
865  && (_Afl != ios_base::internal || !_Intern))
866  { // put leading fill
867  _Dest = _Rep(_Dest, _Fill, _Fillcount);
868  _Fillcount = 0;
869  }
870 
871  for (_Off = 0; _Off < 4; ++_Off)
872  switch (_Pattern.field[_Off])
873  { // put components as specified by _Pattern
874  case money_base::symbol: // put currency symbol
875  _Dest = _Put(_Dest, _Symbol.begin(), _Symbol.size());
876  break;
877 
878  case money_base::sign: // put sign
879  if (0 < _Sign.size())
880  _Dest = _Put(_Dest, _Sign.begin(), 1);
881  break;
882 
883  case money_base::value: // put value field
884  if (_Fracdigits == 0)
885  _Dest = _Put(_Dest, _Val.begin(),
886  _Val.size()); // no fraction part
887  else if (_Val.size() <= _Fracdigits)
888  { // put leading zero, all fraction digits
889  *_Dest++ = _E0;
890  *_Dest++ = _Ppunct_fac->decimal_point();
891  _Dest = _Rep(_Dest, _E0,
892  _Fracdigits - _Val.size()); // insert zeros
893  _Dest = _Put(_Dest, _Val.begin(), _Val.size());
894  }
895  else
896  { // put both integer and fraction parts
897  _Dest = _Put(_Dest, _Val.begin(),
898  _Val.size() - _Fracdigits); // put integer part
899  *_Dest++ = _Ppunct_fac->decimal_point();
900  _Dest = _Put(_Dest, _Val.end() - _Fracdigits,
901  _Fracdigits); // put fraction part
902  }
903  break;
904 
905  case money_base::space: // put any internal fill
906  _Dest = _Rep(_Dest, _Fill, 1);
907  // fall through
908 
909  case money_base::none: // put any internal fill
910  if (_Afl == ios_base::internal)
911  { // put internal fill
912  _Dest = _Rep(_Dest, _Fill, _Fillcount);
913  _Fillcount = 0;
914  }
915  }
916 
917  if (1 < _Sign.size())
918  _Dest = _Put(_Dest, _Sign.begin() + 1,
919  _Sign.size() - 1); // put remainder of sign
920  _Iosbase.width(0);
921  return (_Rep(_Dest, _Fill, _Fillcount)); // put trailing fill
922  }
Definition: xlocmon:23
moneypunct< _Elem, true > _Mypunct1
Definition: xlocmon:657
Definition: xlocmon:23
unsigned _Dest
Definition: mbstring.h:107
unsigned int size_t
Definition: sourceannotations.h:19
#define _USE(loc, fac)
Definition: xlocale:499
static _OutIt _Put(_OutIt _Dest, typename string_type::const_iterator _Source, size_t _Count)
Definition: xlocmon:924
Definition: xlocmon:23
locale __CLR_OR_THIS_CALL getloc() const
Definition: xiosbase:432
fmtflags __CLR_OR_THIS_CALL flags() const
Definition: xiosbase:375
static _OutIt _Rep(_OutIt _Dest, _Elem _Ch, size_t _Count)
Definition: xlocmon:932
streamsize __CLR_OR_THIS_CALL width() const
Definition: xiosbase:420
static constexpr _Fmtflags showbase
Definition: xiosbase:58
static constexpr _Fmtflags internal
Definition: xiosbase:63
Definition: xlocmon:26
moneypunct< _Elem, false > _Mypunct0
Definition: xlocmon:656
Definition: xlocmon:23
char field[4]
Definition: xlocmon:28
#define CHAR_MAX
Definition: limits.h:24
Definition: xlocmon:23
basic_string< _Elem, char_traits< _Elem >, allocator< _Elem > > string_type
Definition: xlocmon:663
_FwdIt const _Ty _Val
Definition: algorithm:1938
Definition: xlocmon:39
static constexpr _Fmtflags adjustfield
Definition: xiosbase:75
static constexpr _Fmtflags left
Definition: xiosbase:61
template<class _Elem , class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem> >>
static _OutIt money_put< _Elem, _OutIt >::_Rep ( _OutIt  _Dest,
_Elem  _Ch,
size_t  _Count 
)
inlinestaticprivate
934  { // put _Count * _Ch to _Dest
935  for (; 0 < _Count; --_Count, (void)++_Dest)
936  *_Dest = _Ch;
937  return (_Dest);
938  }
unsigned _Dest
Definition: mbstring.h:107
_Check_return_ _In_ wchar_t _Ch
Definition: vcruntime_string.h:89
_CRT_BEGIN_C_HEADER typedef void(__CRTDECL *terminate_handler)()
_Diff _Count
Definition: algorithm:1941
template<class _Elem , class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem> >>
virtual _OutIt __CLR_OR_THIS_CALL money_put< _Elem, _OutIt >::do_put ( _OutIt  _Dest,
bool  _Intl,
ios_base _Iosbase,
_Elem  _Fill,
long double  _Val 
) const
inlineprotectedvirtual
716  { // put long double to _Dest
717  bool _Negative = false;
718  if (_Val < 0)
719  {
720  _Negative = true;
721  _Val = -_Val;
722  }
723 
724  size_t _Exp;
725  for (_Exp = 0; 1e35 <= _Val && _Exp < 5000; _Exp += 10)
726  _Val /= 1e10; // drop 10 zeros before decimal point
727 
728  char _Buf[40];
729 
730  int _Count = _CSTD sprintf_s(_Buf, sizeof (_Buf), "%.0Lf",
731  _Val); // convert to chars
732 
733  if (_Count < 0)
734  return (_Dest); // bad conversion, give up
735 
736  const ctype<_Elem>& _Ctype_fac =
737  _USE(_Iosbase.getloc(), ctype<_Elem>);
738  const _Elem _E0 = _Ctype_fac.widen('0');
739 
740  string_type _Val2(_Count, (_Elem)0);
741  _Ctype_fac.widen(&_Buf[0], &_Buf[_Count], &_Val2[0]);
742  _Val2.append(_Exp, _E0); // scale by trailing zeros
743  return (_Putmfld(_Dest, _Intl, _Iosbase, _Fill,
744  _Negative, _Val2, _E0));
745  }
_CRTIMP2_PURE short __CLRCALL_PURE_OR_CDECL _Exp(double *, double, short)
Definition: regex:1559
unsigned _Dest
Definition: mbstring.h:107
#define _USE(loc, fac)
Definition: xlocale:499
locale __CLR_OR_THIS_CALL getloc() const
Definition: xiosbase:432
Definition: xlocale:2077
_OutIt _Putmfld(_OutIt _Dest, bool _Intl, ios_base &_Iosbase, _Elem _Fill, bool _Neg, string_type _Val, _Elem _E0) const
Definition: xlocmon:778
_Elem __CLR_OR_THIS_CALL widen(char _Byte) const
Definition: xlocale:2126
_Diff _Count
Definition: algorithm:1941
#define _CSTD
Definition: yvals.h:570
basic_string< _Elem, char_traits< _Elem >, allocator< _Elem > > string_type
Definition: xlocmon:663
_FwdIt const _Ty _Val
Definition: algorithm:1938
template<class _Elem , class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem> >>
virtual _OutIt __CLR_OR_THIS_CALL money_put< _Elem, _OutIt >::do_put ( _OutIt  _Dest,
bool  _Intl,
ios_base _Iosbase,
_Elem  _Fill,
const string_type _Val 
) const
inlineprotectedvirtual
750  { // put string_type to _Dest
751  static constexpr char _Src[] = {"0123456789-"};
752  _Elem _Atoms[sizeof (_Src)];
753  const ctype<_Elem>& _Ctype_fac =
754  _USE(_Iosbase.getloc(), ctype<_Elem>);
755  _Ctype_fac.widen(&_Src[0], &_Src[sizeof (_Src)], _Atoms);
756 
757  bool _Negative = false;
758  size_t _Idx0 = 0;
759  if (!_Val.empty() && _Val[0] == _Atoms[10])
760  { // strip off '-'
761  _Negative = true;
762  ++_Idx0;
763  }
764 
765  size_t _Size = _Val.size();
766  size_t _Idx = _Idx0;
767  for (; _Idx < _Size && _Find_elem(_Atoms, _Val[_Idx]) < 10; ++_Idx)
768  ; // count digits
769  string_type _Val2(&_Val[_Idx0], (size_t)(_Idx - _Idx0));
770  if (_Val2.empty()) // replace empty digit string with '0'
771  _Val2.append((size_t)1, _Atoms[0]);
772 
773  return (_Putmfld(_Dest, _Intl, _Iosbase, _Fill,
774  _Negative, _Val2, _Atoms[0]));
775  }
unsigned _Dest
Definition: mbstring.h:107
#define _USE(loc, fac)
Definition: xlocale:499
_CRT_BEGIN_C_HEADER _Check_return_ _Ret_maybenull_ _In_ size_t _Size
Definition: corecrt_malloc.h:58
locale __CLR_OR_THIS_CALL getloc() const
Definition: xiosbase:432
Definition: xlocale:2077
_In_ size_t _Out_opt_ int _In_z_ unsigned char const * _Src
Definition: mbstring.h:1039
_OutIt _Putmfld(_OutIt _Dest, bool _Intl, ios_base &_Iosbase, _Elem _Fill, bool _Neg, string_type _Val, _Elem _E0) const
Definition: xlocmon:778
size_t _Find_elem(_Elem *_Base, _Elem _Ch)
Definition: xlocnum:88
basic_string< _Elem, char_traits< _Elem >, allocator< _Elem > > string_type
Definition: xlocmon:663
_FwdIt const _Ty _Val
Definition: algorithm:1938
template<class _Elem , class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem> >>
_OutIt money_put< _Elem, _OutIt >::put ( _OutIt  _Dest,
bool  _Intl,
ios_base _Iosbase,
_Elem  _Fill,
long double  _Val 
) const
inline
668  { // put long double to _Dest
669  return (do_put(_Dest, _Intl, _Iosbase, _Fill, _Val));
670  }
unsigned _Dest
Definition: mbstring.h:107
virtual _OutIt __CLR_OR_THIS_CALL do_put(_OutIt _Dest, bool _Intl, ios_base &_Iosbase, _Elem _Fill, long double _Val) const
Definition: xlocmon:713
_FwdIt const _Ty _Val
Definition: algorithm:1938
template<class _Elem , class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem> >>
_OutIt money_put< _Elem, _OutIt >::put ( _OutIt  _Dest,
bool  _Intl,
ios_base _Iosbase,
_Elem  _Fill,
const string_type _Val 
) const
inline
675  { // put string_type to _Dest
676  return (do_put(_Dest, _Intl, _Iosbase, _Fill, _Val));
677  }
unsigned _Dest
Definition: mbstring.h:107
virtual _OutIt __CLR_OR_THIS_CALL do_put(_OutIt _Dest, bool _Intl, ios_base &_Iosbase, _Elem _Fill, long double _Val) const
Definition: xlocmon:713
_FwdIt const _Ty _Val
Definition: algorithm:1938

Member Data Documentation

template<class _Elem , class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem> >>
__PURE_APPDOMAIN_GLOBAL locale::id money_put< _Elem, _OutIt >::id
static

The documentation for this class was generated from the following file: