OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [libstdc++-v3/] [include/] [tr1/] [type_traits] - Blame information for rev 424

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 424 jeremybenn
// TR1 type_traits -*- C++ -*-
2
 
3
// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
4
//
5
// This file is part of the GNU ISO C++ Library.  This library is free
6
// software; you can redistribute it and/or modify it under the
7
// terms of the GNU General Public License as published by the
8
// Free Software Foundation; either version 3, or (at your option)
9
// any later version.
10
 
11
// This library is distributed in the hope that it will be useful,
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
// GNU General Public License for more details.
15
 
16
// Under Section 7 of GPL version 3, you are granted additional
17
// permissions described in the GCC Runtime Library Exception, version
18
// 3.1, as published by the Free Software Foundation.
19
 
20
// You should have received a copy of the GNU General Public License and
21
// a copy of the GCC Runtime Library Exception along with this program;
22
// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
23
// .
24
 
25
/** @file tr1/type_traits
26
 *  This is a TR1 C++ Library header.
27
 */
28
 
29
#ifndef _GLIBCXX_TR1_TYPE_TRAITS
30
#define _GLIBCXX_TR1_TYPE_TRAITS 1
31
 
32
#pragma GCC system_header
33
 
34
#if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
35
#  error TR1 header cannot be included from C++0x header
36
#endif
37
 
38
#include 
39
 
40
#if defined(_GLIBCXX_INCLUDE_AS_TR1)
41
#  include 
42
#else
43
#  define _GLIBCXX_INCLUDE_AS_TR1
44
#  define _GLIBCXX_BEGIN_NAMESPACE_TR1 namespace tr1 {
45
#  define _GLIBCXX_END_NAMESPACE_TR1 }
46
#  define _GLIBCXX_TR1 tr1::
47
#  include 
48
#  undef _GLIBCXX_TR1
49
#  undef _GLIBCXX_END_NAMESPACE_TR1
50
#  undef _GLIBCXX_BEGIN_NAMESPACE_TR1
51
#  undef _GLIBCXX_INCLUDE_AS_TR1
52
#endif
53
 
54
namespace std
55
{
56
namespace tr1
57
{
58
#define _DEFINE_SPEC(_Trait, _Type)    \
59
  template<>                           \
60
    struct _Trait<_Type>              \
61
    : public true_type { };
62
 
63
  template
64
    struct is_reference
65
    : public false_type { };
66
 
67
  template
68
    struct is_reference<_Tp&>
69
    : public true_type { };
70
 
71
  template
72
    struct is_pod
73
    : public integral_constant::value>
74
    { };
75
 
76
  template
77
    struct has_trivial_constructor
78
    : public integral_constant::value>
79
    { };
80
 
81
  template
82
    struct has_trivial_copy
83
    : public integral_constant::value>
84
    { };
85
 
86
  template
87
    struct has_trivial_assign
88
    : public integral_constant::value>
89
    { };
90
 
91
  template
92
    struct has_trivial_destructor
93
    : public integral_constant::value>
94
    { };
95
 
96
  template
97
    struct has_nothrow_constructor
98
    : public integral_constant::value>
99
    { };
100
 
101
  template
102
    struct has_nothrow_copy
103
    : public integral_constant::value>
104
    { };
105
 
106
  template
107
    struct has_nothrow_assign
108
    : public integral_constant::value>
109
    { };
110
 
111
  template
112
    struct __is_signed_helper
113
    : public false_type { };
114
  _DEFINE_SPEC(__is_signed_helper, signed char)
115
  _DEFINE_SPEC(__is_signed_helper, short)
116
  _DEFINE_SPEC(__is_signed_helper, int)
117
  _DEFINE_SPEC(__is_signed_helper, long)
118
  _DEFINE_SPEC(__is_signed_helper, long long)
119
 
120
  template
121
    struct is_signed
122
    : public integral_constant
123
                                      remove_cv<_Tp>::type>::value)>
124
    { };
125
 
126
  template
127
    struct __is_unsigned_helper
128
    : public false_type { };
129
  _DEFINE_SPEC(__is_unsigned_helper, unsigned char)
130
  _DEFINE_SPEC(__is_unsigned_helper, unsigned short)
131
  _DEFINE_SPEC(__is_unsigned_helper, unsigned int)
132
  _DEFINE_SPEC(__is_unsigned_helper, unsigned long)
133
  _DEFINE_SPEC(__is_unsigned_helper, unsigned long long)
134
 
135
  template
136
    struct is_unsigned
137
    : public integral_constant
138
                                      remove_cv<_Tp>::type>::value)>
