epoc32/include/stdapis/stlportv5/stl/_num_get.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:27:01 +0100
branchSymbian2
changeset 3 e1b950c65cb4
parent 2 epoc32/include/stdapis/stlport/stl/_num_get.h@2fe1408b6811
child 4 837f303aceeb
permissions -rw-r--r--
Attempt to represent the S^2->S^3 header reorganisation as a series of "hg rename" operations
     1 /*
     2  * © Portions copyright (c) 2006-2007 Nokia Corporation.  All rights reserved.
     3  * Copyright (c) 1999
     4  * Silicon Graphics Computer Systems, Inc.
     5  *
     6  * Copyright (c) 1999 
     7  * Boris Fomitchev
     8  *
     9  * This material is provided "as is", with absolutely no warranty expressed
    10  * or implied. Any use is at your own risk.
    11  *
    12  * Permission to use or copy this software for any purpose is hereby granted 
    13  * without fee, provided the above notices are retained on all copies.
    14  * Permission to modify the code and to distribute modified code is granted,
    15  * provided the above notices are retained, and a notice that the code was
    16  * modified is included with the above copyright notice.
    17  *
    18  */ 
    19 // WARNING: This is an internal header file, included by other C++
    20 // standard library headers.  You should not attempt to use this header
    21 // file directly.
    22 
    23 
    24 #ifndef _STLP_INTERNAL_NUM_GET_H
    25 #define _STLP_INTERNAL_NUM_GET_H
    26 
    27 #ifndef _STLP_INTERNAL_ISTREAMBUF_ITERATOR_H
    28 # include <stl/_istreambuf_iterator.h>
    29 #endif
    30 
    31 # ifndef _STLP_C_LOCALE_H
    32 #  include <stl/c_locale.h>
    33 # endif
    34 
    35 #ifndef _STLP_INTERNAL_NUMPUNCT_H
    36 # include <stl/_numpunct.h>
    37 #endif
    38 #ifndef _STLP_INTERNAL_CTYPE_H
    39 # include <stl/_ctype.h>
    40 #endif
    41 
    42 _STLP_BEGIN_NAMESPACE
    43 
    44 //----------------------------------------------------------------------
    45 // num_get facets
    46 
    47 # ifdef _STLP_LIMITED_DEFAULT_TEMPLATES
    48 template <class _CharT, class _InputIter>  
    49 # else
    50 template <class _CharT, class _InputIter = istreambuf_iterator<_CharT> >  
    51 # endif
    52 #ifdef __SYMBIAN32__
    53 class num_get : public locale::facet
    54 #else
    55 class num_get: public locale::facet
    56 #endif
    57 {
    58   friend class _Locale;
    59 public:
    60   typedef _CharT     char_type;
    61   typedef _InputIter iter_type;
    62 
    63   explicit   num_get(size_t __refs = 0): locale::facet(__refs) {}
    64     
    65 # ifndef _STLP_NO_BOOL
    66   _InputIter get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
    67                 ios_base::iostate& __err, bool& __val) const {
    68     return do_get(__stl_in, __end, __str, __err, __val);
    69   }
    70 # endif
    71 
    72 //# ifdef _STLP_FIX_LIBRARY_ISSUES
    73   _InputIter get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
    74                 ios_base::iostate& __err, short& __val) const {
    75     return do_get(__stl_in, __end, __str, __err, __val);
    76   }
    77 
    78   _InputIter get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
    79                 ios_base::iostate& __err, int& __val) const {
    80     return do_get(__stl_in, __end, __str, __err, __val);
    81   }
    82 //# endif
    83 
    84   _InputIter get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
    85                 ios_base::iostate& __err, long& __val) const {
    86     return do_get(__stl_in, __end, __str, __err, __val);
    87   }
    88 
    89   _InputIter get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
    90                 ios_base::iostate& __err, unsigned short& __val) const {
    91     return do_get(__stl_in, __end, __str, __err, __val);
    92   }
    93 
    94   _InputIter get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
    95                 ios_base::iostate& __err, unsigned int& __val) const {
    96     return do_get(__stl_in, __end, __str, __err, __val);
    97   }
    98 
    99   _InputIter get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
   100                 ios_base::iostate& __err, unsigned long& __val) const {
   101     return do_get(__stl_in, __end, __str, __err, __val);
   102   }
   103 
   104 #ifdef _STLP_LONG_LONG
   105 
   106   _InputIter get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
   107                 ios_base::iostate& __err, _STLP_LONG_LONG& __val) const {
   108     return do_get(__stl_in, __end, __str, __err, __val);
   109   }
   110 
   111   _InputIter get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
   112                 ios_base::iostate& __err, unsigned _STLP_LONG_LONG& __val) const {
   113     return do_get(__stl_in, __end, __str, __err, __val);
   114   }
   115 
   116 #endif /* _STLP_LONG_LONG */
   117 
   118   _InputIter get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
   119                  ios_base::iostate& __err, float& __val) const {
   120     return do_get(__stl_in, __end, __str, __err, __val);
   121   }
   122 
   123   _InputIter get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
   124                 ios_base::iostate& __err, double& __val) const {
   125     return do_get(__stl_in, __end, __str, __err, __val);
   126   }
   127 
   128 # ifndef _STLP_NO_LONG_DOUBLE
   129 
   130   _InputIter get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
   131                 ios_base::iostate& __err, long double& __val) const {
   132     return do_get(__stl_in, __end, __str, __err, __val);
   133   }
   134 # endif
   135 
   136   _InputIter get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
   137                 ios_base::iostate& __err, void*& __val) const {
   138     return do_get(__stl_in, __end, __str, __err, __val);
   139   }
   140 
   141 #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_)
   142     _STLP_STATIC_MEMBER_DECLSPEC static locale::id& GetFacetLocaleId();
   143     _STLP_STATIC_MEMBER_DECLSPEC static locale::id& GetFacetLocaleId(istreambuf_iterator<wchar_t, char_traits<wchar_t> >* );
   144     _STLP_STATIC_MEMBER_DECLSPEC static locale::id& GetFacetLocaleId(const wchar_t**);
   145     _STLP_STATIC_MEMBER_DECLSPEC static locale::id& GetFacetLocaleId(istreambuf_iterator<char, char_traits<char> >* );
   146     _STLP_STATIC_MEMBER_DECLSPEC static locale::id& GetFacetLocaleId(const char**);
   147     
   148 #else
   149     _STLP_STATIC_MEMBER_DECLSPEC static locale::id id;
   150 #endif
   151 
   152 protected:
   153   ~num_get() {}
   154 
   155   typedef string               string_type; 
   156   typedef ctype<_CharT>        _Ctype;
   157   typedef numpunct<_CharT>     _Numpunct;
   158 
   159 # ifndef _STLP_NO_BOOL
   160   virtual _InputIter do_get(_InputIter __stl_in, _InputIter __end,
   161                            ios_base& __str, ios_base::iostate& __err, bool& __val) const;
   162 # endif
   163 
   164   virtual _InputIter do_get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
   165                            ios_base::iostate& __err, long& __val) const;
   166   virtual _InputIter do_get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
   167                            ios_base::iostate& __err, unsigned short& __val) const;
   168   virtual _InputIter do_get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
   169                            ios_base::iostate& __err, unsigned int& __val) const;
   170   virtual _InputIter do_get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
   171                            ios_base::iostate& __err, unsigned long& __val) const;
   172 //# ifdef _STLP_FIX_LIBRARY_ISSUES
   173   // issue 118 : those are actually not supposed to be here
   174   virtual _InputIter do_get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
   175                            ios_base::iostate& __err, short& __val) const;
   176   virtual _InputIter do_get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
   177                            ios_base::iostate& __err, int& __val) const;
   178 //# endif
   179   virtual _InputIter do_get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
   180                           ios_base::iostate& __err, float& __val) const;
   181   virtual _InputIter do_get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
   182                            ios_base::iostate& __err, double& __val) const;
   183   virtual _InputIter do_get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
   184                            ios_base::iostate& __err,
   185                            void*& __p) const;
   186 
   187 #ifndef _STLP_NO_LONG_DOUBLE
   188   virtual _InputIter do_get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
   189                            ios_base::iostate& __err, long double& __val) const;
   190 #endif /* _STLP_NO_LONG_DOUBLE */
   191 
   192 #ifdef _STLP_LONG_LONG
   193 
   194   virtual _InputIter do_get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
   195                             ios_base::iostate& __err, _STLP_LONG_LONG& __val) const;
   196   virtual _InputIter do_get(_InputIter __stl_in, _InputIter __end, ios_base& __str,
   197                            ios_base::iostate& __err, unsigned _STLP_LONG_LONG& __val) const;
   198 #endif /* _STLP_LONG_LONG */
   199 
   200 };
   201 
   202 
   203 # ifdef _STLP_USE_TEMPLATE_EXPORT
   204 _STLP_EXPORT_TEMPLATE_CLASS num_get<char, istreambuf_iterator<char, char_traits<char> > >;
   205 // _STLP_EXPORT_TEMPLATE_CLASS num_get<char, const char*>;
   206 #  ifndef _STLP_NO_WCHAR_T
   207 _STLP_EXPORT_TEMPLATE_CLASS num_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >;
   208 // _STLP_EXPORT_TEMPLATE_CLASS num_get<wchar_t, const wchar_t*>;
   209 #  endif /* _STLP_NO_WCHAR_T */
   210 # endif
   211 
   212 # if defined (_STLP_EXPOSE_STREAM_IMPLEMENTATION)
   213 
   214 _STLP_DECLSPEC extern bool  _STLP_CALL __valid_grouping(const char*, const char*, const char*, const char*);
   215 
   216 template <class _InputIter, class _Integer>
   217 bool _STLP_CALL
   218 __get_decimal_integer(_InputIter& __first, _InputIter& __last, _Integer& __val);
   219 
   220 inline bool _STLP_CALL __get_fdigit(char& __c, const char*);
   221 inline bool _STLP_CALL __get_fdigit_or_sep(char& __c, char __sep, const char *);
   222 # ifndef _STLP_NO_WCHAR_T
   223 inline bool _STLP_CALL __get_fdigit(wchar_t&, const wchar_t*);
   224 inline bool _STLP_CALL __get_fdigit_or_sep(wchar_t&, wchar_t, const wchar_t*);
   225 # endif
   226 
   227 inline void  _STLP_CALL
   228 _Initialize_get_float(const ctype<char>&,
   229                        char& Plus, char& Minus,
   230                        char& pow_e, char& pow_E,
   231                        char*)
   232 {
   233   Plus = '+';
   234   Minus = '-';
   235   pow_e = 'e';
   236   pow_E = 'E';
   237 }
   238 // Helper functions for _M_do_get_float.
   239 
   240 # ifndef _STLP_NO_WCHAR_T
   241 
   242 inline void  _STLP_CALL
   243 _Initialize_get_float( const ctype<wchar_t>& ct,
   244                        wchar_t& Plus, wchar_t& Minus,
   245                        wchar_t& pow_e, wchar_t& pow_E,
   246                        wchar_t* digits)
   247 {
   248   char ndigits[11] = "0123456789";
   249   Plus  = ct.widen('+');
   250   Minus = ct.widen('-');
   251   pow_e = ct.widen('e');
   252   pow_E = ct.widen('E');
   253   ct.widen(ndigits + 0, ndigits + 10, digits);
   254 }
   255 
   256 # endif /* WCHAR_T */
   257 
   258 #ifdef __SYMBIAN32__
   259 template<class _CharT>
   260 inline void  _STLP_CALL
   261 _Initialize_get_float( const ctype<_CharT>& ct,
   262                        _CharT& Plus, _CharT& Minus,
   263                        _CharT& pow_e, _CharT& pow_E,
   264                        _CharT* digits)
   265 {
   266   char ndigits[11] = "0123456789";
   267   Plus  = ct.widen('+');
   268   Minus = ct.widen('-');
   269   pow_e = ct.widen('e');
   270   pow_E = ct.widen('E');
   271   ct.widen(ndigits + 0, ndigits + 10, digits);
   272 }
   273 #endif
   274 
   275 int  _STLP_CALL __string_to_float(const string&, float&);
   276 int  _STLP_CALL __string_to_float(const string&, double&);
   277 # ifndef _STLP_NO_LONG_DOUBLE
   278 int  _STLP_CALL __string_to_float(const string&, long double&);
   279 # endif
   280 # endif
   281 
   282 # if defined (__BORLANDC__) && defined (_RTLDLL)
   283 inline void _Stl_loc_init_num_get() {  
   284 #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_)
   285   num_get<char, istreambuf_iterator<char, char_traits<char> > >::GetFacetLocaleId()._M_index = 12;
   286   num_get<char, const char*>::GetFacetLocaleId()._M_index = 13;
   287 #else
   288   num_get<char, istreambuf_iterator<char, char_traits<char> > >::id._M_index = 12;
   289   num_get<char, const char*>::id._M_index = 13;
   290 #endif
   291 # ifndef _STLP_NO_WCHAR_T
   292 #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_)
   293   num_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >::GetFacetLocaleId()._M_index = 31;
   294   num_get<wchar_t, const wchar_t*>::GetFacetLocaleId()._M_index = 32;
   295 #else
   296   num_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id._M_index = 31;
   297   num_get<wchar_t, const wchar_t*>::id._M_index = 32;
   298 #endif
   299 # endif
   300 } 
   301 # endif
   302 
   303 _STLP_DECLSPEC unsigned char* _STLP_CALL __get_digit_val_table(void);
   304 _STLP_DECLSPEC char* _STLP_CALL __get_narrow_atoms(void);
   305 _STLP_END_NAMESPACE
   306 
   307 #  if defined (_STLP_EXPOSE_STREAM_IMPLEMENTATION) && ! defined (_STLP_LINK_TIME_INSTANTIATION)
   308 #   include <stl/_num_get.c>
   309 #  endif
   310 
   311 #endif /* _STLP_INTERNAL_NUM_GET_H */
   312 
   313 // Local Variables:
   314 // mode:C++
   315 // End:
   316