| // last_value function object (documented as part of Boost.Signals) |
| |
| // Copyright Douglas 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) |
| |
| // For more information, see http://www.boost.org/libs/signals |
| |
| #ifndef BOOST_LAST_VALUE_HPP |
| #define BOOST_LAST_VALUE_HPP |
| |
| #include <cassert> |
| #include <boost/config.hpp> |
| |
| namespace boost { |
| template<typename T> |
| struct last_value { |
| typedef T result_type; |
| |
| template<typename InputIterator> |
| T operator()(InputIterator first, InputIterator last) const |
| { |
| assert(first != last); |
| T value = *first++; |
| while (first != last) |
| value = *first++; |
| return value; |
| } |
| }; |
| |
| template<> |
| struct last_value<void> { |
| #ifdef BOOST_NO_VOID_RETURNS |
| struct unusable {}; |
| |
| public: |
| typedef unusable result_type; |
| #else |
| public: |
| typedef void result_type; |
| #endif // BOOST_NO_VOID_RETURNS |
| |
| template<typename InputIterator> |
| result_type |
| operator()(InputIterator first, InputIterator last) const |
| { |
| while (first != last) |
| *first++; |
| return result_type(); |
| } |
| }; |
| } |
| #endif // BOOST_SIGNALS_LAST_VALUE_HPP |