00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 template<typename _CharT>
00038 messages<_CharT>::messages(size_t __refs)
00039 : facet(__refs), _M_c_locale_messages(_S_get_c_locale()),
00040 _M_name_messages(_S_get_c_name())
00041 { }
00042
00043 template<typename _CharT>
00044 messages<_CharT>::messages(__c_locale __cloc, const char* __s,
00045 size_t __refs)
00046 : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)),
00047 _M_name_messages(__s)
00048 {
00049 char* __tmp = new char[std::strlen(__s) + 1];
00050 std::strcpy(__tmp, __s);
00051 _M_name_messages = __tmp;
00052 }
00053
00054 template<typename _CharT>
00055 typename messages<_CharT>::catalog
00056 messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
00057 const char* __dir) const
00058 {
00059 bindtextdomain(__s.c_str(), __dir);
00060 return this->do_open(__s, __loc);
00061 }
00062
00063
00064 template<typename _CharT>
00065 messages<_CharT>::~messages()
00066 {
00067 if (_M_name_messages != _S_get_c_name())
00068 delete [] _M_name_messages;
00069 _S_destroy_c_locale(_M_c_locale_messages);
00070 }
00071
00072 template<typename _CharT>
00073 typename messages<_CharT>::catalog
00074 messages<_CharT>::do_open(const basic_string<char>& __s,
00075 const locale&) const
00076 {
00077
00078
00079 textdomain(__s.c_str());
00080 return 0;
00081 }
00082
00083 template<typename _CharT>
00084 void
00085 messages<_CharT>::do_close(catalog) const
00086 { }
00087
00088
00089 template<typename _CharT>
00090 messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
00091 : messages<_CharT>(__refs)
00092 {
00093 if (this->_M_name_messages != locale::facet::_S_get_c_name())
00094 delete [] this->_M_name_messages;
00095 char* __tmp = new char[std::strlen(__s) + 1];
00096 std::strcpy(__tmp, __s);
00097 this->_M_name_messages = __tmp;
00098
00099 if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
00100 {
00101 this->_S_destroy_c_locale(this->_M_c_locale_messages);
00102 this->_S_create_c_locale(this->_M_c_locale_messages, __s);
00103 }
00104 }