139
    { };
140
 
141
  template
142
    struct __is_base_of_helper
143
    {
144
      typedef typename remove_cv<_Base>::type    _NoCv_Base;
145
      typedef typename remove_cv<_Derived>::type _NoCv_Derived;
146
      static const bool __value = (is_same<_Base, _Derived>::value
147
                                   || (__is_base_of(_Base, _Derived)
148
                                       && !is_same<_NoCv_Base,
149
                                                   _NoCv_Derived>::value));
150
    };
151
 
152
  template
153
    struct is_base_of
154
    : public integral_constant
155
                               __is_base_of_helper<_Base, _Derived>::__value>
156
    { };
157
 
158
  template
159
    struct __is_convertible_simple
160
    : public __sfinae_types
161
    {
162
    private:
163
      static __one __test(_To);
164
      static __two __test(...);
165
      static _From __makeFrom();
166
 
167
    public:
168
      static const bool __value = sizeof(__test(__makeFrom())) == 1;
169
    };
170
 
171
  template
172
    struct add_reference;
173
 
174
  template
175
    struct __is_int_or_cref
176
    {
177
      typedef typename remove_reference<_Tp>::type __rr_Tp;
178
      static const bool __value = (is_integral<_Tp>::value
179
                                   || (is_integral<__rr_Tp>::value
180
                                       && is_const<__rr_Tp>::value
181
                                       && !is_volatile<__rr_Tp>::value));
182
    };
183
 
184
  template
185
           bool = (is_void<_From>::value || is_void<_To>::value
186
                   || is_function<_To>::value || is_array<_To>::value
187
                   // This special case is here only to avoid warnings.
188
                   || (is_floating_point
189
                       remove_reference<_From>::type>::value
190
                       && __is_int_or_cref<_To>::__value))>
191
    struct __is_convertible_helper
192
    {
193
      // "An imaginary lvalue of type From...".
194
      static const bool __value = (__is_convertible_simple
195
                                   add_reference<_From>::type, _To>::__value);
196
    };
197
 
198
  template
199
    struct __is_convertible_helper<_From, _To, true>
200
    { static const bool __value = (is_void<_To>::value
201
                                   || (__is_int_or_cref<_To>::__value
202
                                       && !is_void<_From>::value)); };
203
 
204
  template
205
    struct is_convertible
206
    : public integral_constant
207
                               __is_convertible_helper<_From, _To>::__value>
208
    { };
209
 
210
  // reference modifications [4.7.2].
211
  template
212
    struct remove_reference
213
    { typedef _Tp     type; };
214
 
215
  template
216
    struct remove_reference<_Tp&>
217
    { typedef _Tp     type; };
218
 
219
  // NB: Careful with reference to void.
220
  template::value
221
                                 || is_reference<_Tp>::value)>
222
    struct __add_reference_helper
223
    { typedef _Tp&    type; };
224
 
225
  template
226
    struct __add_reference_helper<_Tp, true>
227
    { typedef _Tp     type; };
228
 
229
  template
230
    struct add_reference
231
    : public __add_reference_helper<_Tp>
232
    { };
233
 
234
  // other transformations [4.8].
235
  template
236
    struct aligned_storage
237
    {
238
      union type
239
      {
240
        unsigned char __data[_Len];
241
        struct __attribute__((__aligned__((_Align)))) { } __align;
242
      };
243
    };
244
 
245
#undef _DEFINE_SPEC
246
}
247
}
248
 
249
#endif // _GLIBCXX_TR1_TYPE_TRAITS

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.