Home | History | Annotate | Download | only in stl
      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