Usermode/libc++ - Implement map::insert and map::erase
[tpg/acess2.git] / Usermode / Libraries / libc++.so_src / include_exp / utility
1 /*
2  * Acess2 C++ Library
3  * - By John Hodge (thePowersGang)
4  *
5  * string (header)
6  * - C++'s String type
7  */
8 #ifndef _LIBCXX_UTILITY_
9 #define _LIBCXX_UTILITY_
10
11 #include "_libcxx_helpers.h"
12 #include "type_traits"
13
14 namespace std {
15
16 template <class T1, class T2>
17 class pair
18 {
19 public:
20         typedef T1      first_type;
21         typedef T2      second_type;
22         
23         first_type      first;
24         second_type     second;
25         
26         pair()
27         {
28         }
29         template <class U, class V>
30         pair(const pair<U,V>& pr):
31                 first (pr.first),
32                 second(pr.second)
33         {
34         }
35         pair(const first_type& a, const second_type& b):
36                 first (a),
37                 second(b)
38         {
39         }
40         pair(const pair& pr):
41                 first(pr.first),
42                 second(pr.second)
43         {
44         }
45         pair(pair&& pr):
46                 first(pr.first), second(pr.second)
47         {
48         }
49         // operator = is implicit
50         pair& operator=(const pair& x) {
51                 first  = x.first;
52                 second = x.second;
53                 return *this;
54         }
55 };
56
57 template <class T1, class T2>   
58 bool operator== (const pair<T1,T2>& lhs, const pair<T1,T2>& rhs) {
59         return lhs.first == rhs.first && lhs.second == rhs.second;
60 }
61 template <class T1, class T2>   
62 bool operator!= (const pair<T1,T2>& lhs, const pair<T1,T2>& rhs) {
63         return !(lhs == rhs);
64 }
65
66 #if _CXX11_AVAIL
67 template <class T>
68 T&& forward(typename remove_reference<T>::type& arg) noexcept {
69         return static_cast<decltype(arg)&&>(arg);
70 }
71 template <class T>
72 T&& forward(typename remove_reference<T>::type&& arg) noexcept {
73         return static_cast<decltype(arg)&&>(arg);
74 }
75
76 template <class T>
77 typename remove_reference<T>::type&& move( T&& t) noexcept {
78         return static_cast<typename remove_reference<T>::type&&>(t);
79 }
80 //template <class T>
81 //constexpr typename ::std::remove_reference<T>::type&& move( T&& t) noexcept {
82 //      return static_cast<typename ::std::remove_reference<T>::type&&>(t);
83 //}
84 #endif
85
86 };      // namespace std
87
88 #endif
89
90 // vim: ft=cpp
91

UCC git Repository :: git.ucc.asn.au