aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/config/locale/gnu/messages_members.h
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/config/locale/gnu/messages_members.h')
-rw-r--r--libstdc++-v3/config/locale/gnu/messages_members.h52
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);
+ }