00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef MESSAGE_FACETS_H
00019 # define MESSAGE_FACETS_H
00020
00021 #include <string>
00022 #include <stl/_messages_facets.h>
00023 #include <stl/_ctype.h>
00024
00025 #include <typeinfo>
00026 #include <hash_map>
00027 #include "c_locale.h"
00028
00029 _STLP_BEGIN_NAMESPACE
00030
00031
00032 struct _Catalog_locale_map;
00033
00034 _Locale_messages* __acquire_messages(const char* name);
00035 void __release_messages(_Locale_messages* cat);
00036
00037
00038
00039
00040
00041
00042 struct _Catalog_locale_map
00043 {
00044 _Catalog_locale_map() : M(0) {}
00045 ~_Catalog_locale_map() { if (M) delete M; }
00046
00047 void insert(int key, const locale& L);
00048 locale lookup(int key) const;
00049 void erase(int key);
00050
00051 hash_map<int, locale, hash<int>, equal_to<int> >* M;
00052
00053 private:
00054 _Catalog_locale_map(const _Catalog_locale_map&);
00055 void operator=(const _Catalog_locale_map&);
00056 };
00057
00058
00059 class _Messages {
00060 public:
00061 typedef messages_base::catalog catalog;
00062
00063 _Messages();
00064
00065 virtual catalog do_open(const string& __fn, const locale& __loc) const;
00066 virtual string do_get(catalog __c, int __set, int __msgid,
00067 const string& __dfault) const;
00068 # ifndef _STLP_NO_WCHAR_T
00069 virtual wstring do_get(catalog __c, int __set, int __msgid,
00070 const wstring& __dfault) const;
00071 # endif
00072 virtual void do_close(catalog __c) const;
00073 virtual ~_Messages();
00074 bool _M_delete;
00075 };
00076
00077 class _Messages_impl : public _Messages {
00078 public:
00079
00080 _Messages_impl(bool);
00081
00082 _Messages_impl(bool, _Locale_messages*);
00083
00084 catalog do_open(const string& __fn, const locale& __loc) const;
00085 string do_get(catalog __c, int __set, int __msgid,
00086 const string& __dfault) const;
00087 # ifndef _STLP_NO_WCHAR_T
00088 wstring do_get(catalog __c, int __set, int __msgid,
00089 const wstring& __dfault) const;
00090 # endif
00091 void do_close(catalog __c) const;
00092
00093 ~_Messages_impl();
00094
00095 private:
00096 _Locale_messages* _M_message_obj;
00097 _Catalog_locale_map* _M_map;
00098 };
00099
00100 _STLP_END_NAMESPACE
00101
00102 #endif