williamr@2: /*
williamr@4:  * Portions Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
williamr@2:  *
williamr@2:  * Copyright (c) 1999
williamr@2:  * Silicon Graphics Computer Systems, Inc.
williamr@2:  *
williamr@4:  * Copyright (c) 1999
williamr@2:  * Boris Fomitchev
williamr@2:  *
williamr@2:  * This material is provided "as is", with absolutely no warranty expressed
williamr@2:  * or implied. Any use is at your own risk.
williamr@2:  *
williamr@4:  * Permission to use or copy this software for any purpose is hereby granted
williamr@2:  * without fee, provided the above notices are retained on all copies.
williamr@2:  * Permission to modify the code and to distribute modified code is granted,
williamr@2:  * provided the above notices are retained, and a notice that the code was
williamr@2:  * modified is included with the above copyright notice.
williamr@2:  *
williamr@4:  */
williamr@2: // WARNING: This is an internal header file, included by other C++
williamr@2: // standard library headers.  You should not attempt to use this header
williamr@2: // file directly.
williamr@2: 
williamr@2: 
williamr@2: #ifndef _STLP_INTERNAL_NUMPUNCT_H
williamr@2: #define _STLP_INTERNAL_NUMPUNCT_H
williamr@2: 
williamr@2: #ifndef _STLP_IOS_BASE_H
williamr@2: # include <stl/_ios_base.h>
williamr@2: #endif
williamr@2: 
williamr@2: # ifndef _STLP_C_LOCALE_H
williamr@2: #  include <stl/c_locale.h>
williamr@2: # endif
williamr@2: 
williamr@4: #ifndef _STLP_INTERNAL_STRING_H
williamr@2: # include <stl/_string.h>
williamr@2: #endif
williamr@2: 
williamr@2: _STLP_BEGIN_NAMESPACE
williamr@2: 
williamr@2: //----------------------------------------------------------------------
williamr@2: // numpunct facets
williamr@2: 
williamr@2: template <class _CharT> class numpunct {};
williamr@2: template <class _CharT> class numpunct_byname {};
williamr@2: template <class _Ch, class _InIt> class num_get;
williamr@2: 
williamr@2: _STLP_TEMPLATE_NULL
williamr@2: class _STLP_CLASS_DECLSPEC numpunct<char> : public locale::facet
williamr@4: {
williamr@4:   friend class _Locale_impl;
williamr@4: 
williamr@4: #ifndef _STLP_NO_FRIEND_TEMPLATES
williamr@4:   template <class _Ch, class _InIt> friend class num_get;
williamr@2: #endif
williamr@2: public:
williamr@2:   typedef char               char_type;
williamr@2:   typedef string             string_type;
williamr@2: 
williamr@4:   explicit numpunct(size_t __refs = 0)
williamr@4:     : locale::facet(__refs), _M_truename("true"), _M_falsename("false") {}
williamr@2: 
williamr@2:   char decimal_point() const { return do_decimal_point(); }
williamr@2:   char thousands_sep() const { return do_thousands_sep(); }
williamr@2:   string grouping() const { return do_grouping(); }
williamr@2:   string truename() const { return do_truename(); }
williamr@2:   string falsename() const { return do_falsename(); }
williamr@2: 
williamr@4: #if defined(__SYMBIAN32__WSD__) 
williamr@4:   _STLP_STATIC_MEMBER_DECLSPEC static locale::id& GetFacetLocaleId();
williamr@4: #elif defined (__SYMBIAN32__NO_STATIC_IMPORTS__)    
williamr@4:   _STLP_STATIC_MEMBER_DECLSPEC static locale::id& GetFacetLocaleId();
williamr@4:   static locale::id id;        
williamr@2: #else
williamr@4:   // NOTE: Symbian doesn't support exporting static data.  
williamr@4:   // Users of this class should use GetFacetLocaleId() to access the data member id  
williamr@4:   _STLP_STATIC_MEMBER_DECLSPEC static locale::id id;
williamr@2: #endif
williamr@2: 
williamr@4: #ifndef _STLP_NO_FRIEND_TEMPLATES
williamr@2: protected:
williamr@2: #endif
williamr@2: 
williamr@4:   _STLP_DECLSPEC ~numpunct();
williamr@4: 
williamr@4:   string  _M_truename;
williamr@4:   string  _M_falsename;
williamr@4:   string  _M_grouping;
williamr@2: 
williamr@2:   _STLP_DECLSPEC virtual char do_decimal_point() const;
williamr@2:   _STLP_DECLSPEC virtual char do_thousands_sep() const;
williamr@2:   _STLP_DECLSPEC virtual string do_grouping() const;
williamr@2:   _STLP_DECLSPEC virtual string do_truename() const;
williamr@2:   _STLP_DECLSPEC virtual string do_falsename()  const;
williamr@2: };
williamr@2: 
williamr@2: # if ! defined (_STLP_NO_WCHAR_T)
williamr@2: 
williamr@2: _STLP_TEMPLATE_NULL
williamr@2: class _STLP_CLASS_DECLSPEC numpunct<wchar_t> : public locale::facet
williamr@2: {
williamr@4:   friend class _Locale_impl;
williamr@2: public:
williamr@2:   typedef wchar_t               char_type;
williamr@2:   typedef wstring               string_type;
williamr@2: 
williamr@4:   explicit numpunct(size_t __refs = 0)
williamr@4:     : locale::facet(__refs), _M_truename(L"true"), _M_falsename(L"false") {}
williamr@2: 
williamr@2:   wchar_t decimal_point() const { return do_decimal_point(); }
williamr@2:   wchar_t thousands_sep() const { return do_thousands_sep(); }
williamr@2:   string grouping() const { return do_grouping(); }
williamr@2:   wstring truename() const { return do_truename(); }
williamr@2:   wstring falsename() const { return do_falsename(); }
williamr@2: 
williamr@4: #if defined(__SYMBIAN32__WSD__) 
williamr@4:   _STLP_STATIC_MEMBER_DECLSPEC static locale::id& GetFacetLocaleId();
williamr@4: #elif defined (__SYMBIAN32__NO_STATIC_IMPORTS__)    
williamr@4:   _STLP_STATIC_MEMBER_DECLSPEC static locale::id& GetFacetLocaleId();
williamr@4:   static locale::id id;         
williamr@2: #else
williamr@4:   // NOTE: Symbian doesn't support exporting static data.  
williamr@4:   // Users of this class should use GetFacetLocaleId() to access the data member id  
williamr@4:   _STLP_STATIC_MEMBER_DECLSPEC static locale::id id;
williamr@2: #endif
williamr@4:   
williamr@4: protected:
williamr@4:   wstring _M_truename;
williamr@4:   wstring _M_falsename;
williamr@4:   string _M_grouping;
williamr@2: 
williamr@4:   _STLP_DECLSPEC ~numpunct();
williamr@2: 
williamr@2:   _STLP_DECLSPEC virtual wchar_t do_decimal_point() const;
williamr@2:   _STLP_DECLSPEC virtual wchar_t do_thousands_sep() const;
williamr@4:   _STLP_DECLSPEC virtual string  do_grouping() const;
williamr@2:   _STLP_DECLSPEC virtual wstring do_truename() const;
williamr@2:   _STLP_DECLSPEC virtual wstring do_falsename()  const;
williamr@2: };
williamr@2: 
williamr@2: # endif /* WCHAR_T */
williamr@2: 
williamr@2: _STLP_TEMPLATE_NULL
williamr@2: class _STLP_CLASS_DECLSPEC numpunct_byname<char> : public numpunct<char> {
williamr@2: public:
williamr@2:   typedef char                char_type;
williamr@2:   typedef string              string_type;
williamr@2: 
williamr@4:   _STLP_DECLSPEC explicit numpunct_byname(const char* __name, size_t __refs = 0, _Locale_name_hint* __hint = 0);
williamr@2: 
williamr@2: protected:
williamr@4: 	
williamr@4:   _STLP_DECLSPEC ~numpunct_byname();
williamr@2: 
williamr@4:   _STLP_DECLSPEC virtual char   do_decimal_point() const;
williamr@2:   _STLP_DECLSPEC virtual char   do_thousands_sep() const;
williamr@4:   _STLP_DECLSPEC virtual string do_grouping()      const;
williamr@2: 
williamr@2: private:
williamr@2:   _Locale_numeric* _M_numeric;
williamr@4: 
williamr@4:   //explicitely defined as private to avoid warnings:
williamr@4:   typedef numpunct_byname<char> _Self;
williamr@4:   numpunct_byname(_Self const&);
williamr@4:   _Self& operator = (_Self const&);
williamr@4:   friend _Locale_name_hint* _Locale_extract_hint(numpunct_byname<char>*);
williamr@2: };
williamr@2: 
williamr@2: # ifndef _STLP_NO_WCHAR_T
williamr@2: _STLP_TEMPLATE_NULL
williamr@2: class _STLP_CLASS_DECLSPEC numpunct_byname<wchar_t>: public numpunct<wchar_t> {
williamr@2: public:
williamr@2:   typedef wchar_t               char_type;
williamr@2:   typedef wstring               string_type;
williamr@2: 
williamr@4:   _STLP_DECLSPEC explicit numpunct_byname(const char* __name, size_t __refs = 0, _Locale_name_hint* __hint = 0);
williamr@2: 
williamr@2: protected:
williamr@2: 
williamr@4:   _STLP_DECLSPEC ~numpunct_byname();
williamr@2: 
williamr@4:   _STLP_DECLSPEC virtual wchar_t   do_decimal_point() const;
williamr@2:   _STLP_DECLSPEC virtual wchar_t   do_thousands_sep() const;
williamr@4:   _STLP_DECLSPEC virtual string    do_grouping() const;
williamr@2: 
williamr@2: private:
williamr@2:   _Locale_numeric* _M_numeric;
williamr@4: 
williamr@4:   //explicitely defined as private to avoid warnings:
williamr@4:   typedef numpunct_byname<wchar_t> _Self;
williamr@4:   numpunct_byname(_Self const&);
williamr@4:   _Self& operator = (_Self const&);
williamr@2: };
williamr@2: 
williamr@2: # endif /* WCHAR_T */
williamr@2: 
williamr@2: _STLP_END_NAMESPACE
williamr@2: 
williamr@2: #endif /* _STLP_NUMPUNCT_H */
williamr@2: 
williamr@2: // Local Variables:
williamr@2: // mode:C++
williamr@2: // End:
williamr@2: