177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/* 277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999 377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Silicon Graphics Computer Systems, Inc. 477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999 677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Boris Fomitchev 777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * This material is provided "as is", with absolutely no warranty expressed 977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * or implied. Any use is at your own risk. 1077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 1177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to use or copy this software for any purpose is hereby granted 1277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * without fee, provided the above notices are retained on all copies. 1377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to modify the code and to distribute modified code is granted, 1477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * provided the above notices are retained, and a notice that the code was 1577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * modified is included with the above copyright notice. 1677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 1777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 1877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 1977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef LOCALE_IMPL_H 2077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#define LOCALE_IMPL_H 2177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 2277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <clocale> // C locale header file. 2377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <vector> 2477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <string> 2577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <locale> 2677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include "c_locale.h" 2777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 2877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_BEGIN_NAMESPACE 2977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_USE_TEMPLATE_EXPORT) 3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//Export of _Locale_impl facets container: 3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (_STLP_USE_PTR_SPECIALIZATIONS) 3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//If we are using pointer specialization, vector<locale::facet*> will use 3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//the already exported vector<void*> implementation. 3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE_CLASS allocator<locale::facet*>; 3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE 3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE_CLASS _STLP_alloc_proxy<locale::facet**, locale::facet*, allocator<locale::facet*> >; 4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE_CLASS _Vector_base<locale::facet*, allocator<locale::facet*> >; 4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE 4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined (_STLP_DEBUG) 4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE 4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_NON_DBG_VECTOR _STLP_NON_DBG_NAME(vector) 4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE_CLASS __construct_checker<_STLP_NON_DBG_VECTOR<locale::facet*, allocator<locale::facet*> > >; 4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE_CLASS _STLP_NON_DBG_VECTOR<locale::facet*, allocator<locale::facet*> >; 4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# undef _STLP_NON_DBG_VECTOR 5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE 5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE_CLASS vector<locale::facet*, allocator<locale::facet*> >; 5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//---------------------------------------------------------------------- 5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Class _Locale_impl 5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// This is the base class which implements access only and is supposed to 5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// be used for classic locale only 6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass _STLP_CLASS_DECLSPEC _Locale_impl : public _Refcount_Base { 6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner public: 6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Locale_impl(const char* s); 6377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Locale_impl(const _Locale_impl&); 6477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Locale_impl(size_t n, const char* s); 6577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 6677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner private: 6777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ~_Locale_impl(); 6877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 6977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner public: 7077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t size() const { return facets_vec.size(); } 7177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 7277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner basic_string<char, char_traits<char>, allocator<char> > name; 7377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 7477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static void _STLP_FUNCTION_THROWS _STLP_CALL _M_throw_bad_cast(); 7577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 7677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner private: 7777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void operator=(const _Locale_impl&); 7877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 7977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner public: 8077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner class _STLP_CLASS_DECLSPEC Init { 8177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner public: 8277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner Init(); 8377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ~Init(); 8477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner private: 8577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Refcount_Base& _M_count() const; 8677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner }; 8777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 8877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static void _STLP_CALL _S_initialize(); 8977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static void _STLP_CALL _S_uninitialize(); 9077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 9177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static void make_classic_locale(); 9277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static void free_classic_locale(); 9377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 9477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner friend class Init; 9577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 9677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner public: 9777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // void remove(size_t index); 9877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner locale::facet* insert(locale::facet*, const locale::id& n); 9977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void insert(_Locale_impl* from, const locale::id& n); 10077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 10177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // Helper functions for byname construction of locales. 10277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Locale_name_hint* insert_ctype_facets(const char* &name, char *buf, _Locale_name_hint* hint); 10377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Locale_name_hint* insert_numeric_facets(const char* &name, char *buf, _Locale_name_hint* hint); 10477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Locale_name_hint* insert_time_facets(const char* &name, char *buf, _Locale_name_hint* hint); 10577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Locale_name_hint* insert_collate_facets(const char* &name, char *buf, _Locale_name_hint* hint); 10677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Locale_name_hint* insert_monetary_facets(const char* &name, char *buf, _Locale_name_hint* hint); 10777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Locale_name_hint* insert_messages_facets(const char* &name, char *buf, _Locale_name_hint* hint); 10877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 10977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bool operator != (const locale& __loc) const { return __loc._M_impl != this; } 11077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 11177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner private: 11277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<locale::facet*> facets_vec; 11377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 11477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner private: 11577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner friend _Locale_impl * _STLP_CALL _copy_Nameless_Locale_impl( _Locale_impl * ); 11677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner friend void _STLP_CALL _release_Locale_impl( _Locale_impl *& loc ); 11777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_USE_MSVC6_MEM_T_BUG_WORKAROUND) || \ 11877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner defined (_STLP_SIGNAL_RUNTIME_COMPATIBILITY) || defined (_STLP_CHECK_RUNTIME_COMPATIBILITY) 11977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner friend class _STLP_NO_MEM_T_NAME(loc); 12077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else 12177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner friend class locale; 12277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 12377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 12477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid _STLP_CALL _release_Locale_impl( _Locale_impl *& loc ); 12677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_END_NAMESPACE 12877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 13077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 13177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Local Variables: 13277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// mode:C++ 13377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// End: 134