1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- // Copyright (c) 2001, Daniel C. Nuffer
- // Copyright (c) 2001-2011 Hartmut Kaiser
- //
- // Distributed under 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)
- #if !defined(BOOST_SPIRIT_ITERATOR_FIRST_OWNER_POLICY_MAR_16_2007_1108AM)
- #define BOOST_SPIRIT_ITERATOR_FIRST_OWNER_POLICY_MAR_16_2007_1108AM
- #include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
- #include <boost/spirit/home/support/iterators/detail/multi_pass.hpp>
- namespace boost { namespace spirit { namespace iterator_policies
- {
- ///////////////////////////////////////////////////////////////////////////
- // class first_owner
- // Implementation of an OwnershipPolicy used by multi_pass
- // This ownership policy dictates that the first iterator created will
- // determine the lifespan of the shared components. This works well for
- // spirit, since no dynamic allocation of iterators is done, and all
- // copies are make on the stack.
- //
- // There is a caveat about using this policy together with the std_deque
- // StoragePolicy. Since first_owner always returns false from unique(),
- // std_deque will only release the queued data if clear_queue() is called.
- ///////////////////////////////////////////////////////////////////////////
- struct first_owner
- {
- ///////////////////////////////////////////////////////////////////////
- struct unique : detail::default_ownership_policy
- {
- unique() : first(true) {}
- unique(unique const&) : first(false) {}
- // return true to indicate deletion of resources
- template <typename MultiPass>
- static bool release(MultiPass& mp)
- {
- return mp.first;
- }
- // use swap from default policy
- // if we're the first, we still remain the first, even if assigned
- // to, so don't swap first. swap is only called from operator=
- template <typename MultiPass>
- static bool is_unique(MultiPass const&)
- {
- return false; // no way to know, so always return false
- }
- protected:
- bool first;
- };
- ////////////////////////////////////////////////////////////////////////
- struct shared {}; // no shared data
- };
- }}}
- #endif
|