stl_iterator_base_types.h
来自「ARM Linux Tool 各种代码包括MTD」· C头文件 代码 · 共 183 行
H
183 行
/* * * 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. *//* NOTE: This is an internal header file, included by other STL headers. * You should not attempt to use it directly. */#ifndef __SGI_STL_INTERNAL_ITERATOR_BASE_TYPES_H#define __SGI_STL_INTERNAL_ITERATOR_BASE_TYPES_H// This file contains all of the general iterator-related utility// types, such as iterator_traits and struct iterator.// The internal file stl_iterator.h contains predefined iterators, // such as front_insert_iterator and istream_iterator.#pragma GCC system_headernamespace std{struct input_iterator_tag {};struct output_iterator_tag {};struct forward_iterator_tag : public input_iterator_tag {};struct bidirectional_iterator_tag : public forward_iterator_tag {};struct random_access_iterator_tag : public bidirectional_iterator_tag {};// The base classes input_iterator, output_iterator, forward_iterator,// bidirectional_iterator, and random_access_iterator are not part of// the C++ standard. (They have been replaced by struct iterator.)// They are included for backward compatibility with the HP STL.template <class _Tp, class _Distance> struct input_iterator { typedef input_iterator_tag iterator_category; typedef _Tp value_type; typedef _Distance difference_type; typedef _Tp* pointer; typedef _Tp& reference;};struct output_iterator { typedef output_iterator_tag iterator_category; typedef void value_type; typedef void difference_type; typedef void pointer; typedef void reference;};template <class _Tp, class _Distance> struct forward_iterator { typedef forward_iterator_tag iterator_category; typedef _Tp value_type; typedef _Distance difference_type; typedef _Tp* pointer; typedef _Tp& reference;};template <class _Tp, class _Distance> struct bidirectional_iterator { typedef bidirectional_iterator_tag iterator_category; typedef _Tp value_type; typedef _Distance difference_type; typedef _Tp* pointer; typedef _Tp& reference;};template <class _Tp, class _Distance> struct random_access_iterator { typedef random_access_iterator_tag iterator_category; typedef _Tp value_type; typedef _Distance difference_type; typedef _Tp* pointer; typedef _Tp& reference;};template <class _Category, class _Tp, class _Distance = ptrdiff_t, class _Pointer = _Tp*, class _Reference = _Tp&>struct iterator { typedef _Category iterator_category; typedef _Tp value_type; typedef _Distance difference_type; typedef _Pointer pointer; typedef _Reference reference;};template <class _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 <class _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 <class _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;};// The overloaded functions iterator_category, distance_type, and// value_type are not part of the C++ standard. (They have been// replaced by struct iterator_traits.) They are included for// backward compatibility with the HP STL.// We introduce internal names for these functions.template <class _Iter>inline typename iterator_traits<_Iter>::iterator_category__iterator_category(const _Iter&){ typedef typename iterator_traits<_Iter>::iterator_category _Category; return _Category();}template <class _Iter>inline typename iterator_traits<_Iter>::difference_type*__distance_type(const _Iter&){ return static_cast<typename iterator_traits<_Iter>::difference_type*>(0);}template <class _Iter>inline typename iterator_traits<_Iter>::value_type*__value_type(const _Iter&){ return static_cast<typename iterator_traits<_Iter>::value_type*>(0);}template <class _Iter>inline typename iterator_traits<_Iter>::iterator_categoryiterator_category(const _Iter& __i) { return __iterator_category(__i); }template <class _Iter>inline typename iterator_traits<_Iter>::difference_type*distance_type(const _Iter& __i) { return __distance_type(__i); }template <class _Iter>inline typename iterator_traits<_Iter>::value_type*value_type(const _Iter& __i) { return __value_type(__i); }} // namespace std#endif /* __SGI_STL_INTERNAL_ITERATOR_BASE_TYPES_H */// Local Variables:// mode:C++// End:
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?