messages.cpp revision e46c9386c4f79aa40185f79a19fc5b2a7ef528b3
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 <typeinfo>
21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "message_facets.h"
23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "acquire_release.h"
24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_BEGIN_NAMESPACE
26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_PRIV_NAMESPACE
28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Catalog_locale_map::insert(nl_catd_type key, const locale& L) {
30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _STLP_TRY {
31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_TYPEINFO) && !defined (_STLP_NO_RTTI)
32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // Don't bother to do anything unless we're using a non-default ctype facet
33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  ifdef _STLP_NO_WCHAR_T
34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef char _Char;
35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  else
36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef wchar_t _Char;
37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef ctype<_Char> wctype;
40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    wctype const& wct = use_facet<wctype>(L);
41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (typeid(wct) != typeid(wctype)) {
42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      if (!M)
44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        M = new map_type;
45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      M->insert(map_type::value_type(key, L));
47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_TYPEINFO) && !defined (_STLP_NO_RTTI)
48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _STLP_CATCH_ALL {}
52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Catalog_locale_map::erase(nl_catd_type key) {
55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (M)
56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    M->erase(key);
57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlocale _Catalog_locale_map::lookup(nl_catd_type key) const {
60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (M) {
61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    map_type::const_iterator i = M->find(key);
62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    return i != M->end() ? (*i).second : locale::classic();
63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  else
65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    return locale::classic();
66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_USE_NL_CATD_MAPPING)
70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_VOLATILE __stl_atomic_t _Catalog_nl_catd_map::_count = 0;
71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmessages_base::catalog _Catalog_nl_catd_map::insert(nl_catd_type cat) {
73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  messages_base::catalog &res = Mr[cat];
74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if ( res == 0 ) {
75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_ATOMIC_INCREMENT)
76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    res = __STATIC_CAST(int, _STLP_ATOMIC_INCREMENT(&_count));
77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else
78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    static _STLP_STATIC_MUTEX _Count_lock _STLP_MUTEX_INITIALIZER;
79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      _STLP_auto_lock sentry(_Count_lock);
81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      res = __STATIC_CAST(int, ++_count);
82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    M[res] = cat;
85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return res;
87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Catalog_nl_catd_map::erase(messages_base::catalog cat) {
90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  map_type::iterator mit(M.find(cat));
91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (mit != M.end()) {
92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    Mr.erase((*mit).second);
93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    M.erase(mit);
94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//----------------------------------------------------------------------
99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_Messages::_Messages(bool is_wide, const char *name) :
101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _M_message_obj(0), _M_map(0) {
102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (!name)
103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale::_M_throw_on_null_name();
104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  int __err_code;
106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  char buf[_Locale_MAX_SIMPLE_NAME];
107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _M_message_obj = _STLP_PRIV __acquire_messages(name, buf, 0, &__err_code);
108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (!_M_message_obj)
109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale::_M_throw_on_creation_failure(__err_code, name, "messages");
110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (is_wide)
112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _M_map = new _Catalog_locale_map;
113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_Messages::_Messages(bool is_wide, _Locale_messages* msg) :
116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _M_message_obj(msg), _M_map(is_wide ? new _Catalog_locale_map() : 0)
117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{}
118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_Messages::~_Messages() {
120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  __release_messages(_M_message_obj);
121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  delete _M_map;
122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_Messages::catalog _Messages::do_open(const string& filename, const locale& L) const {
125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  nl_catd_type result = _M_message_obj ? _Locale_catopen(_M_message_obj, filename.c_str())
126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    : (nl_catd_type)(-1);
127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if ( result != (nl_catd_type)(-1) ) {
129e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if ( _M_map != 0 ) {
130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      _M_map->insert(result, L);
131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    return _STLP_MUTABLE(_Messages_impl, _M_cat).insert( result );
133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
135e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return -1;
136e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
137e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
138e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstring _Messages::do_get(catalog cat,
139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                         int set, int p_id, const string& dfault) const {
140e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return _M_message_obj != 0 && cat >= 0
141e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ? string(_Locale_catgets(_M_message_obj, _STLP_MUTABLE(_Messages_impl, _M_cat)[cat],
142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                             set, p_id, dfault.c_str()))
143e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    : dfault;
144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_WCHAR_T)
147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
148e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwstring
149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_Messages::do_get(catalog thecat,
150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                  int set, int p_id, const wstring& dfault) const {
151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef ctype<wchar_t> wctype;
152e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  const wctype& ct = use_facet<wctype>(_M_map->lookup(_STLP_MUTABLE(_Messages_impl, _M_cat)[thecat]));
153e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  const char* str = _Locale_catgets(_M_message_obj, _STLP_MUTABLE(_Messages_impl, _M_cat)[thecat], set, p_id, "");
155e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
156e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // Verify that the lookup failed; an empty string might represent success.
157e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (!str)
158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    return dfault;
159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  else if (str[0] == '\0') {
160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    const char* str2 = _Locale_catgets(_M_message_obj, _STLP_MUTABLE(_Messages_impl, _M_cat)[thecat], set, p_id, "*");
161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (!str2 || ((str2[0] == '*') && (str2[1] == '\0')))
162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      return dfault;
163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // str is correct.  Now we must widen it to get a wstring.
166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  size_t n = strlen(str);
167e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // NOT PORTABLE.  What we're doing relies on internal details of the
169e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // string implementation.  (Contiguity of string elements.)
170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  wstring result(n, wchar_t(0));
171e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ct.widen(str, str + n, &*result.begin());
172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return result;
173e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
174e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
175e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
176e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Messages::do_close(catalog thecat) const {
178e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (_M_message_obj)
179e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Locale_catclose(_M_message_obj, _STLP_MUTABLE(_Messages_impl, _M_cat)[thecat]);
180e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (_M_map) _M_map->erase(_STLP_MUTABLE(_Messages_impl, _M_cat)[thecat]);
181e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _STLP_MUTABLE(_Messages_impl, _M_cat).erase( thecat );
182e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
183e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
184e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_STD_NAMESPACE
185e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
186e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//----------------------------------------------------------------------
187e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// messages<char>
188e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmessages<char>::messages(size_t refs)
189e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  : locale::facet(refs) {}
190e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
191e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmessages_byname<char>::messages_byname(const char *name, size_t refs)
192e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  : messages<char>(refs), _M_impl(new _STLP_PRIV _Messages(false, name)) {}
193e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
194e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmessages_byname<char>::messages_byname(_Locale_messages* msg)
195e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  : messages<char>(0), _M_impl(new _STLP_PRIV _Messages(false, msg)) {}
196e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
197e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmessages_byname<char>::~messages_byname()
198e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ delete _M_impl; }
199e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
200e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmessages_byname<char>::catalog
201e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmessages_byname<char>::do_open(const string& filename, const locale& l) const
202e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _M_impl->do_open(filename, l); }
203e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
204e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstring
205e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmessages_byname<char>::do_get(catalog cat, int set, int p_id,
206e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                              const string& dfault) const
207e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _M_impl->do_get(cat, set, p_id, dfault); }
208e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
209e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid messages_byname<char>::do_close(catalog cat) const
210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ _M_impl->do_close(cat); }
211e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
212e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_WCHAR_T)
213e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
214e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//----------------------------------------------------------------------
215e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// messages<wchar_t>
216e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmessages<wchar_t>::messages(size_t refs)
218e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  : locale::facet(refs) {}
219e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
220e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmessages_byname<wchar_t>::messages_byname(const char *name, size_t refs)
221e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  : messages<wchar_t>(refs), _M_impl(new _STLP_PRIV _Messages(true, name)) {}
222e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmessages_byname<wchar_t>::messages_byname(_Locale_messages* msg)
224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  : messages<wchar_t>(0), _M_impl(new _STLP_PRIV _Messages(true, msg)) {}
225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
226e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmessages_byname<wchar_t>::~messages_byname()
227e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ delete _M_impl; }
228e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
229e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmessages_byname<wchar_t>::catalog
230e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmessages_byname<wchar_t>::do_open(const string& filename, const locale& L) const
231e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _M_impl->do_open(filename, L); }
232e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
233e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwstring
234e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottmessages_byname<wchar_t>::do_get(catalog thecat,
235e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                 int set, int p_id, const wstring& dfault) const
236e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _M_impl->do_get(thecat, set, p_id, dfault); }
237e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
238e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid messages_byname<wchar_t>::do_close(catalog cat) const
239e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ _M_impl->do_close(cat); }
240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
242e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
243e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_END_NAMESPACE
244e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
245e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// Local Variables:
246e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// mode:C++
247e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// End:
248