annotate DEPENDENCIES/generic/include/boost/signals2/optional_last_value.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 // optional_last_value function object (documented as part of Boost.Signals2)
Chris@16 2
Chris@16 3 // Copyright Frank Mori Hess 2007-2008.
Chris@16 4 // Copyright Douglas Gregor 2001-2003.
Chris@16 5 // Distributed under the Boost Software License, Version
Chris@16 6 // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 7 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 8
Chris@16 9 // See http://www.boost.org/libs/signals2 for library home page.
Chris@16 10
Chris@16 11 #ifndef BOOST_SIGNALS2_OPTIONAL_LAST_VALUE_HPP
Chris@16 12 #define BOOST_SIGNALS2_OPTIONAL_LAST_VALUE_HPP
Chris@16 13
Chris@16 14 #include <boost/optional.hpp>
Chris@16 15 #include <boost/signals2/expired_slot.hpp>
Chris@16 16
Chris@16 17 namespace boost {
Chris@16 18 namespace signals2 {
Chris@16 19
Chris@16 20 template<typename T>
Chris@16 21 class optional_last_value
Chris@16 22 {
Chris@16 23 public:
Chris@16 24 typedef optional<T> result_type;
Chris@16 25
Chris@16 26 template<typename InputIterator>
Chris@16 27 optional<T> operator()(InputIterator first, InputIterator last) const
Chris@16 28 {
Chris@16 29 optional<T> value;
Chris@16 30 while (first != last)
Chris@16 31 {
Chris@16 32 try
Chris@16 33 {
Chris@16 34 value = *first;
Chris@16 35 }
Chris@16 36 catch(const expired_slot &) {}
Chris@16 37 ++first;
Chris@16 38 }
Chris@16 39 return value;
Chris@16 40 }
Chris@16 41 };
Chris@16 42
Chris@16 43 template<>
Chris@16 44 class optional_last_value<void>
Chris@16 45 {
Chris@16 46 public:
Chris@16 47 typedef void result_type;
Chris@16 48 template<typename InputIterator>
Chris@16 49 result_type operator()(InputIterator first, InputIterator last) const
Chris@16 50 {
Chris@16 51 while (first != last)
Chris@16 52 {
Chris@16 53 try
Chris@16 54 {
Chris@16 55 *first;
Chris@16 56 }
Chris@16 57 catch(const expired_slot &) {}
Chris@16 58 ++first;
Chris@16 59 }
Chris@16 60 return;
Chris@16 61 }
Chris@16 62 };
Chris@16 63 } // namespace signals2
Chris@16 64 } // namespace boost
Chris@16 65 #endif // BOOST_SIGNALS2_OPTIONAL_LAST_VALUE_HPP