*** /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 #include #include #include #include #include + #include #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 - 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 &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(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 > cache; }; } // end namespace detail } // end namespace BOOST_SIGNALS_NAMESPACE --- 83,89 ---- mutable Iterator iter; Iterator end; Function f; ! optional &cache; }; } // end namespace detail } // end namespace BOOST_SIGNALS_NAMESPACE