diff options
Diffstat (limited to 'libstdc++-v3/config/locale/gnu/messages_members.h')
-rw-r--r-- | libstdc++-v3/config/locale/gnu/messages_members.h | 52 |
1 files changed, 50 insertions, 2 deletions
diff --git a/libstdc++-v3/config/locale/gnu/messages_members.h b/libstdc++-v3/config/locale/gnu/messages_members.h index 68a2ea39531..d98d8d11fff 100644 --- a/libstdc++-v3/config/locale/gnu/messages_members.h +++ b/libstdc++-v3/config/locale/gnu/messages_members.h @@ -1,6 +1,6 @@ // std::messages implementation details, GNU version -*- C++ -*- -// Copyright (C) 2001, 2002 Free Software Foundation, Inc. +// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -28,13 +28,35 @@ // the GNU General Public License. // -// ISO C++ 14882: 22.2.7.1.2 messages virtual functions +// ISO C++ 14882: 22.2.7.1.2 messages functions // // Written by Benjamin Kosnik <bkoz@redhat.com> // Non-virtual member functions. template<typename _CharT> + messages<_CharT>::messages(size_t __refs) + : locale::facet(__refs) + { +#if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)) + _M_name_messages = _S_c_name; +#endif + _M_c_locale_messages = _S_c_locale; + } + + template<typename _CharT> + messages<_CharT>::messages(__c_locale __cloc, + const char* __s, size_t __refs) + : locale::facet(__refs) + { +#if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)) + _M_name_messages = new char[strlen(__s) + 1]; + strcpy(_M_name_messages, __s); +#endif + _M_c_locale_messages = _S_clone_c_locale(__cloc); + } + + template<typename _CharT> typename messages<_CharT>::catalog messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc, const char* __dir) const @@ -43,6 +65,17 @@ return this->do_open(__s, __loc); } + // Virtual member functions. + template<typename _CharT> + messages<_CharT>::~messages() + { +#if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)) + if (_S_c_name != _M_name_messages) + delete [] _M_name_messages; +#endif + _S_destroy_c_locale(_M_c_locale_messages); + } + template<typename _CharT> typename messages<_CharT>::catalog messages<_CharT>::do_open(const basic_string<char>& __s, @@ -58,3 +91,18 @@ void messages<_CharT>::do_close(catalog) const { } + + // messages_byname + template<typename _CharT> + messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs) + : messages<_CharT>(__refs) + { +#if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)) + if (_S_c_name != _M_name_messages) + delete [] _M_name_messages; + _M_name_messages = new char[strlen(__s) + 1]; + strcpy(_M_name_messages, __s); +#endif + _S_destroy_c_locale(_M_c_locale_messages); + _S_create_c_locale(_M_c_locale_messages, __s); + } |