1 // xlocmon internal header (from <locale>)
2 #pragma once
3 #ifndef _XLOCMON_
4 #define _XLOCMON_
5 #ifndef RC_INVOKED
6 #include <xlocnum>
7
8 #ifdef _MSC_VER
9  #pragma pack(push,_CRT_PACKING)
10  #pragma warning(push,3)
11 #endif  /* _MSC_VER */
12
13 _STD_BEGIN
14 #pragma warning(push)
15 #pragma warning(disable:4275)
16         // STRUCT money_base
17
18 const size_t _PATTERN_FIELD_SIZE = 4;
19
20 struct _CRTIMP2_PURE money_base
21     : public locale::facet
22     {    // ultimate base class for moneypunct
23     enum
24         {    // constants for different format codes
25         symbol = '$', sign = '+', space = ' ', value = 'v', none = 'x'};
26     typedef int part;
27
28     struct pattern
29         {    // four-part formats for monetary text
30         char field[_PATTERN_FIELD_SIZE];
31         };
32
33     __CLR_OR_THIS_CALL money_base(size_t _Refs = 0)
34         : locale::facet(_Refs)
35         {    // default constructor
36         }
37       __CLR_OR_THIS_CALL ~money_base()
38              { 
39              }
40     };
41
42         // TEMPLATE CLASS _Mpunct
43 template<class _Elem>
44     class _Mpunct
45         : public money_base
46     {    // common base class for moneypunct<_Elem, false/true>
47 public:
48     typedef _Elem char_type;
49     typedef basic_string<_Elem, char_traits<_Elem>, allocator<_Elem> >
50         string_type;
51
52     _Elem __CLR_OR_THIS_CALL decimal_point() const
53         {    // return decimal point
54         return (do_decimal_point());
55         }
56
57     _Elem __CLR_OR_THIS_CALL thousands_sep() const
58         {    // return thousands separator
Lines 59 ... 855 are skipped.
856                     *_Dest++ = _Ppunct_fac->decimal_point();
857                     _Dest = _Put(_Dest, _Val.end() - _Fracdigits,
858                         _Fracdigits);    // put fraction part
859                     }
860                 break;
861
862             case money_base::space:    // put any internal fill
863                 _Dest = _Rep(_Dest, _Fill, 1);
864                 // fall through
865
866             case money_base::none:    // put any internal fill
867                 if (_Afl == ios_base::internal)
868                     {    // put internal fill
869                     _Dest = _Rep(_Dest, _Fill, _Fillcount);
870                     _Fillcount = 0;
871                     }
872                 }
873
874         if (1 < _Sign.size())
875             _Dest = _Put(_Dest, _Sign.begin() + 1,
876                 _Sign.size() - 1);    // put remainder of sign
877         _Iosbase.width(0);
878         return (_Rep(_Dest, _Fill, _Fillcount));    // put trailing fill
879         }
880
881     static _OutIt __CLRCALL_OR_CDECL _Put(_OutIt _Dest,
882         typename string_type::const_iterator _Source, size_t _Count)
883         {    // put [_Source, _Source + _Count) to _Dest
884         for (; 0 < _Count; --_Count, ++_Dest, ++_Source)
885             *_Dest = *_Source;
886         return (_Dest);
887         }
888
889     static _OutIt __CLRCALL_OR_CDECL _Rep(_OutIt _Dest,
890         _Elem _Ch, size_t _Count)
891         {    // put _Count * _Ch to _Dest
892         for (; 0 < _Count; --_Count, ++_Dest)
893             *_Dest = _Ch;
894         return (_Dest);
895         }
896
897     _Locinfo::_Cvtvec _Cvt;        // conversion information
898     };
899
900         // STATIC money_put::id OBJECT
901 template<class _Elem,
902     class _OutIt>
903     __PURE_APPDOMAIN_GLOBAL locale::id money_put<_Elem, _OutIt>::id;
904
905  #if defined(_DLL_CPPLIB) && !defined(_M_CEE_PURE)
906
907 template class _CRTIMP2_PURE _Mpunct<char>;
908 template class _CRTIMP2_PURE moneypunct<char, true>;
909 template class _CRTIMP2_PURE moneypunct<char, false>;
910 template class _CRTIMP2_PURE money_get<char,
911     istreambuf_iterator<char, char_traits<char> > >;
912 template class _CRTIMP2_PURE money_put<char,
913     ostreambuf_iterator<char, char_traits<char> > >;
914
915 template class _CRTIMP2_PURE _Mpunct<wchar_t>;
916 template class _CRTIMP2_PURE moneypunct<wchar_t, true>;
917 template class _CRTIMP2_PURE moneypunct<wchar_t, false>;
918 template class _CRTIMP2_PURE money_get<wchar_t,
919     istreambuf_iterator<wchar_t, char_traits<wchar_t> > >;
920 template class _CRTIMP2_PURE money_put<wchar_t,
921     ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >;
922
923
924
925  #endif /* _DLL_CPPLIB */
926 #pragma warning(pop)
927 _STD_END
928
929 #ifdef _MSC_VER
930  #pragma warning(pop)
931  #pragma pack(pop)
932 #endif  /* _MSC_VER */
933
934 #endif /* RC_INVOKED */
935 #endif /* _XLOCMON_ */
936
937 /*
938  * Copyright (c) 1992-2007 by P.J. Plauger.  ALL RIGHTS RESERVED.
939  * Consult your license regarding permissions and restrictions.
940  V5.03:0009 */
941