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