LCOV - code coverage report
Current view: top level - usr/include/boost/spirit/home/support/iterators/detail - ref_counted_policy.hpp (source / functions) Hit Total Coverage
Test: ROSE Lines: 0 8 0.0 %
Date: 2022-12-08 13:48:47 Functions: 0 0 -
Legend: Lines: hit not hit

          Line data    Source code
       1             : //  Copyright (c) 2001 Daniel C. Nuffer
       2             : //  Copyright (c) 2001-2011 Hartmut Kaiser
       3             : // 
       4             : //  Distributed under the Boost Software License, Version 1.0. (See accompanying
       5             : //  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       6             : 
       7             : #if !defined(BOOST_SPIRIT_ITERATOR_REF_COUNTED_POLICY_MAR_16_2007_1108AM)
       8             : #define BOOST_SPIRIT_ITERATOR_REF_COUNTED_POLICY_MAR_16_2007_1108AM
       9             : 
      10             : #include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
      11             : #include <boost/spirit/home/support/iterators/detail/multi_pass.hpp>
      12             : #if defined(BOOST_HAS_THREADS)
      13             : #include <boost/detail/atomic_count.hpp>
      14             : #endif
      15             : #include <cstdlib>
      16             : 
      17             : namespace boost { namespace spirit { namespace iterator_policies
      18             : {
      19             :     ///////////////////////////////////////////////////////////////////////////
      20             :     //  class ref_counted
      21             :     //  Implementation of an OwnershipPolicy used by multi_pass.
      22             :     //
      23             :     //  Implementation modified from RefCounted class from the Loki library by
      24             :     //  Andrei Alexandrescu.
      25             :     ///////////////////////////////////////////////////////////////////////////
      26             :     struct ref_counted
      27             :     {
      28             :         ///////////////////////////////////////////////////////////////////////
      29             :         struct unique // : detail::default_ownership_policy
      30             :         {
      31             :             void swap(unique&) {}
      32             : 
      33             :             // clone is called when a copy of the iterator is made, so 
      34             :             // increment the ref-count.
      35             :             template <typename MultiPass>
      36           0 :             static void clone(MultiPass& mp)
      37             :             {
      38           0 :                 if (0 != mp.shared())
      39           0 :                     ++mp.shared()->count;
      40             :             }
      41             : 
      42             :             // called when a copy is deleted. Decrement the ref-count. Return
      43             :             // value of true indicates that the last copy has been released.
      44             :             template <typename MultiPass>
      45           0 :             static bool release(MultiPass& mp)
      46             :             {
      47           0 :                 return 0 != mp.shared() && 0 == --mp.shared()->count;
      48             :             }
      49             : 
      50             :             // returns true if there is only one iterator in existence.
      51             :             // std_deque StoragePolicy will free it's buffered data if this
      52             :             // returns true.
      53             :             template <typename MultiPass>
      54           0 :             static bool is_unique(MultiPass const& mp) 
      55             :             {
      56           0 :                 return 0 == mp.shared() || 1 == mp.shared()->count;
      57             :             }
      58             : 
      59             :             template <typename MultiPass>
      60             :             static void destroy(MultiPass&) {}
      61             :         };
      62             : 
      63             :         ////////////////////////////////////////////////////////////////////////
      64             :         struct shared
      65             :         {
      66           0 :             shared() : count(1) {}
      67             : 
      68             : #if defined(BOOST_HAS_THREADS)
      69             :             boost::detail::atomic_count count;
      70             : #else
      71             :             std::size_t count;
      72             : #endif
      73             :         };
      74             : 
      75             :     };
      76             : 
      77             : }}}
      78             : 
      79             : #endif

Generated by: LCOV version 1.14