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