⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stl_iterator_base_types.h

📁 openRisc2000编译链接器等,用于i386 cygwin
💻 H
字号:
// Types used in iterator implementation -*- C++ -*-// Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc.//// This file is part of the GNU ISO C++ Library.  This library is free// software; you can redistribute it and/or modify it under the// terms of the GNU General Public License as published by the// Free Software Foundation; either version 2, or (at your option)// any later version.// This library is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License along// with this library; see the file COPYING.  If not, write to the Free// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,// USA.// As a special exception, you may use this file as part of a free software// library without restriction.  Specifically, if other files instantiate// templates or use macros or inline functions from this file, or you compile// this file and link it with other files to produce an executable, this// file does not by itself cause the resulting executable to be covered by// the GNU General Public License.  This exception does not however// invalidate any other reasons why the executable file might be covered by// the GNU General Public License./* * * Copyright (c) 1994 * Hewlett-Packard Company * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation.  Hewlett-Packard Company makes no * representations about the suitability of this software for any * purpose.  It is provided "as is" without express or implied warranty. * * * Copyright (c) 1996-1998 * Silicon Graphics Computer Systems, Inc. * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation.  Silicon Graphics makes no * representations about the suitability of this software for any * purpose.  It is provided "as is" without express or implied warranty. *//** @file stl_iterator_base_types.h *  This is an internal header file, included by other library headers. *  You should not attempt to use it directly. * *  This file contains all of the general iterator-related utility types, *  such as iterator_traits and struct iterator. */#ifndef _ITERATOR_BASE_TYPES_H#define _ITERATOR_BASE_TYPES_H 1#pragma GCC system_headernamespace std{  //@{  /**   *  @defgroup iterator_tags Iterator Tags   *  These are empty types, used to distinguish different iterators.  The   *  distinction is not made by what they contain, but simply by what they   *  are.  Different underlying algorithms can then be used based on the   *  different operations supporetd by different iterator types.  */  ///  Marking input iterators.  struct input_iterator_tag {};  ///  Marking output iterators.  struct output_iterator_tag {};  /// Forward iterators support a superset of input iterator operations.  struct forward_iterator_tag : public input_iterator_tag {};  /// Bidirectional iterators support a superset of forward iterator  /// operations.  struct bidirectional_iterator_tag : public forward_iterator_tag {};  /// Random-access iterators support a superset of bidirectional iterator  /// operations.  struct random_access_iterator_tag : public bidirectional_iterator_tag {};  //@}  /**   *  @brief  Common %iterator class.   *   *  This class does nothing but define nested typedefs.  %Iterator classes   *  can inherit from this class to save some work.  The typedefs are then   *  used in specializations and overloading.   *   *  In particular, there are no default implementations of requirements   *  such as @c operator++ and the like.  (How could there be?)  */  template<typename _Category, typename _Tp, typename _Distance = ptrdiff_t,           typename _Pointer = _Tp*, typename _Reference = _Tp&>    struct iterator    {      /// One of the @link iterator_tags tag types@endlink.      typedef _Category  iterator_category;      /// The type "pointed to" by the iterator.      typedef _Tp        value_type;      /// Distance between iterators is represented as this type.      typedef _Distance  difference_type;      /// This type represents a pointer-to-value_type.      typedef _Pointer   pointer;      /// This type represents a reference-to-value_type.      typedef _Reference reference;    };  /**   *  This class does nothing but define nested typedefs.  The general   *  version simply "forwards" the nested typedefs from the Iterator   *  argument.  Specialized versions for pointers and pointers-to-const   *  provide tighter, more correct semantics.  */  template<typename _Iterator>    struct iterator_traits    {      typedef typename _Iterator::iterator_category iterator_category;      typedef typename _Iterator::value_type        value_type;      typedef typename _Iterator::difference_type   difference_type;      typedef typename _Iterator::pointer           pointer;      typedef typename _Iterator::reference         reference;    };  template<typename _Tp>    struct iterator_traits<_Tp*>    {      typedef random_access_iterator_tag iterator_category;      typedef _Tp                         value_type;      typedef ptrdiff_t                   difference_type;      typedef _Tp*                        pointer;      typedef _Tp&                        reference;    };  template<typename _Tp>    struct iterator_traits<const _Tp*>    {      typedef random_access_iterator_tag iterator_category;      typedef _Tp                         value_type;      typedef ptrdiff_t                   difference_type;      typedef const _Tp*                  pointer;      typedef const _Tp&                  reference;    };  /**   *  @if maint   *  This function is not a part of the C++ standard but is syntactic   *  sugar for internal library use only.   *  @endif  */  template<typename _Iter>    inline typename iterator_traits<_Iter>::iterator_category    __iterator_category(const _Iter&)    { return typename iterator_traits<_Iter>::iterator_category(); }} // namespace std#endif /* _ITERATOR_BASE_TYPES_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -