*** /usr/local/dailyLibraryBuild/src/vendor/incl/boost_1_32_0/boost/signals/detail/slot_call_iterator.hpp	Mon Nov 22 15:31:20 2004
--- /home/host/razeh/boost_1_32_0/boost/signals/detail/slot_call_iterator.hpp	Tue Dec  7 08:44:38 2004
***************
*** 1,6 ****
  // Boost.Signals library
  
! // Copyright Douglas Gregor 2001-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)
--- 1,6 ----
  // Boost.Signals library
  
! // Copyright Doug Gregor 2001-2003. 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)
***************
*** 10,20 ****
--- 10,22 ----
  #ifndef BOOST_SIGNALS_SLOT_CALL_ITERATOR
  #define BOOST_SIGNALS_SLOT_CALL_ITERATOR
  
+ #include <memory>
  #include <functional>
  #include <boost/iterator/iterator_facade.hpp>
  #include <boost/smart_ptr.hpp>
  #include <boost/signals/detail/config.hpp>
  #include <boost/signals/connection.hpp>
+ #include <boost/optional.hpp>
  
  #ifdef BOOST_HAS_ABI_HEADERS
  #  include BOOST_ABI_PREFIX
***************
*** 23,36 ****
  namespace boost {
    namespace BOOST_SIGNALS_NAMESPACE {
      namespace detail {
-       // A cached return value from a slot
-       template<typename T>
-       struct cached_return_value {
-         cached_return_value(const T& t) : value(t) {}
  
-         T value;
-       };
- 
        // Generates a slot call iterator. Essentially, this is an iterator that:
        //   - skips over disconnected slots in the underlying list
        //   - calls the connected slots when dereferenced
--- 25,31 ----
***************
*** 53,62 ****
          friend class iterator_core_access;
  
        public:
!         slot_call_iterator() {}
! 
!         slot_call_iterator(Iterator iter_in, Iterator end_in, Function f)
!           : iter(iter_in), end(end_in), f(f), cache()
          {
            iter = std::find_if(iter, end, std::not1(is_disconnected()));
          }
--- 48,56 ----
          friend class iterator_core_access;
  
        public:
!         slot_call_iterator(Iterator iter_in, Iterator end_in, Function f,
! 			   optional<result_type> &c)
!           : iter(iter_in), end(end_in), f(f), cache(c)
          {
            iter = std::find_if(iter, end, std::not1(is_disconnected()));
          }
***************
*** 64,80 ****
          typename inherited::reference
          dereference() const
          {
!           if (!cache.get()) {
!             cache.reset(new cached_return_value<result_type>(f(*iter)));
!           }
  
!           return cache->value;
          }
  
          void increment()
          {
            iter = std::find_if(++iter, end, std::not1(is_disconnected()));
!           cache.reset();
          }
  
          bool equal(const slot_call_iterator& other) const
--- 58,74 ----
          typename inherited::reference
          dereference() const
          {
! 	  if (!cache.is_initialized()) {
! 	    cache.reset(f(*iter));
! 	  }
  
!           return cache.get();
          }
  
          void increment()
          {
            iter = std::find_if(++iter, end, std::not1(is_disconnected()));
! 	  cache.reset();
          }
  
          bool equal(const slot_call_iterator& other) const
***************
*** 89,95 ****
          mutable Iterator iter;
          Iterator end;
          Function f;
!         mutable shared_ptr< cached_return_value<result_type> > cache;
        };
      } // end namespace detail
    } // end namespace BOOST_SIGNALS_NAMESPACE
--- 83,89 ----
          mutable Iterator iter;
          Iterator end;
          Function f;
!         optional<result_type> &cache;
        };
      } // end namespace detail
    } // end namespace BOOST_SIGNALS_NAMESPACE

