//  (C) Copyright John Maddock 2005.
//  Use, modification and distribution are 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 BOOST_TR1_FUNCTOR_IT_HPP_INCLUDED
#  define BOOST_TR1_FUNCTOR_IT_HPP_INCLUDED

# include <boost/iterator/iterator_facade.hpp>

namespace boost{ namespace tr1_details{

template <class Func, class R>
struct functor2iterator : boost::iterator_facade<functor2iterator<Func,R>, const R, std::input_iterator_tag>
{
   functor2iterator() : m_func(0){}
   functor2iterator(Func& f)
      : m_func(&f)
   {
      m_val = (*m_func)();
   }
   const R& dereference()const
   { return m_val; }
   void increment(){ m_val = (*m_func)(); }
   bool equal(const functor2iterator&)const
   { return false; }
private:
   Func* m_func;
   R m_val;
};

} }

#endif
