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

📄 iterator_base

📁 mpeg4 video codec mpeg4 video codec
💻
字号:
/*	Copyright (C) 2004 Garrett A. Kajmowicz	This file is part of the uClibc++ Library.	This library is free software; you can redistribute it and/or	modify it under the terms of the GNU Lesser General Public	License as published by the Free Software Foundation; either	version 2.1 of the License, 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	Lesser General Public License for more details.	You should have received a copy of the GNU Lesser General Public	License along with this library; if not, write to the Free Software	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/#include "basic_definitions"#ifndef __STD_HEADER_ITERATOR_BASE#define __STD_HEADER_ITERATOR_BASE 1namespace std{	template<class Iterator> struct iterator_traits;	template<class T> struct iterator_traits<T*>;	template<class Category, class T, class Distance = ptrdiff_t, class Pointer = T*, class Reference = T&> struct iterator;	struct _UCXXEXPORT input_iterator_tag {};	struct _UCXXEXPORT output_iterator_tag {};	struct _UCXXEXPORT forward_iterator_tag: public input_iterator_tag {};	struct _UCXXEXPORT bidirectional_iterator_tag: public forward_iterator_tag {};	struct _UCXXEXPORT random_access_iterator_tag: public bidirectional_iterator_tag {};	template <class InputIterator, class Distance> _UCXXEXPORT void advance(InputIterator& i, Distance n){		while(n > 0){			--n;			++i;		}	}	template <class InputIterator> _UCXXEXPORT typename iterator_traits<InputIterator>::difference_type 		distance(InputIterator first, InputIterator last)	{		typename iterator_traits<InputIterator>::difference_type d = 0;		while(first++ !=last){			d++;		}		return d;	}  // subclause _lib.predef.iterators_, predefined iterators:	template <class Iterator> class reverse_iterator;	template <class Iterator> bool operator==(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y);	template <class Iterator> bool operator<(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y);	template <class Iterator> bool operator!=(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y);	template <class Iterator> bool operator>(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y);	template <class Iterator> bool operator>=(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y);	template <class Iterator> bool operator<=(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y);	template <class Iterator> typename reverse_iterator<Iterator>::difference_type		operator-( const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y);	template <class Iterator> reverse_iterator<Iterator> 		operator+( typename reverse_iterator<Iterator>::difference_type n, const reverse_iterator<Iterator>& x);	template <class Container> class back_insert_iterator;	template <class Container> back_insert_iterator<Container> back_inserter(Container& x);	template <class Container> class front_insert_iterator;	template <class Container> front_insert_iterator<Container> front_inserter(Container& x);	template <class Container> class insert_iterator;	template <class Container, class Iterator>		insert_iterator<Container> inserter(Container& x, Iterator i);		//Actual Template definitions	template<class Iterator> struct _UCXXEXPORT iterator_traits {		typedef typename Iterator::difference_type difference_type;		typedef typename Iterator::value_type value_type;		typedef typename Iterator::pointer pointer;		typedef typename Iterator::reference reference;		typedef typename Iterator::iterator_category iterator_category;	};	//Pointer specialization - required by standard	template<class T> struct _UCXXEXPORT iterator_traits<T*> {		typedef ptrdiff_t difference_type;		typedef T value_type;		typedef T* pointer;		typedef T& reference;		typedef random_access_iterator_tag iterator_category;	};	//Specialization recomended by standard/*	template<class T> struct _UCXXEXPORT iterator_traits<T __far*> {		typedef long difference_type;		typedef T value_type;		typedef T __far* pointer;		typedef T __far& reference;		typedef random_access_iterator_tag iterator_category;	};*//*	template <class BidirectionalIterator> _UCXXEXPORT void		reverse(BidirectionalIterator first, BidirectionalIterator last)	{		typename iterator_traits<BidirectionalIterator>::difference_type n = distance(first, last);		--n;		while(n > 0){			typename iterator_traits<BidirectionalIterator>::value_type tmp = *first;			*first++ = * --last;			*last = tmp;			n -= 2;		}	};*/	template <class Category, class T, class Distance, class Pointer, class Reference> 		struct _UCXXEXPORT iterator	{		typedef T         value_type;		typedef Distance  difference_type;		typedef Pointer   pointer;		typedef Reference reference;		typedef Category  iterator_category;	};	template <class Iterator> class _UCXXEXPORT reverse_iterator		: public iterator<typename iterator_traits<Iterator>::iterator_category,		typename iterator_traits<Iterator>::value_type, typename iterator_traits<Iterator>::difference_type,		typename iterator_traits<Iterator>::pointer, typename iterator_traits<Iterator>::reference>	{	protected:		Iterator current;		friend bool operator== <Iterator>(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y);		friend bool operator< <Iterator>(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y);	public:		typedef Iterator iterator_type;		reverse_iterator() : current(){};		explicit reverse_iterator(Iterator x) : current(x) { }		template<class U> reverse_iterator(const reverse_iterator<U> &x) : current(x.base()){}		Iterator base() const { return current; }        // explicit		typename iterator_traits<Iterator>::reference operator*() const { Iterator tmp = current; return *--tmp; }		typename iterator_traits<Iterator>::pointer   operator->() const { return &(operator*()); }		typename iterator_traits<Iterator>::reference operator[](typename iterator_traits<Iterator>::difference_type n) const{			return current[-n-1];		}		reverse_iterator& operator++(){ --current; return *this;	}		reverse_iterator  operator++(int) {reverse_iterator tmp = *this; --current; return tmp; }		reverse_iterator& operator--() { ++ current; return *this; }		reverse_iterator  operator--(int) {reverse_iterator tmp = *this; ++current; return tmp; }		reverse_iterator  operator+ (typename iterator_traits<Iterator>::difference_type n) const{			reverse_iterator retval( *this );			retval+=n;			return retval;		}		reverse_iterator& operator+=(typename iterator_traits<Iterator>::difference_type n){			current -= n;			return *this;		}		reverse_iterator operator- (typename iterator_traits<Iterator>::difference_type n) const{			reverse_iterator retval( *this );			retval-=n;			return retval;		}		reverse_iterator& operator-=(typename iterator_traits<Iterator>::difference_type n){			current += n;			return *this;		}	 };	template <class Iterator> _UCXXEXPORT bool		operator==(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y)	{		return x.base() == y.base();	}	template <class Iterator> _UCXXEXPORT bool		operator<(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y)	{		return x.base() < y.base();	}	template <class Iterator> _UCXXEXPORT bool		operator!=(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y)	{		return x.base() != y.base();	}	template <class Iterator> _UCXXEXPORT bool		operator>(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y)	{		return x.base() > y.base();	}	template <class Iterator> _UCXXEXPORT bool		operator>=(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y)	{		return x.base() >= y.base();	}	template <class Iterator> _UCXXEXPORT bool		operator<=(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y)	{		return x.base() <= y.base();	}	template <class Iterator> _UCXXEXPORT typename reverse_iterator<Iterator>::difference_type		operator-( const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y)	{		return y.base() - x.base();	}	template <class Iterator> _UCXXEXPORT reverse_iterator<Iterator>		operator+(typename reverse_iterator<Iterator>::difference_type n, const reverse_iterator<Iterator>& x)	{		return reverse_iterator<Iterator> (x.base() - n);	}	template <class Container> class _UCXXEXPORT back_insert_iterator : 		public iterator<output_iterator_tag,void,void,void,void>	{	protected:		Container& container;	public:		typedef Container container_type;		explicit back_insert_iterator(Container& x):container(x) {};		back_insert_iterator<Container>& operator=(const typename Container::value_type& value){			container.push_back(value);			return *this;		}		back_insert_iterator<Container>& operator*(){			return *this;		}		back_insert_iterator<Container>& operator++(){			return *this;		}		back_insert_iterator<Container>  operator++(int){			return *this;		}	};	template <class Container> _UCXXEXPORT back_insert_iterator<Container>		back_inserter(Container& x)	{		return back_insert_iterator<Container>(x);	}	template <class Container> class _UCXXEXPORT front_insert_iterator		: public iterator<output_iterator_tag,void,void,void,void>	{	protected:		Container& container;	public:		typedef Container container_type;		explicit front_insert_iterator(Container& x): container(x) {}		front_insert_iterator<Container>& operator=(const typename Container::value_type& value){			container.push_front(value);			return *this;		}		front_insert_iterator<Container>& operator*() { return *this; }		front_insert_iterator<Container>& operator++() { return *this; }		front_insert_iterator<Container> operator++(int) { return *this; }	};	template <class Container> _UCXXEXPORT front_insert_iterator<Container>		front_inserter(Container& x)	{		return front_insert_iterator<Container>(x);	}	template <class Container> class _UCXXEXPORT insert_iterator		: public iterator<output_iterator_tag,void,void,void,void>	{	protected:		Container& container;		typename Container::iterator iter;	public:		typedef Container container_type;		insert_iterator(Container& x, typename Container::iterator i) : container(x), iter(i) {}		insert_iterator<Container>& operator=(const typename Container::value_type& value){			iter = container.insert(iter, value);			++iter;			return *this;		}		insert_iterator<Container>& operator*() { return *this; } 		insert_iterator<Container>& operator++() { return *this; }		insert_iterator<Container> operator++(int) { return *this; }	};	template <class Container, class Iterator> _UCXXEXPORT insert_iterator<Container>		inserter(Container& x, Iterator i)	{		return insert_iterator<Container>(x,typename Container::iterator(i));	}}#endif

⌨️ 快捷键说明

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