1// class template regex -*- C++ -*- 2 3// Copyright (C) 2010, 2011 Free Software Foundation, Inc. 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the 7// terms of the GNU General Public License as published by the 8// Free Software Foundation; either version 3, or (at your option) 9// any later version. 10 11// This library is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15 16// Under Section 7 of GPL version 3, you are granted additional 17// permissions described in the GCC Runtime Library Exception, version 18// 3.1, as published by the Free Software Foundation. 19 20// You should have received a copy of the GNU General Public License and 21// a copy of the GCC Runtime Library Exception along with this program; 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23// <http://www.gnu.org/licenses/>. 24 25/** 26 * @file bits/regex_cursor.h 27 * This is an internal header file, included by other library headers. 28 * Do not attempt to use it directly. @headername{regex} 29 */ 30 31namespace std _GLIBCXX_VISIBILITY(default) 32{ 33namespace __regex 34{ 35_GLIBCXX_BEGIN_NAMESPACE_VERSION 36 37 // ABC for pattern matching 38 struct _PatternCursor 39 { 40 virtual ~_PatternCursor() { }; 41 virtual void _M_next() = 0; 42 virtual bool _M_at_end() const = 0; 43 }; 44 45 // Provides a cursor into the specific target string. 46 template<typename _FwdIterT> 47 class _SpecializedCursor 48 : public _PatternCursor 49 { 50 public: 51 _SpecializedCursor(const _FwdIterT& __b, const _FwdIterT __e) 52 : _M_b(__b), _M_c(__b), _M_e(__e) 53 { } 54 55 typename std::iterator_traits<_FwdIterT>::value_type 56 _M_current() const 57 { return *_M_c; } 58 59 void 60 _M_next() 61 { ++_M_c; } 62 63 _FwdIterT 64 _M_pos() const 65 { return _M_c; } 66 67 const _FwdIterT& 68 _M_begin() const 69 { return _M_b; } 70 71 const _FwdIterT& 72 _M_end() const 73 { return _M_e; } 74 75 bool 76 _M_at_end() const 77 { return _M_c == _M_e; } 78 79 private: 80 _FwdIterT _M_b; 81 _FwdIterT _M_c; 82 _FwdIterT _M_e; 83 }; 84 85 // Helper function to create a cursor specialized for an iterator class. 86 template<typename _FwdIterT> 87 inline _SpecializedCursor<_FwdIterT> 88 __cursor(const _FwdIterT& __b, const _FwdIterT __e) 89 { return _SpecializedCursor<_FwdIterT>(__b, __e); } 90 91_GLIBCXX_END_NAMESPACE_VERSION 92} // namespace __regex 93} // namespace 94