aboutsummaryrefslogtreecommitdiff
path: root/MoonParser/pegtl/internal/marker.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'MoonParser/pegtl/internal/marker.hpp')
-rw-r--r--MoonParser/pegtl/internal/marker.hpp93
1 files changed, 93 insertions, 0 deletions
diff --git a/MoonParser/pegtl/internal/marker.hpp b/MoonParser/pegtl/internal/marker.hpp
new file mode 100644
index 0000000..76cba0e
--- /dev/null
+++ b/MoonParser/pegtl/internal/marker.hpp
@@ -0,0 +1,93 @@
1// Copyright (c) 2014-2017 Dr. Colin Hirsch and Daniel Frey
2// Please see LICENSE for license or visit https://github.com/taocpp/PEGTL/
3
4#ifndef TAOCPP_PEGTL_INCLUDE_INTERNAL_MARKER_HPP
5#define TAOCPP_PEGTL_INCLUDE_INTERNAL_MARKER_HPP
6
7#include "../config.hpp"
8#include "../rewind_mode.hpp"
9
10namespace tao
11{
12 namespace TAOCPP_PEGTL_NAMESPACE
13 {
14 namespace internal
15 {
16 template< typename Iterator, rewind_mode M >
17 class marker
18 {
19 public:
20 static constexpr rewind_mode next_rewind_mode = M;
21
22 explicit marker( const Iterator& ) noexcept
23 {
24 }
25
26 marker( marker&& ) noexcept
27 {
28 }
29
30 marker( const marker& ) = delete;
31 void operator=( const marker& ) = delete;
32
33 bool operator()( const bool result ) const noexcept
34 {
35 return result;
36 }
37 };
38
39 template< typename Iterator >
40 class marker< Iterator, rewind_mode::REQUIRED >
41 {
42 public:
43 static constexpr rewind_mode next_rewind_mode = rewind_mode::ACTIVE;
44
45 explicit marker( Iterator& i ) noexcept
46 : m_saved( i ),
47 m_input( &i )
48 {
49 }
50
51 marker( marker&& i ) noexcept
52 : m_saved( i.m_saved ),
53 m_input( i.m_input )
54 {
55 i.m_input = nullptr;
56 }
57
58 ~marker() noexcept
59 {
60 if( m_input != nullptr ) {
61 ( *m_input ) = m_saved;
62 }
63 }
64
65 marker( const marker& ) = delete;
66 void operator=( const marker& ) = delete;
67
68 bool operator()( const bool result ) noexcept
69 {
70 if( result ) {
71 m_input = nullptr;
72 return true;
73 }
74 return false;
75 }
76
77 const Iterator& iterator() const noexcept
78 {
79 return m_saved;
80 }
81
82 private:
83 const Iterator m_saved;
84 Iterator* m_input;
85 };
86
87 } // namespace internal
88
89 } // namespace TAOCPP_PEGTL_NAMESPACE
90
91} // namespace tao
92
93#endif