1 /* 2 * Copyright (c) 1999 3 * Silicon Graphics Computer Systems, Inc. 4 * 5 * Copyright (c) 1999 6 * Boris Fomitchev 7 * 8 * This material is provided "as is", with absolutely no warranty expressed 9 * or implied. Any use is at your own risk. 10 * 11 * Permission to use or copy this software for any purpose is hereby granted 12 * without fee, provided the above notices are retained on all copies. 13 * Permission to modify the code and to distribute modified code is granted, 14 * provided the above notices are retained, and a notice that the code was 15 * modified is included with the above copyright notice. 16 * 17 */ 18 19 // WARNING: This is an internal header file, included by other C++ 20 // standard library headers. You should not attempt to use this header 21 // file directly. 22 23 24 #ifndef _STLP_INTERNAL_MESSAGES_H 25 #define _STLP_INTERNAL_MESSAGES_H 26 27 #ifndef _STLP_IOS_BASE_H 28 # include <stl/_ios_base.h> 29 #endif 30 31 #ifndef _STLP_C_LOCALE_H 32 # include <stl/c_locale.h> 33 #endif 34 35 #ifndef _STLP_INTERNAL_STRING_H 36 # include <stl/_string.h> 37 #endif 38 39 _STLP_BEGIN_NAMESPACE 40 41 // messages facets 42 43 class messages_base { 44 public: 45 typedef int catalog; 46 }; 47 48 template <class _CharT> class messages {}; 49 50 _STLP_MOVE_TO_PRIV_NAMESPACE 51 class _Messages; 52 _STLP_MOVE_TO_STD_NAMESPACE 53 54 _STLP_TEMPLATE_NULL 55 class _STLP_CLASS_DECLSPEC messages<char> : public locale::facet, public messages_base { 56 public: 57 typedef messages_base::catalog catalog; 58 typedef char char_type; 59 typedef string string_type; 60 61 explicit messages(size_t __refs = 0); 62 63 catalog open(const string& __fn, const locale& __loc) const 64 { return do_open(__fn, __loc); } 65 string_type get(catalog __c, int __set, int __msgid, 66 const string_type& __dfault) const 67 { return do_get(__c, __set, __msgid, __dfault); } 68 inline void close(catalog __c) const 69 { do_close(__c); } 70 71 static _STLP_STATIC_DECLSPEC locale::id id; 72 73 protected: 74 ~messages() {} 75 76 virtual catalog do_open(const string& __fn, const locale& __loc) const 77 { return -1; } 78 virtual string_type do_get(catalog __c, int __set, int __msgid, 79 const string_type& __dfault) const 80 { return __dfault; } 81 virtual void do_close(catalog __c) const 82 {} 83 }; 84 85 #if !defined (_STLP_NO_WCHAR_T) 86 87 _STLP_TEMPLATE_NULL 88 class _STLP_CLASS_DECLSPEC messages<wchar_t> : public locale::facet, public messages_base { 89 public: 90 typedef messages_base::catalog catalog; 91 typedef wchar_t char_type; 92 typedef wstring string_type; 93 94 explicit messages(size_t __refs = 0); 95 96 inline catalog open(const string& __fn, const locale& __loc) const 97 { return do_open(__fn, __loc); } 98 inline string_type get(catalog __c, int __set, int __msgid, 99 const string_type& __dfault) const 100 { return do_get(__c, __set, __msgid, __dfault); } 101 inline void close(catalog __c) const 102 { do_close(__c); } 103 104 static _STLP_STATIC_DECLSPEC locale::id id; 105 106 protected: 107 ~messages() {} 108 109 virtual catalog do_open(const string& __fn, const locale& __loc) const 110 { return -1; } 111 virtual string_type do_get(catalog __c, int __set, int __msgid, 112 const string_type& __dfault) const 113 { return __dfault; } 114 virtual void do_close(catalog __c) const 115 {} 116 }; 117 118 #endif 119 120 template <class _CharT> class messages_byname {}; 121 122 _STLP_TEMPLATE_NULL 123 class _STLP_CLASS_DECLSPEC messages_byname<char> : public messages<char> { 124 friend class _Locale_impl; 125 public: 126 typedef messages_base::catalog catalog; 127 typedef string string_type; 128 129 explicit messages_byname(const char* __name, size_t __refs = 0); 130 131 protected: 132 ~messages_byname(); 133 134 virtual catalog do_open(const string& __fn, const locale& __loc) const; 135 virtual string_type do_get(catalog __c, int __set, int __msgid, 136 const string_type& __dfault) const; 137 virtual void do_close(catalog __c) const; 138 139 private: 140 messages_byname(_Locale_messages*); 141 typedef messages_byname<char> _Self; 142 //explicitely defined as private to avoid warnings: 143 messages_byname(_Self const&); 144 _Self& operator = (_Self const&); 145 146 _STLP_PRIV _Messages* _M_impl; 147 }; 148 149 #if !defined (_STLP_NO_WCHAR_T) 150 _STLP_TEMPLATE_NULL 151 class _STLP_CLASS_DECLSPEC messages_byname<wchar_t> : public messages<wchar_t> { 152 friend class _Locale_impl; 153 public: 154 typedef messages_base::catalog catalog; 155 typedef wstring string_type; 156 157 explicit messages_byname(const char* __name, size_t __refs = 0); 158 159 protected: 160 ~messages_byname(); 161 162 virtual catalog do_open(const string& __fn, const locale& __loc) const; 163 virtual string_type do_get(catalog __c, int __set, int __msgid, 164 const string_type& __dfault) const; 165 virtual void do_close(catalog __c) const; 166 167 private: 168 messages_byname(_Locale_messages*); 169 typedef messages_byname<wchar_t> _Self; 170 //explicitely defined as private to avoid warnings: 171 messages_byname(_Self const&); 172 _Self& operator = (_Self const&); 173 174 _STLP_PRIV _Messages* _M_impl; 175 }; 176 #endif /* WCHAR_T */ 177 178 _STLP_END_NAMESPACE 179 180 #endif /* _STLP_INTERNAL_MESSAGES_H */ 181 182 // Local Variables: 183 // mode:C++ 184 // End: 185 186