PageRenderTime 10ms CodeModel.GetById 2ms app.highlight 5ms RepoModel.GetById 1ms app.codeStats 0ms

/Src/Dependencies/Boost/boost/spirit/home/support/iterators/detail/first_owner_policy.hpp

http://hadesmem.googlecode.com/
C++ Header | 62 lines | 29 code | 10 blank | 23 comment | 0 complexity | 18e6d4741a01b0aeb18cf184886013ec MD5 | raw file
 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_FIRST_OWNER_POLICY_MAR_16_2007_1108AM)
 8#define BOOST_SPIRIT_ITERATOR_FIRST_OWNER_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
13namespace boost { namespace spirit { namespace iterator_policies
14{
15    ///////////////////////////////////////////////////////////////////////////
16    //  class first_owner
17    //  Implementation of an OwnershipPolicy used by multi_pass
18    //  This ownership policy dictates that the first iterator created will
19    //  determine the lifespan of the shared components.  This works well for
20    //  spirit, since no dynamic allocation of iterators is done, and all 
21    //  copies are make on the stack.
22    //
23    //  There is a caveat about using this policy together with the std_deque
24    //  StoragePolicy. Since first_owner always returns false from unique(),
25    //  std_deque will only release the queued data if clear_queue() is called.
26    ///////////////////////////////////////////////////////////////////////////
27    struct first_owner
28    {
29        ///////////////////////////////////////////////////////////////////////
30        struct unique : detail::default_ownership_policy
31        {
32            unique() : first(true) {}
33            unique(unique const&) : first(false) {}
34
35            // return true to indicate deletion of resources
36            template <typename MultiPass>
37            static bool release(MultiPass& mp)
38            {
39                return mp.first;
40            }
41
42            // use swap from default policy
43            // if we're the first, we still remain the first, even if assigned
44            // to, so don't swap first.  swap is only called from operator=
45
46            template <typename MultiPass>
47            static bool is_unique(MultiPass const&) 
48            {
49                return false; // no way to know, so always return false
50            }
51
52        protected:
53            bool first;
54        };
55
56        ////////////////////////////////////////////////////////////////////////
57        struct shared {};   // no shared data
58    };
59
60}}}
61
62#endif