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 : locale::facet(__refs)
00040 {
00041 #if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2))
00042 _M_name_messages = _S_c_name;
00043 #endif
00044 _M_c_locale_messages = _S_c_locale;
00045 }
00046
00047 template<typename _CharT>
00048 messages<_CharT>::messages(__c_locale __cloc,
00049 const char* __s, size_t __refs)
00050 : locale::facet(__refs)
00051 {
00052 #if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2))
00053 _M_name_messages = new char[strlen(__s) + 1];
00054 strcpy(_M_name_messages, __s);
00055 #endif
00056 _M_c_locale_messages = _S_clone_c_locale(__cloc);
00057 }
00058
00059 template<typename _CharT>
00060 typename messages<_CharT>::catalog
00061 messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
00062 const char* __dir) const
00063 {
00064 bindtextdomain(__s.c_str(), __dir);
00065 return this->do_open(__s, __loc);
00066 }
00067
00068
00069 template<typename _CharT>
00070 messages<_CharT>::~messages()
00071 {
00072 #if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2))
00073 if (_S_c_name != _M_name_messages)
00074 delete [] _M_name_messages;
00075 #endif
00076 _S_destroy_c_locale(_M_c_locale_messages);
00077 }
00078
00079 template<typename _CharT>
00080 typename messages<_CharT>::catalog
00081 messages<_CharT>::do_open(const basic_string<char>& __s,
00082 const locale&) const
00083 {
00084
00085
00086 textdomain(__s.c_str());
00087 return 0;
00088 }
00089
00090 template<typename _CharT>
00091 void
00092 messages<_CharT>::do_close(catalog) const
00093 { }
00094
00095
00096 template<typename _CharT>
00097 messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
00098 : messages<_CharT>(__refs)
00099 {
00100 #if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2))
00101 if (_S_c_name != _M_name_messages)
00102 delete [] _M_name_messages;
00103 _M_name_messages = new char[strlen(__s) + 1];
00104 strcpy(_M_name_messages, __s);
00105 #endif
00106 _S_destroy_c_locale(_M_c_locale_messages);
00107 _S_create_c_locale(_M_c_locale_messages, __s);
00108 }