messages_members.h
Go to the documentation of this file.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 #include <libintl.h>
00038
00039 _GLIBCXX_BEGIN_NAMESPACE(std)
00040
00041
00042 template<typename _CharT>
00043 messages<_CharT>::messages(size_t __refs)
00044 : facet(__refs), _M_c_locale_messages(_S_get_c_locale()),
00045 _M_name_messages(_S_get_c_name())
00046 { }
00047
00048 template<typename _CharT>
00049 messages<_CharT>::messages(__c_locale __cloc, const char* __s,
00050 size_t __refs)
00051 : facet(__refs), _M_c_locale_messages(NULL), _M_name_messages(NULL)
00052 {
00053 if (__builtin_strcmp(__s, _S_get_c_name()) != 0)
00054 {
00055 const size_t __len = __builtin_strlen(__s) + 1;
00056 char* __tmp = new char[__len];
00057 __builtin_memcpy(__tmp, __s, __len);
00058 _M_name_messages = __tmp;
00059 }
00060 else
00061 _M_name_messages = _S_get_c_name();
00062
00063
00064 _M_c_locale_messages = _S_clone_c_locale(__cloc);
00065 }
00066
00067 template<typename _CharT>
00068 typename messages<_CharT>::catalog
00069 messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
00070 const char* __dir) const
00071 {
00072 bindtextdomain(__s.c_str(), __dir);
00073 return this->do_open(__s, __loc);
00074 }
00075
00076
00077 template<typename _CharT>
00078 messages<_CharT>::~messages()
00079 {
00080 if (_M_name_messages != _S_get_c_name())
00081 delete [] _M_name_messages;
00082 _S_destroy_c_locale(_M_c_locale_messages);
00083 }
00084
00085 template<typename _CharT>
00086 typename messages<_CharT>::catalog
00087 messages<_CharT>::do_open(const basic_string<char>& __s,
00088 const locale&) const
00089 {
00090
00091
00092 textdomain(__s.c_str());
00093 return 0;
00094 }
00095
00096 template<typename _CharT>
00097 void
00098 messages<_CharT>::do_close(catalog) const
00099 { }
00100
00101
00102 template<typename _CharT>
00103 messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
00104 : messages<_CharT>(__refs)
00105 {
00106 if (this->_M_name_messages != locale::facet::_S_get_c_name())
00107 {
00108 delete [] this->_M_name_messages;
00109 if (__builtin_strcmp(__s, locale::facet::_S_get_c_name()) != 0)
00110 {
00111 const size_t __len = __builtin_strlen(__s) + 1;
00112 char* __tmp = new char[__len];
00113 __builtin_memcpy(__tmp, __s, __len);
00114 this->_M_name_messages = __tmp;
00115 }
00116 else
00117 this->_M_name_messages = locale::facet::_S_get_c_name();
00118 }
00119
00120 if (__builtin_strcmp(__s, "C") != 0
00121 && __builtin_strcmp(__s, "POSIX") != 0)
00122 {
00123 this->_S_destroy_c_locale(this->_M_c_locale_messages);
00124 this->_S_create_c_locale(this->_M_c_locale_messages, __s);
00125 }
00126 }
00127
00128 _GLIBCXX_END_NAMESPACE