os/ossrv/genericopenlibs/cppstdlib/stl/src/locale_impl.h
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
/*
sl@0
     2
 * Copyright (c) 1999
sl@0
     3
 * Silicon Graphics Computer Systems, Inc.
sl@0
     4
 *
sl@0
     5
 * Copyright (c) 1999
sl@0
     6
 * Boris Fomitchev
sl@0
     7
 *
sl@0
     8
 * This material is provided "as is", with absolutely no warranty expressed
sl@0
     9
 * or implied. Any use is at your own risk.
sl@0
    10
 *
sl@0
    11
 * Permission to use or copy this software for any purpose is hereby granted
sl@0
    12
 * without fee, provided the above notices are retained on all copies.
sl@0
    13
 * Permission to modify the code and to distribute modified code is granted,
sl@0
    14
 * provided the above notices are retained, and a notice that the code was
sl@0
    15
 * modified is included with the above copyright notice.
sl@0
    16
 *
sl@0
    17
 */
sl@0
    18
sl@0
    19
#ifndef LOCALE_IMPL_H
sl@0
    20
#define LOCALE_IMPL_H
sl@0
    21
sl@0
    22
#include <clocale>             // C locale header file.
sl@0
    23
#include <vector>
sl@0
    24
#include <string>
sl@0
    25
#include <locale>
sl@0
    26
#include "c_locale.h"
sl@0
    27
sl@0
    28
_STLP_BEGIN_NAMESPACE
sl@0
    29
sl@0
    30
#if defined (_STLP_USE_TEMPLATE_EXPORT)
sl@0
    31
//Export of _Locale_impl facets container:
sl@0
    32
#  if !defined (_STLP_USE_PTR_SPECIALIZATIONS)
sl@0
    33
//If we are using pointer specialization, vector<locale::facet*> will use
sl@0
    34
//the already exported vector<void*> implementation.
sl@0
    35
_STLP_EXPORT_TEMPLATE_CLASS allocator<locale::facet*>;
sl@0
    36
sl@0
    37
_STLP_MOVE_TO_PRIV_NAMESPACE
sl@0
    38
sl@0
    39
_STLP_EXPORT_TEMPLATE_CLASS _STLP_alloc_proxy<locale::facet**, locale::facet*, allocator<locale::facet*> >;
sl@0
    40
_STLP_EXPORT_TEMPLATE_CLASS _Vector_base<locale::facet*, allocator<locale::facet*> >;
sl@0
    41
sl@0
    42
_STLP_MOVE_TO_STD_NAMESPACE
sl@0
    43
#  endif
sl@0
    44
#  if defined (_STLP_DEBUG)
sl@0
    45
_STLP_MOVE_TO_PRIV_NAMESPACE
sl@0
    46
#    define _STLP_NON_DBG_VECTOR _STLP_NON_DBG_NAME(vector)
sl@0
    47
_STLP_EXPORT_TEMPLATE_CLASS __construct_checker<_STLP_NON_DBG_VECTOR<locale::facet*, allocator<locale::facet*> > >;
sl@0
    48
_STLP_EXPORT_TEMPLATE_CLASS _STLP_NON_DBG_VECTOR<locale::facet*, allocator<locale::facet*> >;
sl@0
    49
#    undef _STLP_NON_DBG_VECTOR
sl@0
    50
_STLP_MOVE_TO_STD_NAMESPACE
sl@0
    51
#  endif
sl@0
    52
sl@0
    53
_STLP_EXPORT_TEMPLATE_CLASS vector<locale::facet*, allocator<locale::facet*> >;
sl@0
    54
#endif
sl@0
    55
sl@0
    56
//----------------------------------------------------------------------
sl@0
    57
// Class _Locale_impl
sl@0
    58
// This is the base class which implements access only and is supposed to
sl@0
    59
// be used for classic locale only
sl@0
    60
