19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1994 49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Hewlett-Packard Company 59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1996-1998 79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Silicon Graphics Computer Systems, Inc. 89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1997 109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Moscow Center for SPARC Technology 119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999 139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev 149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed 169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk. 179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted 199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies. 209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted, 219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was 229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice. 239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* NOTE: This is an internal header file, included by other STL headers. 279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * You should not attempt to use it directly. 289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_ITERATOR_BASE_H 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_INTERNAL_ITERATOR_BASE_H 329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_CSTDDEF 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_cstddef.h> 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//# if defined (_STLP_IMPORT_VENDOR_CSTD) && ! defined (_STLP_VENDOR_GLOBAL_CSTD) 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//_STLP_BEGIN_NAMESPACE 399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//using namespace _STLP_VENDOR_CSTD; 409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//_STLP_END_NAMESPACE 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//#endif /* _STLP_IMPORT_VENDOR_CSTD */ 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined(_STLP_USE_OLD_HP_ITERATOR_QUERIES) && !defined(_STLP_CLASS_PARTIAL_SPECIALIZATION) 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# ifndef _STLP_TYPE_TRAITS_H 459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/type_traits.h> 469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct input_iterator_tag {}; 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct output_iterator_tag {}; 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct forward_iterator_tag : public input_iterator_tag {}; 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct bidirectional_iterator_tag : public forward_iterator_tag {}; 559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct random_access_iterator_tag : public bidirectional_iterator_tag {}; 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Category, class _Tp, _STLP_DFL_TMPL_PARAM(_Distance,ptrdiff_t), 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DFL_TMPL_PARAM(_Pointer,_Tp*), _STLP_DFL_TMPL_PARAM(_Reference,_Tp&) > 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct iterator { 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Category iterator_category; 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Tp value_type; 629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Distance difference_type; 639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Pointer pointer; 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Reference reference; 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL 679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct iterator<output_iterator_tag, void, void, void, void> { 689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef output_iterator_tag iterator_category; 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifdef _STLP_CLASS_PARTIAL_SPECIALIZATION 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef void value_type; 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef void difference_type; 729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef void pointer; 739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef void reference; 749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_OLD_HP_ITERATOR_QUERIES) 78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_ITERATOR_CATEGORY(_It, _Tp) _STLP_STD::iterator_category(_It) 79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_DISTANCE_TYPE(_It, _Tp) _STLP_STD::distance_type(_It) 80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_VALUE_TYPE(_It, _Tp) _STLP_STD::value_type(_It) 819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//Old HP iterator queries do not give information about the iterator 829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//associated reference type so we consider that it is not a real reference. 839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_IS_REF_TYPE_REAL_REF(_It, _Tp) __false_type() 849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_VALUE_TYPE(_It, _Tp) (_STLP_TYPENAME _STLP_STD::iterator_traits< _Tp >::value_type*)0 87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_DISTANCE_TYPE(_It, _Tp) (_STLP_TYPENAME _STLP_STD::iterator_traits< _Tp >::difference_type*)0 88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (__BORLANDC__) || defined (__SUNPRO_CC) || ( defined (__MWERKS__) && (__MWERKS__ <= 0x2303)) || \ 89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott (defined (__sgi) && defined (_COMPILER_VERSION)) || defined (__DMC__) 90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_ITERATOR_CATEGORY(_It, _Tp) _STLP_STD::iterator_traits< _Tp >::iterator_category() 919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# else 92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_ITERATOR_CATEGORY(_It, _Tp) _STLP_TYPENAME _STLP_STD::iterator_traits< _Tp >::iterator_category() 939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_IS_REF_TYPE_REAL_REF(_It, _Tp) _STLP_STD::_IsRefType< _STLP_TYPENAME _STLP_STD::iterator_traits< _Tp >::reference >::_Ret() 959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# else 96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_ITERATOR_CATEGORY(_It, _Tp) _STLP_STD::__iterator_category(_It, _STLP_STD::_IsPtrType<_Tp>::_Ret()) 97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_DISTANCE_TYPE(_It, _Tp) _STLP_STD::__distance_type(_It, _STLP_STD::_IsPtrType<_Tp>::_Ret()) 98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_VALUE_TYPE(_It, _Tp) _STLP_STD::__value_type(_It, _STLP_STD::_IsPtrType<_Tp>::_Ret()) 999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_IS_REF_TYPE_REAL_REF(_It, _Tp) __false_type() 1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_DONT_REDEFINE_STD) && defined (_STLP_WHOLE_NATIVE_STD) 104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* In this mode we will see both STLport implementation and native 105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * one. To allow some interaction between both implementations through 106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * iterators we have to map std iterator categories to stlport ones. This 107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * way we will be able to initialize STLport containers with native 108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * iterators, the other side won't work except when STLport iterators are 109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * simple pointers. */ 110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_END_NAMESPACE 112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_HAS_INCLUDE_NEXT) 114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include_next <iterator> 115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include _STLP_NATIVE_HEADER(iterator) 117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_BEGIN_NAMESPACE 120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _IteCat> 122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _CategoryMapping 123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ typedef _IteCat _Tag; }; 124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_TEMPLATE_NULL 126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _CategoryMapping<::std::input_iterator_tag> 127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ typedef input_iterator_tag _Tag; }; 128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_TEMPLATE_NULL 129e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _CategoryMapping<::std::output_iterator_tag> 130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ typedef output_iterator_tag _Tag; }; 131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_TEMPLATE_NULL 132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _CategoryMapping<::std::forward_iterator_tag> 133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ typedef forward_iterator_tag _Tag; }; 134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_TEMPLATE_NULL 135e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _CategoryMapping<::std::bidirectional_iterator_tag> 136e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ typedef bidirectional_iterator_tag _Tag; }; 137e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_TEMPLATE_NULL 138e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _CategoryMapping<::std::random_access_iterator_tag> 139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ typedef random_access_iterator_tag _Tag; }; 140e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 141e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Iterator> 142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct iterator_traits { 143e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename _Iterator::iterator_category _OriginalTag; 144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename _CategoryMapping<_OriginalTag>::_Tag iterator_category; 145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else 1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct iterator_traits { 1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Iterator::iterator_category iterator_category; 149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Iterator::value_type value_type; 1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Iterator::difference_type difference_type; 1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Iterator::pointer pointer; 1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Iterator::reference reference; 1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 156e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) && !defined (__SUNPRO_CC) 1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_DIFFERENCE_TYPE(_Iterator) typename iterator_traits<_Iterator>::difference_type 1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_DIFFERENCE_TYPE(_Iterator) ptrdiff_t 1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifdef _STLP_CLASS_PARTIAL_SPECIALIZATION 1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// fbp : this order keeps gcc happy 1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct iterator_traits<const _Tp*> { 1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef random_access_iterator_tag iterator_category; 1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Tp value_type; 1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef ptrdiff_t difference_type; 1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef const _Tp* pointer; 1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef const _Tp& reference; 1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct iterator_traits<_Tp*> { 1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef random_access_iterator_tag iterator_category; 1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Tp value_type; 1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef ptrdiff_t difference_type; 1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Tp* pointer; 1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Tp& reference; 1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined (__BORLANDC__) 1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct iterator_traits<_Tp* const> { 1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef random_access_iterator_tag iterator_category; 1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Tp value_type; 1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef ptrdiff_t difference_type; 1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef const _Tp* pointer; 1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef const _Tp& reference; 1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_CLASS_PARTIAL_SPECIALIZATION */ 1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 196e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_END_NAMESPACE 197e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <stl/_ptrs_specialize.h> 198e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_BEGIN_NAMESPACE 1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_USE_OLD_HP_ITERATOR_QUERIES 2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// The overloaded functions iterator_category, distance_type, and 2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// value_type are not part of the C++ standard. (They have been 2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// replaced by struct iterator_traits.) They are included for 2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// backward compatibility with the HP STL. 2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// We introduce internal names for these functions. 2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 207e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# ifndef _STLP_CLASS_PARTIAL_SPECIALIZATION 2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 209e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Tp> 210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline _STLP_STD::random_access_iterator_tag 211e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__iterator_category(const _Tp*, const __true_type&) 212e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _STLP_STD::random_access_iterator_tag(); } 2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iter> 215e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline _STLP_TYPENAME_ON_RETURN_TYPE _STLP_STD::iterator_traits<_Iter>::iterator_category 2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__iterator_category(const _Iter&, const __false_type&) { 217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _STLP_TYPENAME _STLP_STD::iterator_traits<_Iter>::iterator_category _Category; 2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _Category(); 2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 221e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Tp> 222e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline ptrdiff_t* 223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__distance_type(const _Tp*, const __true_type&) 224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return __STATIC_CAST(ptrdiff_t*, 0); } 2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iter> 227e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline _STLP_TYPENAME_ON_RETURN_TYPE _STLP_STD::iterator_traits<_Iter>::difference_type* 228e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__distance_type(const _Iter&, const __false_type&) { 229e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _STLP_TYPENAME _STLP_STD::iterator_traits<_Iter>::difference_type _diff_type; 230e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return __STATIC_CAST(_diff_type*,0); 2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Tp* 235e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__value_type(const _Tp*, const __true_type&) 236e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return __STATIC_CAST(_Tp*, 0); } 237e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 238e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Iter> 239e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline _STLP_TYPENAME_ON_RETURN_TYPE _STLP_STD::iterator_traits<_Iter>::value_type* 240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__value_type(const _Iter&, const __false_type&) { 241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _STLP_TYPENAME _STLP_STD::iterator_traits<_Iter>::value_type _value_type; 242e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return __STATIC_CAST(_value_type*,0); 2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 245e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else /* _STLP_USE_OLD_HP_ITERATOR_QUERIES */ 2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Category, class _Tp, class _Distance, class _Pointer, class _Reference> 2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Category _STLP_CALL iterator_category(const iterator<_Category,_Tp,_Distance,_Pointer,_Reference>&) { return _Category(); } 2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Category, class _Tp, class _Distance, class _Pointer, class _Reference> 2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Tp* _STLP_CALL value_type(const iterator<_Category,_Tp,_Distance,_Pointer,_Reference>&) { return __STATIC_CAST(_Tp*, 0); } 2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Category, class _Tp, class _Distance, class _Pointer, class _Reference> 2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Distance* _STLP_CALL distance_type(const iterator<_Category,_Tp,_Distance,_Pointer,_Reference>&) { return __STATIC_CAST(_Distance*, 0); } 2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline random_access_iterator_tag _STLP_CALL iterator_category(const _Tp*) { return random_access_iterator_tag(); } 2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Tp* _STLP_CALL value_type(const _Tp*) { return __STATIC_CAST(_Tp*, 0); } 2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline ptrdiff_t* _STLP_CALL distance_type(const _Tp*) { return __STATIC_CAST(ptrdiff_t*, 0); } 2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_USE_OLD_HP_ITERATOR_QUERIES */ 2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 262e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_ANACHRONISMS) 2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// The base classes input_iterator, output_iterator, forward_iterator, 2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// bidirectional_iterator, and random_access_iterator are not part of 2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// the C++ standard. (They have been replaced by struct iterator.) 2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// They are included for backward compatibility with the HP STL. 2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Distance> struct input_iterator : 2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block public iterator <input_iterator_tag, _Tp, _Distance, _Tp*, _Tp&> {}; 2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct output_iterator : public iterator <output_iterator_tag, void, void, void, void> {}; 2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Distance> struct forward_iterator : 2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block public iterator<forward_iterator_tag, _Tp, _Distance, _Tp*, _Tp&> {}; 2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Distance> struct bidirectional_iterator : 2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block public iterator<bidirectional_iterator_tag, _Tp, _Distance, _Tp*, _Tp&> {}; 2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Distance> struct random_access_iterator : 2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block public iterator<random_access_iterator_tag, _Tp, _Distance, _Tp*, _Tp&> {}; 2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 277e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_BASE_MATCH_BUG) && defined (_STLP_USE_OLD_HP_ITERATOR_QUERIES) 2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Distance> 2799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline input_iterator_tag _STLP_CALL 2809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockiterator_category(const input_iterator<_Tp, _Distance>&) { return input_iterator_tag(); } 2819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline output_iterator_tag _STLP_CALL 2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockiterator_category(const output_iterator&) { return output_iterator_tag(); } 2839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Distance> 2849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline forward_iterator_tag _STLP_CALL 2859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockiterator_category(const forward_iterator<_Tp, _Distance>&) { return forward_iterator_tag(); } 2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Distance> 2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bidirectional_iterator_tag _STLP_CALL 2889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockiterator_category(const bidirectional_iterator<_Tp, _Distance>&) { return bidirectional_iterator_tag(); } 2899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Distance> 2909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline random_access_iterator_tag _STLP_CALL 2919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockiterator_category(const random_access_iterator<_Tp, _Distance>&) { return random_access_iterator_tag(); } 2929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Distance> 2939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Tp* _STLP_CALL value_type(const input_iterator<_Tp, _Distance>&) { return __STATIC_CAST(_Tp*, 0); } 2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Distance> 2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Tp* _STLP_CALL value_type(const forward_iterator<_Tp, _Distance>&) { return __STATIC_CAST(_Tp*, 0); } 2969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Distance> 2979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Tp* _STLP_CALL value_type(const bidirectional_iterator<_Tp, _Distance>&) { return __STATIC_CAST(_Tp*, 0); } 2989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Distance> 2999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Tp* _STLP_CALL value_type(const random_access_iterator<_Tp, _Distance>&) { return __STATIC_CAST(_Tp*, 0); } 3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Distance> 3019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Distance* _STLP_CALL distance_type(const input_iterator<_Tp, _Distance>&) { return __STATIC_CAST(_Distance*, 0); } 3029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Distance> 3039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Distance* _STLP_CALL distance_type(const forward_iterator<_Tp, _Distance>&) { return __STATIC_CAST(_Distance*, 0); } 3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Distance> 3059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Distance* _STLP_CALL distance_type(const bidirectional_iterator<_Tp, _Distance>&) { return __STATIC_CAST(_Distance*, 0);} 3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Distance> 3079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Distance* _STLP_CALL distance_type(const random_access_iterator<_Tp, _Distance>&) { return __STATIC_CAST(_Distance*, 0); } 308e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 3099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 3109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 311e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_PRIV_NAMESPACE 312e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 3139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIterator> 3149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _STLP_DIFFERENCE_TYPE(_InputIterator) _STLP_CALL 315e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__distance(const _InputIterator& __first, const _InputIterator& __last, 316e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const input_iterator_tag &) { 3179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DIFFERENCE_TYPE(_InputIterator) __n = 0; 3189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _InputIterator __it(__first); 3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block while (__it != __last) { 3209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__it; ++__n; 3219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __n; 3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 325e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_NONTEMPL_BASE_MATCH_BUG) 3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIterator> 3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _STLP_DIFFERENCE_TYPE(_ForwardIterator) _STLP_CALL 3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__distance(const _ForwardIterator& __first, const _ForwardIterator& __last, 329e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const forward_iterator_tag &) { 3309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DIFFERENCE_TYPE(_ForwardIterator) __n = 0; 3319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _ForwardIterator __it(__first); 3329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block while (__it != __last) { 3339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__it; ++__n; 3349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __n; 3369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _BidirectionalIterator> 3399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_INLINE_LOOP _STLP_DIFFERENCE_TYPE(_BidirectionalIterator) _STLP_CALL 340e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__distance(const _BidirectionalIterator& __first, const _BidirectionalIterator& __last, 3419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const bidirectional_iterator_tag &) { 3429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DIFFERENCE_TYPE(_BidirectionalIterator) __n = 0; 3439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BidirectionalIterator __it(__first); 3449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block while (__it != __last) { 3459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__it; ++__n; 3469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __n; 3489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 349e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 3509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _RandomAccessIterator> 3529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _STLP_DIFFERENCE_TYPE(_RandomAccessIterator) _STLP_CALL 3539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__distance(const _RandomAccessIterator& __first, const _RandomAccessIterator& __last, 354e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const random_access_iterator_tag &) 355e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return __last - __first; } 356e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 357e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_STD_NAMESPACE 3589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIterator> 3609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _STLP_DIFFERENCE_TYPE(_InputIterator) _STLP_CALL 361e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottdistance(_InputIterator __first, _InputIterator __last) 362e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _STLP_PRIV __distance(__first, __last, _STLP_ITERATOR_CATEGORY(__first, _InputIterator)); } 363e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 364e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_ANACHRONISMS) 365e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _InputIterator, class _Distance> 366e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline void _STLP_CALL distance(const _InputIterator& __first, 367e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const _InputIterator& __last, _Distance& __n) 368e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ __n += _STLP_STD::distance(__first, __last); } 369e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 370e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_MSVC) 371e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// MSVC specific 372e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _InputIterator, class _Dist> 373e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline void _STLP_CALL _Distance(_InputIterator __first, 374e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _InputIterator __last, _Dist& __n) 375e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ __n += _STLP_STD::distance(__first, __last); } 376e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 377e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 3789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// fbp: those are being used for iterator/const_iterator definitions everywhere 3809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 3819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Nonconst_traits; 3829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 3849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Const_traits { 3859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Tp value_type; 3869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef const _Tp& reference; 3879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef const _Tp* pointer; 3889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Const_traits<_Tp> _ConstTraits; 3899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Nonconst_traits<_Tp> _NonConstTraits; 3909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 3919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 3939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Nonconst_traits { 3949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Tp value_type; 3959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Tp& reference; 3969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Tp* pointer; 3979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Const_traits<_Tp> _ConstTraits; 3989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Nonconst_traits<_Tp> _NonConstTraits; 3999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 4009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 4029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * dums: A special iterator/const_iterator traits for set and multiset for which even 4039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * the iterator is not mutable 4049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 4059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 4069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Nonconst_Const_traits; 4079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 4099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Const_Const_traits { 4109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Tp value_type; 4119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef const _Tp& reference; 4129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef const _Tp* pointer; 4139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Const_Const_traits<_Tp> _ConstTraits; 4149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Nonconst_Const_traits<_Tp> _NonConstTraits; 4159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 4169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 4189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Nonconst_Const_traits { 4199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Tp value_type; 4209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef const _Tp& reference; 4219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef const _Tp* pointer; 4229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Const_Const_traits<_Tp> _ConstTraits; 4239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Nonconst_Const_traits<_Tp> _NonConstTraits; 4249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 4259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 4279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * A macro to generate a new iterator traits from one of the 4289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * previous one. Changing the iterator traits type make iterators 4299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * from different containers not comparable. 4309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 4319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CREATE_ITERATOR_TRAITS_BASE(Motif, Traits) \ 4329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> \ 4339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _##Motif; \ 4349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> \ 4359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Const##Motif : public _STLP_STD::_Const_##Traits<_Tp> { \ 4369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Const##Motif<_Tp> _ConstTraits; \ 4379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _##Motif<_Tp> _NonConstTraits; \ 4389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; \ 4399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> \ 4409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _##Motif : public _STLP_STD::_Nonconst_##Traits<_Tp> { \ 4419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Const##Motif<_Tp> _ConstTraits; \ 4429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _##Motif<_Tp> _NonConstTraits; \ 4439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 4449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CREATE_ITERATOR_TRAITS(Motif, Traits) \ 4469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE \ 4479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_CREATE_ITERATOR_TRAITS_BASE(Motif, Traits) \ 4489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 4499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CREATE_HASH_ITERATOR_TRAITS(Motif, Traits) \ 4519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE \ 4529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_CREATE_ITERATOR_TRAITS_BASE(NonLocal##Motif, Traits) \ 4539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_CREATE_ITERATOR_TRAITS_BASE(Local##Motif, Traits) \ 4549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> \ 4559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _##Motif { \ 4569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _ConstNonLocal##Motif<_Tp> _ConstTraits; \ 4579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _NonLocal##Motif<_Tp> _NonConstTraits; \ 4589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _ConstLocal##Motif<_Tp> _ConstLocalTraits; \ 4599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Local##Motif<_Tp> _NonConstLocalTraits; \ 4609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; \ 4619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 4629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 4649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined (_STLP_BASE_TYPEDEF_BUG) 4659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// this workaround is needed for SunPro 4.0.1 4669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Traits> 4679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct __cnst_traits_aux : private _Traits { 4689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Traits::value_type value_type; 4699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 4709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define __TRAITS_VALUE_TYPE(_Traits) __cnst_traits_aux<_Traits>::value_type 4719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# else 4729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define __TRAITS_VALUE_TYPE(_Traits) _Traits::value_type 4739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 4749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block*/ 4759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 476e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_PRIV_NAMESPACE 4779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _Distance> 479e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_INLINE_LOOP void _STLP_CALL 480e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__advance(_InputIter& __i, _Distance __n, const input_iterator_tag &) 481e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ while (__n--) ++__i; } 4829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// fbp : added output iterator tag variant 4849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _Distance> 485e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_INLINE_LOOP void _STLP_CALL 486e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__advance(_InputIter& __i, _Distance __n, const output_iterator_tag &) 487e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ while (__n--) ++__i; } 4889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_NONTEMPL_BASE_MATCH_BUG) 4909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIterator, class _Distance> 4919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_INLINE_LOOP void _STLP_CALL 492e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__advance(_ForwardIterator& i, _Distance n, const forward_iterator_tag &) 493e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ while (n--) ++i; } 4949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 4959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _BidirectionalIterator, class _Distance> 4979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_INLINE_LOOP void _STLP_CALL 4989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__advance(_BidirectionalIterator& __i, _Distance __n, 4999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const bidirectional_iterator_tag &) { 5009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__n > 0) 5019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block while (__n--) ++__i; 5029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else 5039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block while (__n++) --__i; 5049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 5059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _RandomAccessIterator, class _Distance> 5079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void _STLP_CALL 5089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__advance(_RandomAccessIterator& __i, _Distance __n, 509e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const random_access_iterator_tag &) 510e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ __i += __n; } 511e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 512e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_STD_NAMESPACE 5139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIterator, class _Distance> 515e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline void _STLP_CALL advance(_InputIterator& __i, _Distance __n) 516e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ _STLP_PRIV __advance(__i, __n, _STLP_ITERATOR_CATEGORY(__i, _InputIterator)); } 5179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 5199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_INTERNAL_ITERATOR_BASE_H */ 5219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables: 5249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++ 5259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End: 526