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#include "stlport_prefix.h"
19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <locale>
21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <algorithm>
22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <typeinfo>
23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "c_locale.h"
25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "aligned_buffer.h"
26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "acquire_release.h"
27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "locale_impl.h"
28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_BEGIN_NAMESPACE
30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
317eced231853cc34e9f2710a81664dee108176317Andrew Hsiehstatic const char _Nameless[] = "*";
32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic inline bool is_C_locale_name (const char* name)
34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return ((name[0] == 'C') && (name[1] == 0)); }
35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlocale::facet * _STLP_CALL _get_facet(locale::facet *f)
37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (f != 0)
39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    f->_M_incr();
40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return f;
41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _STLP_CALL _release_facet(locale::facet *&f)
44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if ((f != 0) && (f->_M_decr() == 0)) {
46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    delete f;
47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    f = 0;
48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottsize_t locale::id::_S_max = 27;
52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic void _Stl_loc_assign_ids();
54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic _Stl_aligned_buffer<_Locale_impl::Init> __Loc_init_buf;
56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_Locale_impl::Init::Init() {
58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (_M_count()._M_incr() == 1) {
59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Locale_impl::_S_initialize();
60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_Locale_impl::Init::~Init() {
64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (_M_count()._M_decr() == 0) {
65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Locale_impl::_S_uninitialize();
66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_Refcount_Base& _Locale_impl::Init::_M_count() const {
70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  static _Refcount_Base _S_count(0);
71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return _S_count;
72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_Locale_impl::_Locale_impl(const char* s)
75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  : _Refcount_Base(0), name(s), facets_vec() {
76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  facets_vec.reserve( locale::id::_S_max );
77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  new (&__Loc_init_buf) Init();
78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_Locale_impl::_Locale_impl( _Locale_impl const& locimpl )
81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  : _Refcount_Base(0), name(locimpl.name), facets_vec() {
82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  for_each( locimpl.facets_vec.begin(), locimpl.facets_vec.end(), _get_facet);
83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  facets_vec = locimpl.facets_vec;
84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  new (&__Loc_init_buf) Init();
85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_Locale_impl::_Locale_impl( size_t n, const char* s)
88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  : _Refcount_Base(0), name(s), facets_vec(n, 0) {
89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  new (&__Loc_init_buf) Init();
90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_Locale_impl::~_Locale_impl() {
93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  (&__Loc_init_buf)->~Init();
94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  for_each( facets_vec.begin(), facets_vec.end(), _release_facet);
95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// Initialization of the locale system.  This must be called before
98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// any locales are constructed.  (Meaning that it must be called when
99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// the I/O library itself is initialized.)
100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _STLP_CALL _Locale_impl::_S_initialize() {
101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _Stl_loc_assign_ids();
102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  make_classic_locale();
103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// Release of the classic locale ressources. Has to be called after the last
106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// locale destruction and not only after the classic locale destruction as
107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// the facets can be shared between different facets.
108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _STLP_CALL _Locale_impl::_S_uninitialize() {
109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //Not necessary anymore as classic facets are now 'normal' dynamically allocated
110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //facets with a reference counter telling to _release_facet when the facet can be
111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //deleted.
112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //free_classic_locale();
113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// _Locale_impl non-inline member functions.
116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _STLP_CALL _Locale_impl::_M_throw_bad_cast() {
117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _STLP_THROW(bad_cast());
118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Locale_impl::insert(_Locale_impl *from, const locale::id& n) {
121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (n._M_index > 0 && n._M_index < from->size()) {
122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(from->facets_vec[n._M_index], n);
123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlocale::facet* _Locale_impl::insert(locale::facet *f, const locale::id& n) {
127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (f == 0 || n._M_index == 0)
128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    return 0;
129e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (n._M_index >= facets_vec.size()) {
131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    facets_vec.resize(n._M_index + 1);
132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (f != facets_vec[n._M_index])
135e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
136e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _release_facet(facets_vec[n._M_index]);
137e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    facets_vec[n._M_index] = _get_facet(f);
138e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
140e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return f;
141e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
143e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// <locale> content which is dependent on the name
145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* Six functions, one for each category.  Each of them takes a
148e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * a name, constructs that appropriate category facets by name,
149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * and inserts them into the locale. */
150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_Locale_name_hint* _Locale_impl::insert_ctype_facets(const char* &name, char *buf, _Locale_name_hint* hint) {
151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (name[0] == 0)
152e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    name = _Locale_ctype_default(buf);
153e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (name == 0 || name[0] == 0 || is_C_locale_name(name)) {
155e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Locale_impl* i2 = locale::classic()._M_impl;
156e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(i2, ctype<char>::id);
157e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(i2, codecvt<char, char, mbstate_t>::id);
158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(i2, ctype<wchar_t>::id);
160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(i2, codecvt<wchar_t, char, mbstate_t>::id);
161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  } else {
163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale::facet*    ct  = 0;
164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale::facet*    cvt = 0;
165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale::facet* wct    = 0;
167e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale::facet* wcvt   = 0;
168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
169e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    int __err_code;
170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Locale_ctype *__lct = _STLP_PRIV __acquire_ctype(name, buf, hint, &__err_code);
171e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (!__lct) {
172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      locale::_M_throw_on_creation_failure(__err_code, name, "ctype");
173e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      return hint;
174e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
175e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
176e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (hint == 0) hint = _Locale_get_ctype_hint(__lct);
177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
178e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_TRY {
179e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ct   = new ctype_byname<char>(__lct);
180e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
181e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_UNWIND(_STLP_PRIV __release_ctype(__lct));
182e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
183e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_TRY {
184e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      cvt  = new codecvt_byname<char, char, mbstate_t>(name);
185e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
186e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_UNWIND(delete ct);
187e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
188e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
189e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_TRY {
190e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      _Locale_ctype *__lwct = _STLP_PRIV __acquire_ctype(name, buf, hint, &__err_code);
191e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      if (!__lwct) {
192e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        locale::_M_throw_on_creation_failure(__err_code, name, "ctype");
193e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        return hint;
194e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      }
195e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
196e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      _STLP_TRY {
197e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        wct  = new ctype_byname<wchar_t>(__lwct);
198e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      }
199e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      _STLP_UNWIND(_STLP_PRIV __release_ctype(__lwct));
200e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
201e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      _Locale_codecvt *__lwcvt = _STLP_PRIV __acquire_codecvt(name, buf, hint, &__err_code);
202e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      if (__lwcvt) {
203e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        _STLP_TRY {
204e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott          wcvt = new codecvt_byname<wchar_t, char, mbstate_t>(__lwcvt);
205e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        }
206e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        _STLP_UNWIND(_STLP_PRIV __release_codecvt(__lwcvt); delete wct);
207e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      }
208e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
209e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_UNWIND(delete cvt; delete ct);
210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
211e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
212e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(ct, ctype<char>::id);
213e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(cvt, codecvt<char, char, mbstate_t>::id);
214e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
215e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(wct, ctype<wchar_t>::id);
216e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (wcvt) this->insert(wcvt, codecvt<wchar_t, char, mbstate_t>::id);
217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
218e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
219e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return hint;
220e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
221e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
222e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_Locale_name_hint* _Locale_impl::insert_numeric_facets(const char* &name, char *buf, _Locale_name_hint* hint) {
223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (name[0] == 0)
224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    name = _Locale_numeric_default(buf);
225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
226e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _Locale_impl* i2 = locale::classic()._M_impl;
227e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
228e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // We first insert name independant facets taken from the classic locale instance:
229e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  this->insert(i2,
230e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott               num_put<char, ostreambuf_iterator<char, char_traits<char> >  >::id);
231e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  this->insert(i2,
232e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott               num_get<char, istreambuf_iterator<char, char_traits<char> > >::id);
233e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
234e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  this->insert(i2,
235e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott               num_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> >  >::id);
236e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  this->insert(i2,
237e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott               num_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id);
238e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
239e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (name == 0 || name[0] == 0 || is_C_locale_name(name)) {
241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(i2, numpunct<char>::id);
242e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
243e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(i2, numpunct<wchar_t>::id);
244e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
245e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
246e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  else {
247e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale::facet* punct  = 0;
248e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
249e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale::facet* wpunct = 0;
250e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
251e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
252e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    int __err_code;
253e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Locale_numeric *__lpunct = _STLP_PRIV __acquire_numeric(name, buf, hint, &__err_code);
254e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (!__lpunct) {
255e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      locale::_M_throw_on_creation_failure(__err_code, name, "numpunct");
256e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      return hint;
257e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
258e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
259e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (hint == 0) hint = _Locale_get_numeric_hint(__lpunct);
260e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_TRY {
261e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      punct = new numpunct_byname<char>(__lpunct);
262e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
263e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_UNWIND(_STLP_PRIV __release_numeric(__lpunct));
264e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
265e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
266e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Locale_numeric *__lwpunct = _STLP_PRIV __acquire_numeric(name, buf, hint, &__err_code);
267e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (!__lwpunct) {
268e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      delete punct;
269e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      locale::_M_throw_on_creation_failure(__err_code, name, "numpunct");
270e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      return hint;
271e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
272e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (__lwpunct) {
273e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      _STLP_TRY {
274e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        wpunct  = new numpunct_byname<wchar_t>(__lwpunct);
275e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      }
276e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      _STLP_UNWIND(_STLP_PRIV __release_numeric(__lwpunct); delete punct);
277e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
278e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
279e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
280e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(punct, numpunct<char>::id);
281e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
282e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(wpunct, numpunct<wchar_t>::id);
283e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
284e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
285e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return hint;
286e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
287e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
288e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_Locale_name_hint* _Locale_impl::insert_time_facets(const char* &name, char *buf, _Locale_name_hint* hint) {
289e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (name[0] == 0)
290e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    name = _Locale_time_default(buf);
291e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
292e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (name == 0 || name[0] == 0 || is_C_locale_name(name)) {
293e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Locale_impl* i2 = locale::classic()._M_impl;
294e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(i2,
295e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                 time_get<char, istreambuf_iterator<char, char_traits<char> > >::id);
296e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(i2,
297e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                 time_put<char, ostreambuf_iterator<char, char_traits<char> > >::id);
298e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
299e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(i2,
300e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                 time_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id);
301e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(i2,
302e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                 time_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id);
303e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
304e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  } else {
305e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale::facet *get = 0;
306e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale::facet *put = 0;
307e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
308e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale::facet *wget = 0;
309e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale::facet *wput = 0;
310e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
311e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
312e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    int __err_code;
313e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Locale_time *__time = _STLP_PRIV __acquire_time(name, buf, hint, &__err_code);
314e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (!__time) {
315e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      // time facets category is not mandatory for correct stream behavior so if platform
316e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      // do not support it we do not generate a runtime_error exception.
317e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      if (__err_code == _STLP_LOC_NO_MEMORY) {
318e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        _STLP_THROW_BAD_ALLOC;
319e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      }
320e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      return hint;
321e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
322e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
323e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (!hint) hint = _Locale_get_time_hint(__time);
324e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_TRY {
325e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      get = new time_get_byname<char, istreambuf_iterator<char, char_traits<char> > >(__time);
326e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      put = new time_put_byname<char, ostreambuf_iterator<char, char_traits<char> > >(__time);
327e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
328e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      wget = new time_get_byname<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >(__time);
329e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      wput = new time_put_byname<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >(__time);
330e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
331e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
332e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
333e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_UNWIND(delete wget; delete put; delete get; _STLP_PRIV __release_time(__time));
334e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else
335e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_UNWIND(delete get; _STLP_PRIV __release_time(__time));
336e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
337e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
338e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_PRIV __release_time(__time);
339e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
340e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(get, time_get<char, istreambuf_iterator<char, char_traits<char> > >::id);
341e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(put, time_put<char, ostreambuf_iterator<char, char_traits<char> > >::id);
342e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
343e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(wget, time_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id);
344e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(wput, time_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id);
345e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
346e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
347e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return hint;
348e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
349e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
350e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_Locale_name_hint* _Locale_impl::insert_collate_facets(const char* &name, char *buf, _Locale_name_hint* hint) {
351e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (name[0] == 0)
352e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    name = _Locale_collate_default(buf);
353e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
354e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (name == 0 || name[0] == 0 || is_C_locale_name(name)) {
355e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Locale_impl* i2 = locale::classic()._M_impl;
356e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(i2, collate<char>::id);
357e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
358e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(i2, collate<wchar_t>::id);
359e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
360e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
361e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  else {
362e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale::facet *col = 0;
363e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
364e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale::facet *wcol = 0;
365e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
366e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
367e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    int __err_code;
368e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Locale_collate *__coll = _STLP_PRIV __acquire_collate(name, buf, hint, &__err_code);
369e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (!__coll) {
370e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      if (__err_code == _STLP_LOC_NO_MEMORY) {
371e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        _STLP_THROW_BAD_ALLOC;
372e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      }
373e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      return hint;
374e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
375e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
376e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (hint == 0) hint = _Locale_get_collate_hint(__coll);
377e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_TRY {
378e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      col = new collate_byname<char>(__coll);
379e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
380e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_UNWIND(_STLP_PRIV __release_collate(__coll));
381e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
382e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
383e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Locale_collate *__wcoll = _STLP_PRIV __acquire_collate(name, buf, hint, &__err_code);
384e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (!__wcoll) {
385e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      if (__err_code == _STLP_LOC_NO_MEMORY) {
386e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        delete col;
387e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        _STLP_THROW_BAD_ALLOC;
388e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      }
389e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
390e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (__wcoll) {
391e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      _STLP_TRY {
392e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        wcol  = new collate_byname<wchar_t>(__wcoll);
393e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      }
394e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      _STLP_UNWIND(_STLP_PRIV __release_collate(__wcoll); delete col);
395e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
396e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
397e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
398e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(col, collate<char>::id);
399e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
400e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (wcol) this->insert(wcol, collate<wchar_t>::id);
401e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
402e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
403e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return hint;
404e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
405e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
406e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_Locale_name_hint* _Locale_impl::insert_monetary_facets(const char* &name, char *buf, _Locale_name_hint* hint) {
407e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (name[0] == 0)
408e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    name = _Locale_monetary_default(buf);
409e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
410e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _Locale_impl* i2 = locale::classic()._M_impl;
411e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
412e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // We first insert name independant facets taken from the classic locale instance:
413e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  this->insert(i2, money_get<char, istreambuf_iterator<char, char_traits<char> > >::id);
414e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  this->insert(i2, money_put<char, ostreambuf_iterator<char, char_traits<char> > >::id);
415e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
416e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  this->insert(i2, money_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id);
417e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  this->insert(i2, money_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id);
418e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
419e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
420e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (name == 0 || name[0] == 0 || is_C_locale_name(name)) {
421e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(i2, moneypunct<char, false>::id);
422e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(i2, moneypunct<char, true>::id);
423e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
424e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(i2, moneypunct<wchar_t, false>::id);
425e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(i2, moneypunct<wchar_t, true>::id);
426e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
427e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
428e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  else {
429e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale::facet *punct   = 0;
430e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale::facet *ipunct  = 0;
431e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
432e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
433e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale::facet* wpunct  = 0;
434e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale::facet* wipunct = 0;
435e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
436e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
437e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    int __err_code;
438e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Locale_monetary *__mon = _STLP_PRIV __acquire_monetary(name, buf, hint, &__err_code);
439e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (!__mon) {
440e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      if (__err_code == _STLP_LOC_NO_MEMORY) {
441e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        _STLP_THROW_BAD_ALLOC;
442e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      }
443e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      return hint;
444e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
445e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
446e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (hint == 0) hint = _Locale_get_monetary_hint(__mon);
447e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
448e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_TRY {
449e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      punct   = new moneypunct_byname<char, false>(__mon);
450e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
451e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_UNWIND(_STLP_PRIV __release_monetary(__mon));
452e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
453e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Locale_monetary *__imon = _STLP_PRIV __acquire_monetary(name, buf, hint, &__err_code);
454e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (!__imon) {
455e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      delete punct;
456e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      if (__err_code == _STLP_LOC_NO_MEMORY) {
457e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        _STLP_THROW_BAD_ALLOC;
458e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      }
459e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      return hint;
460e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
461e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
462e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_TRY {
463e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ipunct  = new moneypunct_byname<char, true>(__imon);
464e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
465e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_UNWIND(_STLP_PRIV __release_monetary(__imon); delete punct);
466e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
467e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
468e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_TRY {
469e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      _Locale_monetary *__wmon = _STLP_PRIV __acquire_monetary(name, buf, hint, &__err_code);
470e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      if (!__wmon) {
471e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        if (__err_code == _STLP_LOC_NO_MEMORY) {
472e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott          _STLP_THROW_BAD_ALLOC;
473e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        }
474e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      }
475e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
476e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      if (__wmon) {
477e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        _STLP_TRY {
478e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott          wpunct  = new moneypunct_byname<wchar_t, false>(__wmon);
479e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        }
480e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        _STLP_UNWIND(_STLP_PRIV __release_monetary(__wmon));
481e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
482e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        _Locale_monetary *__wimon = _STLP_PRIV __acquire_monetary(name, buf, hint, &__err_code);
483e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        if (!__wimon) {
484e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott          delete wpunct;
485e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott          if (__err_code == _STLP_LOC_NO_MEMORY) {
486e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott            _STLP_THROW_BAD_ALLOC;
487e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott          }
488e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott          wpunct = 0;
489e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        }
490e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        else {
491e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott          _STLP_TRY {
492e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott            wipunct = new moneypunct_byname<wchar_t, true>(__wimon);
493e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott          }
494e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott          _STLP_UNWIND(_STLP_PRIV __release_monetary(__wimon); delete wpunct);
495e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        }
496e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      }
497e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
498e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_UNWIND(delete ipunct; delete punct);
499e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
500e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
501e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(punct, moneypunct<char, false>::id);
502e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(ipunct, moneypunct<char, true>::id);
503e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
504e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (wpunct) this->insert(wpunct, moneypunct<wchar_t, false>::id);
505e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (wipunct) this->insert(wipunct, moneypunct<wchar_t, true>::id);
506e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
507e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
508e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return hint;
509e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
510e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
511e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_Locale_name_hint* _Locale_impl::insert_messages_facets(const char* &name, char *buf, _Locale_name_hint* hint) {
512e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (name[0] == 0)
513e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    name = _Locale_messages_default(buf);
514e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
515e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (name == 0 || name[0] == 0 || is_C_locale_name(name)) {
516e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Locale_impl* i2 = locale::classic()._M_impl;
517e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(i2, messages<char>::id);
518e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
519e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(i2, messages<wchar_t>::id);
520e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
521e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
522e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  else {
523e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale::facet *msg  = 0;
524e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
525e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale::facet *wmsg = 0;
526e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
527e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
528e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    int __err_code;
529e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Locale_messages *__msg = _STLP_PRIV __acquire_messages(name, buf, hint, &__err_code);
530e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (!__msg) {
531e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      if (__err_code == _STLP_LOC_NO_MEMORY) {
532e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        _STLP_THROW_BAD_ALLOC;
533e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      }
534e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      return hint;
535e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
536e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
537e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_TRY {
538e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      msg  = new messages_byname<char>(__msg);
539e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
540e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_UNWIND(_STLP_PRIV __release_messages(__msg));
541e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
542e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
543e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_TRY {
544e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      _Locale_messages *__wmsg = _STLP_PRIV __acquire_messages(name, buf, hint, &__err_code);
545e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      if (!__wmsg) {
546e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        if (__err_code == _STLP_LOC_NO_MEMORY) {
547e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott          _STLP_THROW_BAD_ALLOC;
548e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        }
549e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      }
550e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
551e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      if (__wmsg) {
552e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        _STLP_TRY {
553e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott          wmsg = new messages_byname<wchar_t>(__wmsg);
554e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        }
555e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        _STLP_UNWIND(_STLP_PRIV __release_messages(__wmsg));
556e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      }
557e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
558e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_UNWIND(delete msg);
559e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
560e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
561e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    this->insert(msg, messages<char>::id);
562e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
563e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (wmsg) this->insert(wmsg, messages<wchar_t>::id);
564e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
565e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
566e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return hint;
567e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
568e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
569e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic void _Stl_loc_assign_ids() {
570e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // This assigns ids to every facet that is a member of a category,
571e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // and also to money_get/put, num_get/put, and time_get/put
572e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // instantiated using ordinary pointers as the input/output
573e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // iterators.  (The default is [io]streambuf_iterator.)
574e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
575e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  money_get<char, istreambuf_iterator<char, char_traits<char> > >::id._M_index          = 8;
576e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  money_put<char, ostreambuf_iterator<char, char_traits<char> > >::id._M_index          = 9;
577e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  num_get<char, istreambuf_iterator<char, char_traits<char> > >::id._M_index            = 10;
578e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  num_put<char, ostreambuf_iterator<char, char_traits<char> > >::id._M_index            = 11;
579e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  time_get<char, istreambuf_iterator<char, char_traits<char> > >::id._M_index           = 12;
580e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  time_put<char, ostreambuf_iterator<char, char_traits<char> > >::id._M_index           = 13;
581e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
582e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
583e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  money_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id._M_index = 21;
584e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  money_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id._M_index = 22;
585e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  num_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id._M_index   = 23;
586e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  num_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > > ::id._M_index  = 24;
587e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  time_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id._M_index  = 25;
588e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  time_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id._M_index  = 26;
589e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
590e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //  locale::id::_S_max                               = 27;
591e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
592e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
593e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// To access those static instance use the getter below, they guaranty
594e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// a correct initialization.
595e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic locale *_Stl_classic_locale = 0;
596e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic locale *_Stl_global_locale = 0;
597e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
598e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlocale* _Stl_get_classic_locale() {
599e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  static _Locale_impl::Init init;
600e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return _Stl_classic_locale;
601e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
602e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
603e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlocale* _Stl_get_global_locale() {
604e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  static _Locale_impl::Init init;
605e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return _Stl_global_locale;
606e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
607e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
608e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_MSVC) || defined (__ICL) || defined (__ISCPP__) || defined (__DMC__)
609e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
610e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * The following static variable needs to be initialized before STLport
611e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * users static variable in order for him to be able to use Standard
612e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * streams in its variable initialization.
613e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * This variable is here because MSVC do not allow to change the initialization
614e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * segment in a given translation unit, iostream.cpp already contains an
615e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * initialization segment specification.
616e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
617e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  pragma warning (disable : 4073)
618e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  pragma init_seg(lib)
619e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
620e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
621e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic ios_base::Init _IosInit;
622e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
623e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Locale_impl::make_classic_locale() {
624e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // This funcion will be called once: during build classic _Locale_impl
625e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
626e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // The classic locale contains every facet that belongs to a category.
627e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  static _Stl_aligned_buffer<_Locale_impl> _Locale_classic_impl_buf;
628e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _Locale_impl *classic = new(&_Locale_classic_impl_buf) _Locale_impl("C");
629e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
630e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  locale::facet* classic_facets[] = {
631e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    0,
632e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new collate<char>(1),
633e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new ctype<char>(0, false, 1),
634e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new codecvt<char, char, mbstate_t>(1),
635e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new moneypunct<char, true>(1),
636e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new moneypunct<char, false>(1),
637e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new numpunct<char>(1),
638e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new messages<char>(1),
639e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new money_get<char, istreambuf_iterator<char, char_traits<char> > >(1),
640e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new money_put<char, ostreambuf_iterator<char, char_traits<char> > >(1),
641e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new num_get<char, istreambuf_iterator<char, char_traits<char> > >(1),
642e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new num_put<char, ostreambuf_iterator<char, char_traits<char> > >(1),
643e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new time_get<char, istreambuf_iterator<char, char_traits<char> > >(1),
644e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new time_put<char, ostreambuf_iterator<char, char_traits<char> > >(1),
645e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
646e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new collate<wchar_t>(1),
647e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new ctype<wchar_t>(1),
648e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new codecvt<wchar_t, char, mbstate_t>(1),
649e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new moneypunct<wchar_t, true>(1),
650e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new moneypunct<wchar_t, false>(1),
651e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new numpunct<wchar_t>(1),
652e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new messages<wchar_t>(1),
653e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new money_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >(1),
654e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new money_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >(1),
655e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new num_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >(1),
656e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new num_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >(1),
657e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new time_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >(1),
658e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    new time_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >(1),
659e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
660e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    0
661e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  };
662e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
663e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  const size_t nb_classic_facets = sizeof(classic_facets) / sizeof(locale::facet *);
664e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  classic->facets_vec.reserve(nb_classic_facets);
665e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  classic->facets_vec.assign(&classic_facets[0], &classic_facets[0] + nb_classic_facets);
666e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
667e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  static locale _Locale_classic(classic);
668e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _Stl_classic_locale = &_Locale_classic;
669e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
670e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  static locale _Locale_global(classic);
671e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _Stl_global_locale = &_Locale_global;
672e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
673e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
674e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// Declarations of (non-template) facets' static data members
675e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// size_t locale::id::_S_max = 27; // made before
676e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
677e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlocale::id collate<char>::id = { 1 };
678e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlocale::id ctype<char>::id = { 2 };
679e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlocale::id codecvt<char, char, mbstate_t>::id = { 3 };
680e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlocale::id moneypunct<char, true>::id = { 4 };
681e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlocale::id moneypunct<char, false>::id = { 5 };
682e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlocale::id numpunct<char>::id = { 6 } ;
683e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlocale::id messages<char>::id = { 7 };
684e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
685e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
686e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlocale::id collate<wchar_t>::id = { 14 };
687e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlocale::id ctype<wchar_t>::id = { 15 };
688e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlocale::id codecvt<wchar_t, char, mbstate_t>::id = { 16 };
689e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlocale::id moneypunct<wchar_t, true>::id = { 17 } ;
690e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlocale::id moneypunct<wchar_t, false>::id = { 18 } ;
691e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlocale::id numpunct<wchar_t>::id = { 19 };
692e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlocale::id messages<wchar_t>::id = { 20 };
693e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
694e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
695e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_DECLSPEC _Locale_impl* _STLP_CALL _get_Locale_impl(_Locale_impl *loc)
696e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
697e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _STLP_ASSERT( loc != 0 );
698e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  loc->_M_incr();
699e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return loc;
700e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
701e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
702e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _STLP_CALL _release_Locale_impl(_Locale_impl *& loc)
703e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
704e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _STLP_ASSERT( loc != 0 );
705e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (loc->_M_decr() == 0) {
706e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (*loc != *_Stl_classic_locale)
707e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      delete loc;
708e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    else
709e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      loc->~_Locale_impl();
710e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    loc = 0;
711e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
712e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
713e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
714e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_DECLSPEC _Locale_impl* _STLP_CALL _copy_Nameless_Locale_impl(_Locale_impl *loc)
715e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
716e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _STLP_ASSERT( loc != 0 );
717e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _Locale_impl *loc_new = new _Locale_impl(*loc);
718e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  loc_new->name = _Nameless;
719e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return loc_new;
720e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
721e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
722e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* _GetFacetId implementation have to be here in order to be in the same translation unit
723e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * as where id are initialize (in _Stl_loc_assign_ids) */
724e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_PRIV_NAMESPACE
725e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
726e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_DECLSPEC locale::id& _STLP_CALL _GetFacetId(const money_get<char, istreambuf_iterator<char, char_traits<char> > >*)
727e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return money_get<char, istreambuf_iterator<char, char_traits<char> > >::id; }
728e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_DECLSPEC locale::id& _STLP_CALL _GetFacetId(const money_put<char, ostreambuf_iterator<char, char_traits<char> > >*)
729e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return money_put<char, ostreambuf_iterator<char, char_traits<char> > >::id; }
730e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
731e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_DECLSPEC locale::id& _STLP_CALL _GetFacetId(const money_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >*)
732e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return money_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id; }
733e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_DECLSPEC locale::id& _STLP_CALL _GetFacetId(const money_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >*)
734e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return money_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id; }
735e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
736e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
737e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_DECLSPEC locale::id& _STLP_CALL _GetFacetId(const num_get<char, istreambuf_iterator<char, char_traits<char> > >*)
738e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return num_get<char, istreambuf_iterator<char, char_traits<char> > >::id; }
739e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
740e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_DECLSPEC locale::id& _STLP_CALL _GetFacetId(const num_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >*)
741e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return num_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id; }
742e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
743e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
744e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_DECLSPEC locale::id& _STLP_CALL _GetFacetId(const num_put<char, ostreambuf_iterator<char, char_traits<char> > >*)
745e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return num_put<char, ostreambuf_iterator<char, char_traits<char> > >::id; }
746e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
747e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_DECLSPEC locale::id& _STLP_CALL _GetFacetId(const num_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >*)
748e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return num_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id; }
749e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
750e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
751e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_DECLSPEC locale::id& _STLP_CALL _GetFacetId(const time_get<char, istreambuf_iterator<char, char_traits<char> > >*)
752e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return time_get<char, istreambuf_iterator<char, char_traits<char> > >::id; }
753e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_DECLSPEC locale::id& _STLP_CALL _GetFacetId(const time_put<char, ostreambuf_iterator<char, char_traits<char> > >*)
754e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return time_put<char, ostreambuf_iterator<char, char_traits<char> > >::id; }
755e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
756e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_DECLSPEC locale::id& _STLP_CALL _GetFacetId(const time_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >*)
757e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return time_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id; }
758e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_DECLSPEC locale::id& _STLP_CALL _GetFacetId(const time_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >*)
759e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return time_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >::id; }
760e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
761e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
762e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_STD_NAMESPACE
763e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
764e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_END_NAMESPACE
765e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
766