class _STLP_CLASS_DECLSPEC _Locale_impl : public _Refcount_Base {
sl@0
    61
  public:
sl@0
    62
    _Locale_impl(const char* s);
sl@0
    63
    _Locale_impl(const _Locale_impl&);
sl@0
    64
    _Locale_impl(size_t n, const char* s);
sl@0
    65
sl@0
    66
  private:
sl@0
    67
    ~_Locale_impl();
sl@0
    68
sl@0
    69
  public:
sl@0
    70
    size_t size() const { return facets_vec.size(); }
sl@0
    71
sl@0
    72
    basic_string<char, char_traits<char>, allocator<char> > name;
sl@0
    73
sl@0
    74
    static void _STLP_FUNCTION_THROWS _STLP_CALL _M_throw_bad_cast();
sl@0
    75
sl@0
    76
  private:
sl@0
    77
    void operator=(const _Locale_impl&);
sl@0
    78
sl@0
    79
  public:
sl@0
    80
    class _STLP_CLASS_DECLSPEC Init {
sl@0
    81
      public:
sl@0
    82
        Init();
sl@0
    83
        ~Init();
sl@0
    84
      private:
sl@0
    85
        _Refcount_Base& _M_count() const;
sl@0
    86
    };
sl@0
    87
sl@0
    88
    static void _STLP_CALL _S_initialize();
sl@0
    89
    static void _STLP_CALL _S_uninitialize();
sl@0
    90
sl@0
    91
    static void make_classic_locale();
sl@0
    92
    static void free_classic_locale();
sl@0
    93
sl@0
    94
    friend class Init;
sl@0
    95
sl@0
    96
  public: // _Locale
sl@0
    97
    // void remove(size_t index);
sl@0
    98
    locale::facet* insert(locale::facet*, size_t index);
sl@0
    99
    void insert(_Locale_impl* from, const locale::id& n);
sl@0
   100
sl@0
   101
    // Helper functions for byname construction of locales.
sl@0
   102
    _Locale_name_hint* insert_ctype_facets(const char* name, _Locale_name_hint* hint);
sl@0
   103
    _Locale_name_hint* insert_numeric_facets(const char* name, _Locale_name_hint* hint);
sl@0
   104
    _Locale_name_hint* insert_time_facets(const char* name, _Locale_name_hint* hint);
sl@0
   105
    _Locale_name_hint* insert_collate_facets(const char* name, _Locale_name_hint* hint);
sl@0
   106
    _Locale_name_hint* insert_monetary_facets(const char* name, _Locale_name_hint* hint);
sl@0
   107
    _Locale_name_hint* insert_messages_facets(const char* name, _Locale_name_hint* hint);
sl@0
   108
sl@0
   109
    bool operator != (const locale& __loc) const { return __loc._M_impl != this; }
sl@0
   110
sl@0
   111
  private:
sl@0
   112
    vector<locale::facet*> facets_vec;
sl@0
   113
sl@0
   114
  private:
sl@0
   115
    friend _Locale_impl * _STLP_CALL _copy_Locale_impl( _Locale_impl * );
sl@0
   116
    friend  _STLP_IMPORT_DECLSPEC  _Locale_impl * _STLP_CALL _copy_Nameless_Locale_impl( _Locale_impl * );
sl@0
   117
    friend void _STLP_CALL _release_Locale_impl( _Locale_impl *& loc );
sl@0
   118
#if defined (_STLP_USE_MSVC6_MEM_T_BUG_WORKAROUND)
sl@0
   119
    friend class _STLP_NO_MEM_T_NAME(loc);
sl@0
   120
#else
sl@0
   121
    friend class locale;
sl@0
   122
#endif
sl@0
   123
};
sl@0
   124
sl@0
   125
void _STLP_CALL _release_Locale_impl( _Locale_impl *& loc );
sl@0
   126
_Locale_impl * _STLP_CALL _copy_Locale_impl( _Locale_impl *loc );
sl@0
   127
sl@0
   128
_STLP_END_NAMESPACE
sl@0
   129
sl@0
   130
#endif
sl@0
   131
sl@0
   132
// Local Variables:
sl@0
   133
// mode:C++
sl@0
   134
// End: