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