New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
finder_regex.hpp in vendors/XIOS/current/extern/boost/include/boost/algorithm/string/detail – NEMO

source: vendors/XIOS/current/extern/boost/include/boost/algorithm/string/detail/finder_regex.hpp @ 3428

Last change on this file since 3428 was 3428, checked in by rblod, 12 years ago

importing initial XIOS vendor drop

File size: 4.5 KB
Line 
1//  Boost string_algo library find_regex.hpp header file  ---------------------------//
2
3//  Copyright Pavol Droba 2002-2003.
4//
5// Distributed under the Boost Software License, Version 1.0.
6//    (See accompanying file LICENSE_1_0.txt or copy at
7//          http://www.boost.org/LICENSE_1_0.txt)
8
9//  See http://www.boost.org/ for updates, documentation, and revision history.
10
11#ifndef BOOST_STRING_FINDER_REGEX_DETAIL_HPP
12#define BOOST_STRING_FINDER_REGEX_DETAIL_HPP
13
14#include <boost/algorithm/string/config.hpp>
15#include <boost/regex.hpp>
16
17#include <boost/range/iterator_range.hpp>
18#include <boost/range/begin.hpp>
19#include <boost/range/end.hpp>
20
21namespace boost {
22    namespace algorithm {
23        namespace detail {
24
25//  regex find functor -----------------------------------------------//
26
27            // regex search result
28            template<typename IteratorT>
29            struct regex_search_result : 
30                public iterator_range<IteratorT>
31            {
32                typedef regex_search_result<IteratorT> type;
33                typedef iterator_range<IteratorT> base_type;
34                typedef BOOST_STRING_TYPENAME base_type::value_type value_type;
35                typedef BOOST_STRING_TYPENAME base_type::difference_type difference_type;
36                typedef BOOST_STRING_TYPENAME base_type::const_iterator const_iterator;
37                typedef BOOST_STRING_TYPENAME base_type::iterator iterator;
38                typedef boost::match_results<iterator> match_results_type;
39
40                // Construction
41
42                // Construction from the match result
43                regex_search_result( const match_results_type& MatchResults ) :
44                    base_type( MatchResults[0].first, MatchResults[0].second ),
45                    m_MatchResults( MatchResults ) {}
46               
47                // Construction of empty match. End iterator has to be specified
48                regex_search_result( IteratorT End ) :
49                    base_type( End, End ) {}
50
51                regex_search_result( const regex_search_result& Other ) :
52                    base_type( Other.begin(), Other.end() ),
53                    m_MatchResults( Other.m_MatchResults ) {}
54
55                // Assignment
56                regex_search_result& operator=( const regex_search_result& Other )
57                {
58                    base_type::operator=( Other );
59                    m_MatchResults=Other.m_MatchResults;
60                    return *this;
61                }
62
63                // Match result retrival
64                const match_results_type& match_results() const
65                {
66                    return m_MatchResults;
67                }
68
69            private:
70                // Saved matchresult
71                match_results_type m_MatchResults;
72            };
73
74            // find_regex
75            /*
76                Regex based search functor
77            */
78            template<typename RegExT>
79            struct find_regexF
80            {
81                typedef RegExT regex_type;
82                typedef const RegExT& regex_reference_type;
83                   
84                // Construction
85                find_regexF( regex_reference_type Rx, match_flag_type MatchFlags = match_default ) : 
86                    m_Rx(Rx), m_MatchFlags(MatchFlags) {}   
87
88                // Operation
89                template< typename ForwardIteratorT >
90                regex_search_result<ForwardIteratorT>
91                operator()( 
92                    ForwardIteratorT Begin, 
93                    ForwardIteratorT End ) const
94                {
95                    typedef ForwardIteratorT input_iterator_type;
96                    typedef regex_search_result<ForwardIteratorT> result_type;
97
98                    // instantiate match result
99                    match_results<input_iterator_type> result;
100                    // search for a match
101                    if ( ::boost::regex_search( Begin, End, result, m_Rx, m_MatchFlags ) )
102                    {
103                        // construct a result
104                        return result_type( result );
105                    }
106                    else
107                    {
108                        // empty result
109                        return result_type( End );
110                    }
111                }
112
113            private:
114                regex_reference_type m_Rx; // Regexp
115                match_flag_type m_MatchFlags;     // match flags
116            };
117
118        } // namespace detail
119    } // namespace algorithm
120} // namespace boost
121
122#endif  // BOOST_STRING_FIND_DETAIL_HPP
Note: See TracBrowser for help on using the repository browser.