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