Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5134 serge 1
// TR1 utility -*- C++ -*-
2
 
3
// Copyright (C) 2004-2013 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/utility
26
 *  This is a TR1 C++ Library header.
27
 */
28
 
29
#ifndef _GLIBCXX_TR1_UTILITY
30
#define _GLIBCXX_TR1_UTILITY 1
31
 
32
#pragma GCC system_header
33
 
34
#include 
35
#include 
36
#include 
37
 
38
namespace std _GLIBCXX_VISIBILITY(default)
39
{
40
namespace tr1
41
{
42
_GLIBCXX_BEGIN_NAMESPACE_VERSION
43
 
44
  template
45
    class tuple_size;
46
 
47
  template
48
    class tuple_element;
49
 
50
   // Various functions which give std::pair a tuple-like interface.
51
  template
52
    struct tuple_size >
53
    { static const int value = 2; };
54
 
55
  template
56
    const int
57
    tuple_size >::value;
58
 
59
  template
60
    struct tuple_element<0, std::pair<_Tp1, _Tp2> >
61
    { typedef _Tp1 type; };
62
 
63
  template
64
    struct tuple_element<1, std::pair<_Tp1, _Tp2> >
65
    { typedef _Tp2 type; };
66
 
67
  template
68
    struct __pair_get;
69
 
70
  template<>
71
    struct __pair_get<0>
72
    {
73
      template
74
      static _Tp1& __get(std::pair<_Tp1, _Tp2>& __pair)
75
      { return __pair.first; }
76
 
77
      template
78
      static const _Tp1& __const_get(const std::pair<_Tp1, _Tp2>& __pair)
79
      { return __pair.first; }
80
    };
81
 
82
  template<>
83
    struct __pair_get<1>
84
    {
85
      template
86
      static _Tp2& __get(std::pair<_Tp1, _Tp2>& __pair)
87
      { return __pair.second; }
88
 
89
      template
90
      static const _Tp2& __const_get(const std::pair<_Tp1, _Tp2>& __pair)
91
      { return __pair.second; }
92
    };
93
 
94
  template
95
    inline typename tuple_element<_Int, std::pair<_Tp1, _Tp2> >::type&
96
    get(std::pair<_Tp1, _Tp2>& __in)
97
    { return __pair_get<_Int>::__get(__in); }
98
 
99
  template
100
    inline const typename tuple_element<_Int, std::pair<_Tp1, _Tp2> >::type&
101
    get(const std::pair<_Tp1, _Tp2>& __in)
102
    { return __pair_get<_Int>::__const_get(__in); }
103
 
104
_GLIBCXX_END_NAMESPACE_VERSION
105
}
106
}
107
 
108
#endif // _GLIBCXX_TR1_UTILITY