Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
6554 serge 1
// C++11  -*- C++ -*-
2
 
3
// Copyright (C) 2010-2015 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 include/typeindex
26
 *  This is a Standard C++ Library header.
27
 */
28
 
29
#ifndef _GLIBCXX_TYPEINDEX
30
#define _GLIBCXX_TYPEINDEX 1
31
 
32
#pragma GCC system_header
33
 
34
#if __cplusplus < 201103L
35
# include 
36
#else
37
 
38
#include 
39
 
40
namespace std _GLIBCXX_VISIBILITY(default)
41
{
42
_GLIBCXX_BEGIN_NAMESPACE_VERSION
43
 
44
  /**
45
   * @brief Class type_index
46
   * @ingroup utilities
47
   *
48
   *  The class type_index provides a simple wrapper for type_info
49
   *  which can be used as an index type in associative containers
50
   *  (23.6) and in unordered associative containers (23.7).
51
   */
52
  struct type_index
53
  {
54
    type_index(const type_info& __rhs) noexcept
55
    : _M_target(&__rhs) { }
56
 
57
    bool
58
    operator==(const type_index& __rhs) const noexcept
59
    { return *_M_target == *__rhs._M_target; }
60
 
61
    bool
62
    operator!=(const type_index& __rhs) const noexcept
63
    { return *_M_target != *__rhs._M_target; }
64
 
65
    bool
66
    operator<(const type_index& __rhs) const noexcept
67
    { return _M_target->before(*__rhs._M_target); }
68
 
69
    bool
70
    operator<=(const type_index& __rhs) const noexcept
71
    { return !__rhs._M_target->before(*_M_target); }
72
 
73
    bool
74
    operator>(const type_index& __rhs) const noexcept
75
    { return __rhs._M_target->before(*_M_target); }
76
 
77
    bool
78
    operator>=(const type_index& __rhs) const noexcept
79
    { return !_M_target->before(*__rhs._M_target); }
80
 
81
    size_t
82
    hash_code() const noexcept
83
    { return _M_target->hash_code(); }
84
 
85
    const char*
86
    name() const noexcept
87
    { return _M_target->name(); }
88
 
89
  private:
90
    const type_info* _M_target;
91
  };
92
 
93
  template struct hash;
94
 
95
  /// std::hash specialization for type_index.
96
  template<>
97
    struct hash
98
    {
99
      typedef size_t        result_type;
100
      typedef type_index  argument_type;
101
 
102
      size_t
103
      operator()(const type_index& __ti) const noexcept
104
      { return __ti.hash_code(); }
105
    };
106
 
107
_GLIBCXX_END_NAMESPACE_VERSION
108
} // namespace std
109
 
110
#endif  // C++11
111
 
112
#endif  // _GLIBCXX_TYPEINDEX