Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
6554 serge 1
// Copyright (C) 1997-2015 Free Software Foundation, Inc.
2
//
3
// This file is part of the GNU ISO C++ Library.  This library is free
4
// software; you can redistribute it and/or modify it under the
5
// terms of the GNU General Public License as published by the
6
// Free Software Foundation; either version 3, or (at your option)
7
// any later version.
8
 
9
// This library is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
// GNU General Public License for more details.
13
 
14
// Under Section 7 of GPL version 3, you are granted additional
15
// permissions described in the GCC Runtime Library Exception, version
16
// 3.1, as published by the Free Software Foundation.
17
 
18
// You should have received a copy of the GNU General Public License and
19
// a copy of the GCC Runtime Library Exception along with this program;
20
// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
21
// .
22
 
23
#include 
24
#include 
25
#include 
26
 
27
namespace std _GLIBCXX_VISIBILITY(default)
28
{
29
_GLIBCXX_BEGIN_NAMESPACE_VERSION
30
 
31
  // Definitions for static const data members of ctype_base.
32
  const ctype_base::mask ctype_base::space;
33
  const ctype_base::mask ctype_base::print;
34
  const ctype_base::mask ctype_base::cntrl;
35
  const ctype_base::mask ctype_base::upper;
36
  const ctype_base::mask ctype_base::lower;
37
  const ctype_base::mask ctype_base::alpha;
38
  const ctype_base::mask ctype_base::digit;
39
  const ctype_base::mask ctype_base::punct;
40
  const ctype_base::mask ctype_base::xdigit;
41
  const ctype_base::mask ctype_base::alnum;
42
  const ctype_base::mask ctype_base::graph;
43
  const ctype_base::mask ctype_base::blank;
44
 
45
  // Definitions for locale::id of standard facets that are specialized.
46
  locale::id ctype::id;
47
 
48
#ifdef _GLIBCXX_USE_WCHAR_T
49
  locale::id ctype::id;
50
#endif
51
 
52
  const size_t ctype::table_size;
53
 
54
  ctype::~ctype()
55
  {
56
    _S_destroy_c_locale(_M_c_locale_ctype);
57
    if (_M_del)
58
      delete[] this->table();
59
  }
60
 
61
  // Fill in the narrowing cache and flag whether all values are
62
  // valid or not.  _M_narrow_ok is set to 2 if memcpy can't
63
  // be used.
64
  void
65
  ctype::
66
  _M_narrow_init() const
67
  {
68
    char __tmp[sizeof(_M_narrow)];
69
    for (size_t __i = 0; __i < sizeof(_M_narrow); ++__i)
70
      __tmp[__i] = __i;
71
    do_narrow(__tmp, __tmp + sizeof(__tmp), 0, _M_narrow);
72
 
73
    _M_narrow_ok = 1;
74
    if (__builtin_memcmp(__tmp, _M_narrow, sizeof(_M_narrow)))
75
      _M_narrow_ok = 2;
76
    else
77
      {
78
	// Deal with the special case of zero: renarrow with a
79
	// different default and compare.
80
	char __c;
81
	do_narrow(__tmp, __tmp + 1, 1, &__c);
82
	if (__c == 1)
83
	  _M_narrow_ok = 2;
84
      }
85
  }
86
 
87
  void
88
  ctype::
89
  _M_widen_init() const
90
  {
91
    char __tmp[sizeof(_M_widen)];
92
    for (size_t __i = 0; __i < sizeof(_M_widen); ++__i)
93
      __tmp[__i] = __i;
94
    do_widen(__tmp, __tmp + sizeof(__tmp), _M_widen);
95
 
96
    _M_widen_ok = 1;
97
    // Set _M_widen_ok to 2 if memcpy can't be used.
98
    if (__builtin_memcmp(__tmp, _M_widen, sizeof(_M_widen)))
99
      _M_widen_ok = 2;
100
  }
101
 
102
#ifdef _GLIBCXX_USE_WCHAR_T
103
  ctype::ctype(size_t __refs)
104
  : __ctype_abstract_base(__refs),
105
  _M_c_locale_ctype(_S_get_c_locale()), _M_narrow_ok(false)
106
  { _M_initialize_ctype(); }
107
 
108
  ctype::ctype(__c_locale __cloc, size_t __refs)
109
  : __ctype_abstract_base(__refs),
110
  _M_c_locale_ctype(_S_clone_c_locale(__cloc)), _M_narrow_ok(false)
111
  { _M_initialize_ctype(); }
112
 
113
  ctype::~ctype()
114
  { _S_destroy_c_locale(_M_c_locale_ctype); }
115
 
116
  ctype_byname::ctype_byname(const char* __s, size_t __refs)
117
  : ctype(__refs)
118
  {
119
    if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
120
      {
121
	this->_S_destroy_c_locale(this->_M_c_locale_ctype);
122
	this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
123
	this->_M_initialize_ctype();
124
      }
125
  }
126
 
127
  ctype_byname::~ctype_byname()
128
  { }
129
 
130
#endif
131
 
132
_GLIBCXX_END_NAMESPACE_VERSION
133
} // namespace