1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* 2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Copyright (c) 1999 3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Silicon Graphics Computer Systems, Inc. 4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Copyright (c) 1999 6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Boris Fomitchev 7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * This material is provided "as is", with absolutely no warranty expressed 9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * or implied. Any use is at your own risk. 10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Permission to use or copy this software for any purpose is hereby granted 12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * without fee, provided the above notices are retained on all copies. 13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Permission to modify the code and to distribute modified code is granted, 14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * provided the above notices are retained, and a notice that the code was 15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * modified is included with the above copyright notice. 16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */ 18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef LOCALE_IMPL_H 20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#define LOCALE_IMPL_H 21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <clocale> // C locale header file. 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <vector> 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <string> 25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <locale> 26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "c_locale.h" 27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_BEGIN_NAMESPACE 29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_USE_TEMPLATE_EXPORT) 31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//Export of _Locale_impl facets container: 32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined (_STLP_USE_PTR_SPECIALIZATIONS) 33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//If we are using pointer specialization, vector<locale::facet*> will use 34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//the already exported vector<void*> implementation. 35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_EXPORT_TEMPLATE_CLASS allocator<locale::facet*>; 36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_PRIV_NAMESPACE 38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_EXPORT_TEMPLATE_CLASS _STLP_alloc_proxy<locale::facet**, locale::facet*, allocator<locale::facet*> >; 40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_EXPORT_TEMPLATE_CLASS _Vector_base<locale::facet*, allocator<locale::facet*> >; 41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_STD_NAMESPACE 43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_DEBUG) 45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_PRIV_NAMESPACE 46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_NON_DBG_VECTOR _STLP_NON_DBG_NAME(vector) 47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_EXPORT_TEMPLATE_CLASS __construct_checker<_STLP_NON_DBG_VECTOR<locale::facet*, allocator<locale::facet*> > >; 48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_EXPORT_TEMPLATE_CLASS _STLP_NON_DBG_VECTOR<locale::facet*, allocator<locale::facet*> >; 49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# undef _STLP_NON_DBG_VECTOR 50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_STD_NAMESPACE 51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_EXPORT_TEMPLATE_CLASS vector<locale::facet*, allocator<locale::facet*> >; 54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//---------------------------------------------------------------------- 57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// Class _Locale_impl 58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// This is the base class which implements access only and is supposed to 59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// be used for classic locale only 60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass _STLP_CLASS_DECLSPEC _Locale_impl : public _Refcount_Base { 61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott public: 62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Locale_impl(const char* s); 63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Locale_impl(const _Locale_impl&); 64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Locale_impl(size_t n, const char* s); 65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott private: 67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ~_Locale_impl(); 68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott public: 70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t size() const { return facets_vec.size(); } 71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott basic_string<char, char_traits<char>, allocator<char> > name; 73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static void _STLP_FUNCTION_THROWS _STLP_CALL _M_throw_bad_cast(); 75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott private: 77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void operator=(const _Locale_impl&); 78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott public: 80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott class _STLP_CLASS_DECLSPEC Init { 81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott public: 82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott Init(); 83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ~Init(); 84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott private: 85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Refcount_Base& _M_count() const; 86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott }; 87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static void _STLP_CALL _S_initialize(); 89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static void _STLP_CALL _S_uninitialize(); 90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static void make_classic_locale(); 92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static void free_classic_locale(); 93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott friend class Init; 95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott public: 97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // void remove(size_t index); 98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale::facet* insert(locale::facet*, const locale::id& n); 99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void insert(_Locale_impl* from, const locale::id& n); 100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // Helper functions for byname construction of locales. 102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Locale_name_hint* insert_ctype_facets(const char* &name, char *buf, _Locale_name_hint* hint); 103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Locale_name_hint* insert_numeric_facets(const char* &name, char *buf, _Locale_name_hint* hint); 104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Locale_name_hint* insert_time_facets(const char* &name, char *buf, _Locale_name_hint* hint); 105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Locale_name_hint* insert_collate_facets(const char* &name, char *buf, _Locale_name_hint* hint); 106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Locale_name_hint* insert_monetary_facets(const char* &name, char *buf, _Locale_name_hint* hint); 107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Locale_name_hint* insert_messages_facets(const char* &name, char *buf, _Locale_name_hint* hint); 108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott bool operator != (const locale& __loc) const { return __loc._M_impl != this; } 110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott private: 112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<locale::facet*> facets_vec; 113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott private: 115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott friend _Locale_impl * _STLP_CALL _copy_Nameless_Locale_impl( _Locale_impl * ); 116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott friend void _STLP_CALL _release_Locale_impl( _Locale_impl *& loc ); 117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_USE_MSVC6_MEM_T_BUG_WORKAROUND) || \ 118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott defined (_STLP_SIGNAL_RUNTIME_COMPATIBILITY) || defined (_STLP_CHECK_RUNTIME_COMPATIBILITY) 119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott friend class _STLP_NO_MEM_T_NAME(loc); 120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else 121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott friend class locale; 122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _STLP_CALL _release_Locale_impl( _Locale_impl *& loc ); 126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_END_NAMESPACE 128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 129e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// Local Variables: 132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// mode:C++ 133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// End: 134