mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 13:10:19 -04:00 
			
		
		
		
	
		
			
	
	
		
			74 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			74 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|  | // Copyright David Abrahams 2004. Use, modification and distribution is
 | ||
|  | // subject to the Boost Software License, Version 1.0. (See accompanying
 | ||
|  | // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 | ||
|  | #ifndef NODE_ITERATOR2_DWA2004110_HPP
 | ||
|  | # define NODE_ITERATOR2_DWA2004110_HPP
 | ||
|  | 
 | ||
|  | # include "node.hpp"
 | ||
|  | # include <boost/iterator/iterator_facade.hpp>
 | ||
|  | 
 | ||
|  | # ifndef BOOST_NO_SFINAE
 | ||
|  | #  include <boost/type_traits/is_convertible.hpp>
 | ||
|  | #  include <boost/utility/enable_if.hpp>
 | ||
|  | # endif
 | ||
|  | 
 | ||
|  | template <class Value> | ||
|  | class node_iter | ||
|  |   : public boost::iterator_facade< | ||
|  |         node_iter<Value> | ||
|  |       , Value | ||
|  |       , boost::forward_traversal_tag | ||
|  |     > | ||
|  | { | ||
|  |  private: | ||
|  |     struct enabler {};  // a private type avoids misuse
 | ||
|  | 
 | ||
|  |  public: | ||
|  |     node_iter() | ||
|  |       : m_node(0) {} | ||
|  | 
 | ||
|  |     explicit node_iter(Value* p) | ||
|  |       : m_node(p) {} | ||
|  | 
 | ||
|  |     template <class OtherValue> | ||
|  |     node_iter( | ||
|  |         node_iter<OtherValue> const& other | ||
|  | # ifndef BOOST_NO_SFINAE
 | ||
|  |       , typename boost::enable_if< | ||
|  |             boost::is_convertible<OtherValue*,Value*> | ||
|  |           , enabler | ||
|  |         >::type = enabler() | ||
|  | # endif 
 | ||
|  |     ) | ||
|  |       : m_node(other.m_node) {} | ||
|  | 
 | ||
|  | 
 | ||
|  | # if !BOOST_WORKAROUND(__GNUC__, == 2)
 | ||
|  |  private: // GCC2 can't grant friendship to template member functions    
 | ||
|  |     friend class boost::iterator_core_access; | ||
|  | # endif 
 | ||
|  | 
 | ||
|  |     template <class OtherValue> | ||
|  |     bool equal(node_iter<OtherValue> const& other) const | ||
|  |     { | ||
|  |         return this->m_node == other.m_node; | ||
|  |     } | ||
|  | 
 | ||
|  |     void increment() { m_node = m_node->next(); } | ||
|  | 
 | ||
|  |     Value& dereference() const { return *m_node; } | ||
|  | 
 | ||
|  | # ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
 | ||
|  |  public: | ||
|  | # else
 | ||
|  |  private: | ||
|  |     template <class> friend class node_iter; | ||
|  | # endif 
 | ||
|  |     Value* m_node; | ||
|  | }; | ||
|  | 
 | ||
|  | typedef node_iter<node_base> node_iterator; | ||
|  | typedef node_iter<node_base const> node_const_iterator; | ||
|  | 
 | ||
|  | #endif // NODE_ITERATOR2_DWA2004110_HPP
 |