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

  1. // Stack 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_stack.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_STACK_H
  62. #define __GLIBCPP_INTERNAL_STACK_H
  63.  
  64. #include <bits/concept_check.h>
  65.  
  66. namespace std
  67. {
  68.  
  69. // Forward declarations of operators == and <, needed for friend declaration.
  70.  
  71. template <class _Tp, 
  72.           class _Sequence = deque<_Tp> >
  73. class stack;
  74.  
  75. template <class _Tp, class _Seq>
  76. bool operator==(const stack<_Tp,_Seq>& __x, const stack<_Tp,_Seq>& __y);
  77.  
  78. template <class _Tp, class _Seq>
  79. bool operator<(const stack<_Tp,_Seq>& __x, const stack<_Tp,_Seq>& __y);
  80.  
  81.  
  82. template <class _Tp, class _Sequence>
  83. class stack
  84. {
  85.   // concept requirements
  86.   __glibcpp_class_requires(_Tp, _SGIAssignableConcept)
  87.   __glibcpp_class_requires(_Sequence, _BackInsertionSequenceConcept)
  88.   typedef typename _Sequence::value_type _Sequence_value_type;
  89.   __glibcpp_class_requires2(_Tp, _Sequence_value_type, _SameTypeConcept);
  90.  
  91.   template <class _Tp1, class _Seq1>
  92.   friend bool operator== (const stack<_Tp1, _Seq1>&,
  93.                           const stack<_Tp1, _Seq1>&);
  94.   template <class _Tp1, class _Seq1>
  95.   friend bool operator< (const stack<_Tp1, _Seq1>&,
  96.                          const stack<_Tp1, _Seq1>&);
  97. public:
  98.   typedef typename _Sequence::value_type      value_type;
  99.   typedef typename _Sequence::size_type       size_type;
  100.   typedef          _Sequence                  container_type;
  101.  
  102.   typedef typename _Sequence::reference       reference;
  103.   typedef typename _Sequence::const_reference const_reference;
  104. protected:
  105.   _Sequence c;
  106. public:
  107.   stack() : c() {}
  108.   explicit stack(const _Sequence& __s) : c(__s) {}
  109.  
  110.   bool empty() const { return c.empty(); }
  111.   size_type size() const { return c.size(); }
  112.   reference top() { return c.back(); }
  113.   const_reference top() const { return c.back(); }
  114.   void push(const value_type& __x) { c.push_back(__x); }
  115.   void pop() { c.pop_back(); }
  116. };
  117.  
  118. template <class _Tp, class _Seq>
  119. bool operator==(const stack<_Tp,_Seq>& __x, const stack<_Tp,_Seq>& __y)
  120. {
  121.   return __x.c == __y.c;
  122. }
  123.  
  124. template <class _Tp, class _Seq>
  125. bool operator<(const stack<_Tp,_Seq>& __x, const stack<_Tp,_Seq>& __y)
  126. {
  127.   return __x.c < __y.c;
  128. }
  129.  
  130. template <class _Tp, class _Seq>
  131. bool operator!=(const stack<_Tp,_Seq>& __x, const stack<_Tp,_Seq>& __y)
  132. {
  133.   return !(__x == __y);
  134. }
  135.  
  136. template <class _Tp, class _Seq>
  137. bool operator>(const stack<_Tp,_Seq>& __x, const stack<_Tp,_Seq>& __y)
  138. {
  139.   return __y < __x;
  140. }
  141.  
  142. template <class _Tp, class _Seq>
  143. bool operator<=(const stack<_Tp,_Seq>& __x, const stack<_Tp,_Seq>& __y)
  144. {
  145.   return !(__y < __x);
  146. }
  147.  
  148. template <class _Tp, class _Seq>
  149. bool operator>=(const stack<_Tp,_Seq>& __x, const stack<_Tp,_Seq>& __y)
  150. {
  151.   return !(__x < __y);
  152. }
  153.  
  154. } // namespace std
  155.  
  156. #endif /* __GLIBCPP_INTERNAL_STACK_H */
  157.  
  158. // Local Variables:
  159. // mode:C++
  160. // End:
  161.