Mercurial > hg > vamp-build-and-test
annotate DEPENDENCIES/generic/include/boost/signals2/optional_last_value.hpp @ 133:4acb5d8d80b6 tip
Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author | Chris Cannam |
---|---|
date | Tue, 30 Jul 2019 12:25:44 +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 |