LCOV - code coverage report
Current view: top level - opt/homebrew/include/boost/signals2 - optional_last_value.hpp (source / functions) Hit Total Coverage
Test: test_dash_coverage.info Lines: 13 17 76.5 %
Date: 2026-06-25 07:23:51 Functions: 11 14 78.6 %

          Line data    Source code
       1             : // optional_last_value function object (documented as part of Boost.Signals2)
       2             : 
       3             : // Copyright Frank Mori Hess 2007-2008.
       4             : // Copyright Douglas Gregor 2001-2003.
       5             : // Distributed under the Boost Software License, Version
       6             : // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
       7             : // http://www.boost.org/LICENSE_1_0.txt)
       8             : 
       9             : // See http://www.boost.org/libs/signals2 for library home page.
      10             : 
      11             : #ifndef BOOST_SIGNALS2_OPTIONAL_LAST_VALUE_HPP
      12             : #define BOOST_SIGNALS2_OPTIONAL_LAST_VALUE_HPP
      13             : 
      14             : #include <boost/core/no_exceptions_support.hpp>
      15             : #include <boost/move/utility_core.hpp>
      16             : #include <boost/optional.hpp>
      17             : #include <boost/signals2/expired_slot.hpp>
      18             : 
      19             : namespace boost {
      20             :   namespace signals2 {
      21             : 
      22             :     template<typename T>
      23             :       class optional_last_value
      24             :     {
      25             :     public:
      26             :       typedef optional<T> result_type;
      27             : 
      28             :       template<typename InputIterator>
      29           4 :         optional<T> operator()(InputIterator first, InputIterator last) const
      30             :       {
      31           4 :         optional<T> value;
      32           8 :         while (first != last)
      33             :         {
      34             :           BOOST_TRY
      35             :           {
      36           4 :             value = boost::move_if_not_lvalue_reference<T>(*first);
      37           4 :           }
      38           0 :           BOOST_CATCH(const expired_slot &) {}
      39             :           BOOST_CATCH_END
      40           4 :           ++first;
      41             :         }
      42           4 :         return value;
      43           0 :       }
      44             :     };
      45             : 
      46             :     template<>
      47             :       class optional_last_value<void>
      48             :     {
      49             :     public:
      50             :       typedef void result_type;
      51             :       template<typename InputIterator>
      52       82328 :         result_type operator()(InputIterator first, InputIterator last) const
      53             :       {
      54       82559 :         while (first != last)
      55             :         {
      56             :           BOOST_TRY
      57             :           {
      58         231 :             *first;
      59         231 :           }
      60           0 :           BOOST_CATCH(const expired_slot &) {}
      61             :           BOOST_CATCH_END
      62         231 :           ++first;
      63             :         }
      64       82328 :         return;
      65           0 :       }
      66             :     };
      67             :   } // namespace signals2
      68             : } // namespace boost
      69             : #endif // BOOST_SIGNALS2_OPTIONAL_LAST_VALUE_HPP

Generated by: LCOV version 1.16