| /* |
| * Copyright (c) 1999 |
| * Silicon Graphics Computer Systems, Inc. |
| * |
| * Copyright (c) 1999 |
| * Boris Fomitchev |
| * |
| * This material is provided "as is", with absolutely no warranty expressed |
| * or implied. Any use is at your own risk. |
| * |
| * Permission to use or copy this software for any purpose is hereby granted |
| * without fee, provided the above notices are retained on all copies. |
| * Permission to modify the code and to distribute modified code is granted, |
| * provided the above notices are retained, and a notice that the code was |
| * modified is included with the above copyright notice. |
| * |
| */ |
| |
| #ifndef LOCALE_IMPL_H |
| #define LOCALE_IMPL_H |
| |
| #include <clocale> // C locale header file. |
| #include <vector> |
| #include <string> |
| #include <locale> |
| #include "c_locale.h" |
| |
| _STLP_BEGIN_NAMESPACE |
| |
| #if defined (_STLP_USE_TEMPLATE_EXPORT) |
| //Export of _Locale_impl facets container: |
| # if !defined (_STLP_USE_PTR_SPECIALIZATIONS) |
| //If we are using pointer specialization, vector<locale::facet*> will use |
| //the already exported vector<void*> implementation. |
| _STLP_EXPORT_TEMPLATE_CLASS allocator<locale::facet*>; |
| |
| _STLP_MOVE_TO_PRIV_NAMESPACE |
| |
| _STLP_EXPORT_TEMPLATE_CLASS _STLP_alloc_proxy<locale::facet**, locale::facet*, allocator<locale::facet*> >; |
| _STLP_EXPORT_TEMPLATE_CLASS _Vector_base<locale::facet*, allocator<locale::facet*> >; |
| |
| _STLP_MOVE_TO_STD_NAMESPACE |
| # endif |
| # if defined (_STLP_DEBUG) |
| _STLP_MOVE_TO_PRIV_NAMESPACE |
| # define _STLP_NON_DBG_VECTOR _STLP_NON_DBG_NAME(vector) |
| _STLP_EXPORT_TEMPLATE_CLASS __construct_checker<_STLP_NON_DBG_VECTOR<locale::facet*, allocator<locale::facet*> > >; |
| _STLP_EXPORT_TEMPLATE_CLASS _STLP_NON_DBG_VECTOR<locale::facet*, allocator<locale::facet*> >; |
| # undef _STLP_NON_DBG_VECTOR |
| _STLP_MOVE_TO_STD_NAMESPACE |
| # endif |
| |
| _STLP_EXPORT_TEMPLATE_CLASS vector<locale::facet*, allocator<locale::facet*> >; |
| #endif |
| |
| //---------------------------------------------------------------------- |
| // Class _Locale_impl |
| // This is the base class which implements access only and is supposed to |
| // be used for classic locale only |
| class _STLP_CLASS_DECLSPEC _Locale_impl : public _Refcount_Base { |
| public: |
| _Locale_impl(const char* s); |
| _Locale_impl(const _Locale_impl&); |
| _Locale_impl(size_t n, const char* s); |
| |
| private: |
| ~_Locale_impl(); |
| |
| public: |
| size_t size() const { return facets_vec.size(); } |
| |
| basic_string<char, char_traits<char>, allocator<char> > name; |
| |
| static void _STLP_FUNCTION_THROWS _STLP_CALL _M_throw_bad_cast(); |
| |
| private: |
| void operator=(const _Locale_impl&); |
| |
| public: |
| class _STLP_CLASS_DECLSPEC Init { |
| public: |
| Init(); |
| ~Init(); |
| private: |
| _Refcount_Base& _M_count() const; |
| }; |
| |
| static void _STLP_CALL _S_initialize(); |
| static void _STLP_CALL _S_uninitialize(); |
| |
| static void make_classic_locale(); |
| static void free_classic_locale(); |
| |
| friend class Init; |
| |
| public: |
| // void remove(size_t index); |
| locale::facet* insert(locale::facet*, const locale::id& n); |
| void insert(_Locale_impl* from, const locale::id& n); |
| |
| // Helper functions for byname construction of locales. |
| _Locale_name_hint* insert_ctype_facets(const char* &name, char *buf, _Locale_name_hint* hint); |
| _Locale_name_hint* insert_numeric_facets(const char* &name, char *buf, _Locale_name_hint* hint); |
| _Locale_name_hint* insert_time_facets(const char* &name, char *buf, _Locale_name_hint* hint); |
| _Locale_name_hint* insert_collate_facets(const char* &name, char *buf, _Locale_name_hint* hint); |
| _Locale_name_hint* insert_monetary_facets(const char* &name, char *buf, _Locale_name_hint* hint); |
| _Locale_name_hint* insert_messages_facets(const char* &name, char *buf, _Locale_name_hint* hint); |
| |
| bool operator != (const locale& __loc) const { return __loc._M_impl != this; } |
| |
| private: |
| vector<locale::facet*> facets_vec; |
| |
| private: |
| friend _Locale_impl * _STLP_CALL _copy_Nameless_Locale_impl( _Locale_impl * ); |
| friend void _STLP_CALL _release_Locale_impl( _Locale_impl *& loc ); |
| #if defined (_STLP_USE_MSVC6_MEM_T_BUG_WORKAROUND) || \ |
| defined (_STLP_SIGNAL_RUNTIME_COMPATIBILITY) || defined (_STLP_CHECK_RUNTIME_COMPATIBILITY) |
| friend class _STLP_NO_MEM_T_NAME(loc); |
| #else |
| friend class locale; |
| #endif |
| }; |
| |
| void _STLP_CALL _release_Locale_impl( _Locale_impl *& loc ); |
| |
| _STLP_END_NAMESPACE |
| |
| #endif |
| |
| // Local Variables: |
| // mode:C++ |
| // End: |