home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 14 / hacker14.iso / programacao / cwin / c.exe / $INSTDIR / include / c++ / bits / stl_pair.h < prev    next >
Encoding:
C/C++ Source or Header  |  2003-12-15  |  5.6 KB  |  158 lines

  1. // Pair implementation -*- C++ -*-
  2.  
  3. // Copyright (C) 2001 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 2, 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. // You should have received a copy of the GNU General Public License along
  17. // with this library; see the file COPYING.  If not, write to the Free
  18. // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  19. // USA.
  20.  
  21. // As a special exception, you may use this file as part of a free software
  22. // library without restriction.  Specifically, if other files instantiate
  23. // templates or use macros or inline functions from this file, or you compile
  24. // this file and link it with other files to produce an executable, this
  25. // file does not by itself cause the resulting executable to be covered by
  26. // the GNU General Public License.  This exception does not however
  27. // invalidate any other reasons why the executable file might be covered by
  28. // the GNU General Public License.
  29.  
  30. /*
  31.  *
  32.  * Copyright (c) 1994
  33.  * Hewlett-Packard Company
  34.  *
  35.  * Permission to use, copy, modify, distribute and sell this software
  36.  * and its documentation for any purpose is hereby granted without fee,
  37.  * provided that the above copyright notice appear in all copies and
  38.  * that both that copyright notice and this permission notice appear
  39.  * in supporting documentation.  Hewlett-Packard Company makes no
  40.  * representations about the suitability of this software for any
  41.  * purpose.  It is provided "as is" without express or implied warranty.
  42.  *
  43.  *
  44.  * Copyright (c) 1996,1997
  45.  * Silicon Graphics Computer Systems, Inc.
  46.  *
  47.  * Permission to use, copy, modify, distribute and sell this software
  48.  * and its documentation for any purpose is hereby granted without fee,
  49.  * provided that the above copyright notice appear in all copies and
  50.  * that both that copyright notice and this permission notice appear
  51.  * in supporting documentation.  Silicon Graphics makes no
  52.  * representations about the suitability of this software for any
  53.  * purpose.  It is provided "as is" without express or implied warranty.
  54.  */
  55.  
  56. /** @file stl_pair.h
  57.  *  This is an internal header file, included by other library headers.
  58.  *  You should not attempt to use it directly.
  59.  */
  60.  
  61. #ifndef __GLIBCPP_INTERNAL_PAIR_H
  62. #define __GLIBCPP_INTERNAL_PAIR_H
  63.  
  64. namespace std
  65. {
  66.  
  67. /// pair holds two objects of arbitrary type.
  68. template <class _T1, class _T2>
  69. struct pair {
  70.   typedef _T1 first_type;    ///<  @c first_type is the first bound type
  71.   typedef _T2 second_type;   ///<  @c second_type is the second bound type
  72.  
  73.   _T1 first;                 ///< @c first is a copy of the first object
  74.   _T2 second;                ///< @c second is a copy of the second object
  75. #ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
  76. //265.  std::pair::pair() effects overly restrictive
  77.   /** The default constructor creates @c first and @c second using their
  78.    *  respective default constructors.  */
  79.   pair() : first(), second() {}
  80. #else
  81.   pair() : first(_T1()), second(_T2()) {}
  82. #endif
  83.   /** Two objects may be passed to a @c pair constructor to be copied.  */
  84.   pair(const _T1& __a, const _T2& __b) : first(__a), second(__b) {}
  85.  
  86.   /** There is also a templated copy ctor for the @c pair class itself.  */
  87.   template <class _U1, class _U2>
  88.   pair(const pair<_U1, _U2>& __p) : first(__p.first), second(__p.second) {}
  89. };
  90.  
  91. /// Two pairs of the same type are equal iff their members are equal.
  92. template <class _T1, class _T2>
  93. inline bool operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
  94.   return __x.first == __y.first && __x.second == __y.second; 
  95. }
  96.  
  97. /// <http://gcc.gnu.org/onlinedocs/libstdc++/20_util/howto.html#pairlt>
  98. template <class _T1, class _T2>
  99. inline bool operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
  100.   return __x.first < __y.first || 
  101.          (!(__y.first < __x.first) && __x.second < __y.second); 
  102. }
  103.  
  104. /// Uses @c operator== to find the result.
  105. template <class _T1, class _T2>
  106. inline bool operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
  107.   return !(__x == __y);
  108. }
  109.  
  110. /// Uses @c operator< to find the result.
  111. template <class _T1, class _T2>
  112. inline bool operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
  113.   return __y < __x;
  114. }
  115.  
  116. /// Uses @c operator< to find the result.
  117. template <class _T1, class _T2>
  118. inline bool operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
  119.   return !(__y < __x);
  120. }
  121.  
  122. /// Uses @c operator< to find the result.
  123. template <class _T1, class _T2>
  124. inline bool operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
  125.   return !(__x < __y);
  126. }
  127.  
  128. /**
  129.  *  @brief A convenience wrapper for creating a pair from two objects.
  130.  *  @param  x  The first object.
  131.  *  @param  y  The second object.
  132.  *  @return   A newly-constructed pair<> object of the appropriate type.
  133.  *
  134.  *  The standard requires that the objects be passed by reference-to-const,
  135.  *  but LWG issue #181 says they should be passed by const value.  We follow
  136.  *  the LWG by default.
  137. */
  138. template <class _T1, class _T2>
  139. #ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
  140. //181.  make_pair() unintended behavior
  141. inline pair<_T1, _T2> make_pair(_T1 __x, _T2 __y)
  142. #else
  143. inline pair<_T1, _T2> make_pair(const _T1& __x, const _T2& __y)
  144. #endif
  145. {
  146.   return pair<_T1, _T2>(__x, __y);
  147. }
  148.  
  149. } // namespace std
  150.  
  151. #endif /* __GLIBCPP_INTERNAL_PAIR_H */
  152.  
  153. // Local Variables:
  154. // mode:C++
  155. // End:
  156.