You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
1126 lines
43 KiB
1126 lines
43 KiB
/* |
|
* |
|
* Copyright (c) 2004 |
|
* John Maddock |
|
* |
|
* Use, modification and distribution are subject to the |
|
* Boost Software License, Version 1.0. (See accompanying file |
|
* LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
|
* |
|
*/ |
|
|
|
/* |
|
* LOCATION: see http://www.boost.org for most recent version. |
|
* FILE concepts.hpp |
|
* VERSION see <boost/version.hpp> |
|
* DESCRIPTION: Declares regular expression concepts. |
|
*/ |
|
|
|
#ifndef BOOST_REGEX_CONCEPTS_HPP_INCLUDED |
|
#define BOOST_REGEX_CONCEPTS_HPP_INCLUDED |
|
|
|
#include <boost/concept_archetype.hpp> |
|
#include <boost/concept_check.hpp> |
|
#include <boost/type_traits/is_enum.hpp> |
|
#include <boost/type_traits/is_base_and_derived.hpp> |
|
#include <boost/static_assert.hpp> |
|
#ifndef BOOST_TEST_TR1_REGEX |
|
#include <boost/regex.hpp> |
|
#endif |
|
#include <bitset> |
|
#include <vector> |
|
#include <iostream> |
|
|
|
namespace boost{ |
|
|
|
// |
|
// bitmask_archetype: |
|
// this can be either an integer type, an enum, or a std::bitset, |
|
// we use the latter as the architype as it offers the "strictest" |
|
// of the possible interfaces: |
|
// |
|
typedef std::bitset<512> bitmask_archetype; |
|
// |
|
// char_architype: |
|
// A strict model for the character type interface. |
|
// |
|
struct char_architype |
|
{ |
|
// default constructable: |
|
char_architype(); |
|
// copy constructable / assignable: |
|
char_architype(const char_architype&); |
|
char_architype& operator=(const char_architype&); |
|
// constructable from an integral value: |
|
char_architype(unsigned long val); |
|
// comparable: |
|
bool operator==(const char_architype&)const; |
|
bool operator!=(const char_architype&)const; |
|
bool operator<(const char_architype&)const; |
|
bool operator<=(const char_architype&)const; |
|
bool operator>=(const char_architype&)const; |
|
bool operator>(const char_architype&)const; |
|
// conversion to integral type: |
|
operator long()const; |
|
}; |
|
// |
|
// char_architype can not be used with basic_string: |
|
// |
|
} // namespace boost |
|
namespace std{ |
|
template<> struct char_traits<boost::char_architype> |
|
{ |
|
// The intent is that this template is not instantiated, |
|
// but this typedef gives us a chance of compilation in |
|
// case it is: |
|
typedef boost::char_architype char_type; |
|
}; |
|
} |
|
// |
|
// Allocator architype: |
|
// |
|
template <class T> |
|
class allocator_architype |
|
{ |
|
public: |
|
typedef T* pointer; |
|
typedef const T* const_pointer; |
|
typedef T& reference; |
|
typedef const T& const_reference; |
|
typedef T value_type; |
|
typedef unsigned size_type; |
|
typedef int difference_type; |
|
|
|
template <class U> |
|
struct rebind |
|
{ |
|
typedef allocator_architype<U> other; |
|
}; |
|
|
|
pointer address(reference r); |
|
const_pointer address(const_reference r); |
|
pointer allocate(size_type); |
|
pointer allocate(size_type, pointer); |
|
void deallocate(pointer, size_type); |
|
size_type max_size()const; |
|
|
|
allocator_architype(); |
|
allocator_architype(const allocator_architype&); |
|
|
|
template <class Other> |
|
allocator_architype(const allocator_architype<Other>&); |
|
|
|
void construct(pointer, const_reference); |
|
void destroy(pointer); |
|
}; |
|
|
|
template <class T> |
|
bool operator == (const allocator_architype<T>&, const allocator_architype<T>&); |
|
template <class T> |
|
bool operator != (const allocator_architype<T>&, const allocator_architype<T>&); |
|
|
|
namespace boost{ |
|
// |
|
// regex_traits_architype: |
|
// A strict interpretation of the regular expression traits class requirements. |
|
// |
|
template <class charT> |
|
struct regex_traits_architype |
|
{ |
|
public: |
|
regex_traits_architype(); |
|
typedef charT char_type; |
|
// typedef std::size_t size_type; |
|
typedef std::vector<char_type> string_type; |
|
typedef copy_constructible_archetype<assignable_archetype<> > locale_type; |
|
typedef bitmask_archetype char_class_type; |
|
|
|
static std::size_t length(const char_type* ) { return 0; } |
|
|
|
charT translate(charT ) const { return charT(); } |
|
charT translate_nocase(charT ) const { return static_object<charT>::get(); } |
|
|
|
template <class ForwardIterator> |
|
string_type transform(ForwardIterator , ForwardIterator ) const |
|
{ return static_object<string_type>::get(); } |
|
template <class ForwardIterator> |
|
string_type transform_primary(ForwardIterator , ForwardIterator ) const |
|
{ return static_object<string_type>::get(); } |
|
|
|
template <class ForwardIterator> |
|
char_class_type lookup_classname(ForwardIterator , ForwardIterator ) const |
|
{ return static_object<char_class_type>::get(); } |
|
template <class ForwardIterator> |
|
string_type lookup_collatename(ForwardIterator , ForwardIterator ) const |
|
{ return static_object<string_type>::get(); } |
|
|
|
bool isctype(charT, char_class_type) const |
|
{ return false; } |
|
int value(charT, int) const |
|
{ return 0; } |
|
|
|
locale_type imbue(locale_type l) |
|
{ return l; } |
|
locale_type getloc()const |
|
{ return static_object<locale_type>::get(); } |
|
|
|
private: |
|
// this type is not copyable: |
|
regex_traits_architype(const regex_traits_architype&); |
|
regex_traits_architype& operator=(const regex_traits_architype&); |
|
}; |
|
|
|
// |
|
// alter this to std::tr1, to test a std implementation: |
|
// |
|
#ifndef BOOST_TEST_TR1_REGEX |
|
namespace global_regex_namespace = ::boost; |
|
#else |
|
namespace global_regex_namespace = ::std::tr1; |
|
#endif |
|
|
|
template <class Bitmask> |
|
struct BitmaskConcept |
|
{ |
|
void constraints() |
|
{ |
|
function_requires<CopyConstructibleConcept<Bitmask> >(); |
|
function_requires<AssignableConcept<Bitmask> >(); |
|
|
|
m_mask1 = m_mask2 | m_mask3; |
|
m_mask1 = m_mask2 & m_mask3; |
|
m_mask1 = m_mask2 ^ m_mask3; |
|
|
|
m_mask1 = ~m_mask2; |
|
|
|
m_mask1 |= m_mask2; |
|
m_mask1 &= m_mask2; |
|
m_mask1 ^= m_mask2; |
|
} |
|
Bitmask m_mask1, m_mask2, m_mask3; |
|
}; |
|
|
|
template <class traits> |
|
struct RegexTraitsConcept |
|
{ |
|
RegexTraitsConcept(); |
|
// required typedefs: |
|
typedef typename traits::char_type char_type; |
|
// typedef typename traits::size_type size_type; |
|
typedef typename traits::string_type string_type; |
|
typedef typename traits::locale_type locale_type; |
|
typedef typename traits::char_class_type char_class_type; |
|
|
|
void constraints() |
|
{ |
|
//function_requires<UnsignedIntegerConcept<size_type> >(); |
|
function_requires<RandomAccessContainerConcept<string_type> >(); |
|
function_requires<DefaultConstructibleConcept<locale_type> >(); |
|
function_requires<CopyConstructibleConcept<locale_type> >(); |
|
function_requires<AssignableConcept<locale_type> >(); |
|
function_requires<BitmaskConcept<char_class_type> >(); |
|
|
|
std::size_t n = traits::length(m_pointer); |
|
ignore_unused_variable_warning(n); |
|
|
|
char_type c = m_ctraits.translate(m_char); |
|
ignore_unused_variable_warning(c); |
|
c = m_ctraits.translate_nocase(m_char); |
|
|
|
//string_type::foobar bar; |
|
string_type s1 = m_ctraits.transform(m_pointer, m_pointer); |
|
ignore_unused_variable_warning(s1); |
|
|
|
string_type s2 = m_ctraits.transform_primary(m_pointer, m_pointer); |
|
ignore_unused_variable_warning(s2); |
|
|
|
char_class_type cc = m_ctraits.lookup_classname(m_pointer, m_pointer); |
|
ignore_unused_variable_warning(cc); |
|
|
|
string_type s3 = m_ctraits.lookup_collatename(m_pointer, m_pointer); |
|
ignore_unused_variable_warning(s3); |
|
|
|
bool b = m_ctraits.isctype(m_char, cc); |
|
ignore_unused_variable_warning(b); |
|
|
|
int v = m_ctraits.value(m_char, 16); |
|
ignore_unused_variable_warning(v); |
|
|
|
locale_type l(m_ctraits.getloc()); |
|
m_traits.imbue(l); |
|
ignore_unused_variable_warning(l); |
|
} |
|
traits m_traits; |
|
const traits m_ctraits; |
|
const char_type* m_pointer; |
|
char_type m_char; |
|
private: |
|
RegexTraitsConcept& operator=(RegexTraitsConcept&); |
|
}; |
|
|
|
// |
|
// helper class to compute what traits class a regular expression type is using: |
|
// |
|
template <class Regex> |
|
struct regex_traits_computer; |
|
|
|
template <class charT, class traits> |
|
struct regex_traits_computer< global_regex_namespace::basic_regex<charT, traits> > |
|
{ |
|
typedef traits type; |
|
}; |
|
|
|
// |
|
// BaseRegexConcept does not test anything dependent on basic_string, |
|
// in case our charT does not have an associated char_traits: |
|
// |
|
template <class Regex> |
|
struct BaseRegexConcept |
|
{ |
|
typedef typename Regex::value_type value_type; |
|
//typedef typename Regex::size_type size_type; |
|
typedef typename Regex::flag_type flag_type; |
|
typedef typename Regex::locale_type locale_type; |
|
typedef input_iterator_archetype<value_type> input_iterator_type; |
|
|
|
// derived test types: |
|
typedef const value_type* pointer_type; |
|
typedef bidirectional_iterator_archetype<value_type> BidiIterator; |
|
typedef global_regex_namespace::sub_match<BidiIterator> sub_match_type; |
|
typedef global_regex_namespace::match_results<BidiIterator, allocator_architype<sub_match_type> > match_results_type; |
|
typedef global_regex_namespace::match_results<BidiIterator> match_results_default_type; |
|
typedef output_iterator_archetype<value_type> OutIterator; |
|
typedef typename regex_traits_computer<Regex>::type traits_type; |
|
typedef global_regex_namespace::regex_iterator<BidiIterator, value_type, traits_type> regex_iterator_type; |
|
typedef global_regex_namespace::regex_token_iterator<BidiIterator, value_type, traits_type> regex_token_iterator_type; |
|
|
|
void global_constraints() |
|
{ |
|
// |
|
// test non-template components: |
|
// |
|
function_requires<BitmaskConcept<global_regex_namespace::regex_constants::syntax_option_type> >(); |
|
global_regex_namespace::regex_constants::syntax_option_type opts |
|
= global_regex_namespace::regex_constants::icase |
|
| global_regex_namespace::regex_constants::nosubs |
|
| global_regex_namespace::regex_constants::optimize |
|
| global_regex_namespace::regex_constants::collate |
|
| global_regex_namespace::regex_constants::ECMAScript |
|
| global_regex_namespace::regex_constants::basic |
|
| global_regex_namespace::regex_constants::extended |
|
| global_regex_namespace::regex_constants::awk |
|
| global_regex_namespace::regex_constants::grep |
|
| global_regex_namespace::regex_constants::egrep; |
|
ignore_unused_variable_warning(opts); |
|
|
|
function_requires<BitmaskConcept<global_regex_namespace::regex_constants::match_flag_type> >(); |
|
global_regex_namespace::regex_constants::match_flag_type mopts |
|
= global_regex_namespace::regex_constants::match_default |
|
| global_regex_namespace::regex_constants::match_not_bol |
|
| global_regex_namespace::regex_constants::match_not_eol |
|
| global_regex_namespace::regex_constants::match_not_bow |
|
| global_regex_namespace::regex_constants::match_not_eow |
|
| global_regex_namespace::regex_constants::match_any |
|
| global_regex_namespace::regex_constants::match_not_null |
|
| global_regex_namespace::regex_constants::match_continuous |
|
| global_regex_namespace::regex_constants::match_prev_avail |
|
| global_regex_namespace::regex_constants::format_default |
|
| global_regex_namespace::regex_constants::format_sed |
|
| global_regex_namespace::regex_constants::format_no_copy |
|
| global_regex_namespace::regex_constants::format_first_only; |
|
ignore_unused_variable_warning(mopts); |
|
|
|
BOOST_STATIC_ASSERT((::boost::is_enum<global_regex_namespace::regex_constants::error_type>::value)); |
|
global_regex_namespace::regex_constants::error_type e1 = global_regex_namespace::regex_constants::error_collate; |
|
ignore_unused_variable_warning(e1); |
|
e1 = global_regex_namespace::regex_constants::error_ctype; |
|
ignore_unused_variable_warning(e1); |
|
e1 = global_regex_namespace::regex_constants::error_escape; |
|
ignore_unused_variable_warning(e1); |
|
e1 = global_regex_namespace::regex_constants::error_backref; |
|
ignore_unused_variable_warning(e1); |
|
e1 = global_regex_namespace::regex_constants::error_brack; |
|
ignore_unused_variable_warning(e1); |
|
e1 = global_regex_namespace::regex_constants::error_paren; |
|
ignore_unused_variable_warning(e1); |
|
e1 = global_regex_namespace::regex_constants::error_brace; |
|
ignore_unused_variable_warning(e1); |
|
e1 = global_regex_namespace::regex_constants::error_badbrace; |
|
ignore_unused_variable_warning(e1); |
|
e1 = global_regex_namespace::regex_constants::error_range; |
|
ignore_unused_variable_warning(e1); |
|
e1 = global_regex_namespace::regex_constants::error_space; |
|
ignore_unused_variable_warning(e1); |
|
e1 = global_regex_namespace::regex_constants::error_badrepeat; |
|
ignore_unused_variable_warning(e1); |
|
e1 = global_regex_namespace::regex_constants::error_complexity; |
|
ignore_unused_variable_warning(e1); |
|
e1 = global_regex_namespace::regex_constants::error_stack; |
|
ignore_unused_variable_warning(e1); |
|
|
|
BOOST_STATIC_ASSERT((::boost::is_base_and_derived<std::runtime_error, global_regex_namespace::regex_error>::value )); |
|
const global_regex_namespace::regex_error except(e1); |
|
e1 = except.code(); |
|
|
|
typedef typename Regex::value_type regex_value_type; |
|
function_requires< RegexTraitsConcept<global_regex_namespace::regex_traits<char> > >(); |
|
function_requires< BaseRegexConcept<global_regex_namespace::basic_regex<char> > >(); |
|
} |
|
void constraints() |
|
{ |
|
global_constraints(); |
|
|
|
BOOST_STATIC_ASSERT((::boost::is_same< flag_type, global_regex_namespace::regex_constants::syntax_option_type>::value)); |
|
flag_type opts |
|
= Regex::icase |
|
| Regex::nosubs |
|
| Regex::optimize |
|
| Regex::collate |
|
| Regex::ECMAScript |
|
| Regex::basic |
|
| Regex::extended |
|
| Regex::awk |
|
| Regex::grep |
|
| Regex::egrep; |
|
ignore_unused_variable_warning(opts); |
|
|
|
function_requires<DefaultConstructibleConcept<Regex> >(); |
|
function_requires<CopyConstructibleConcept<Regex> >(); |
|
|
|
// Regex constructors: |
|
Regex e1(m_pointer); |
|
ignore_unused_variable_warning(e1); |
|
Regex e2(m_pointer, m_flags); |
|
ignore_unused_variable_warning(e2); |
|
Regex e3(m_pointer, m_size, m_flags); |
|
ignore_unused_variable_warning(e3); |
|
Regex e4(in1, in2); |
|
ignore_unused_variable_warning(e4); |
|
Regex e5(in1, in2, m_flags); |
|
ignore_unused_variable_warning(e5); |
|
|
|
// assign etc: |
|
Regex e; |
|
e = m_pointer; |
|
e = e1; |
|
e.assign(e1); |
|
e.assign(m_pointer); |
|
e.assign(m_pointer, m_flags); |
|
e.assign(m_pointer, m_size, m_flags); |
|
e.assign(in1, in2); |
|
e.assign(in1, in2, m_flags); |
|
|
|
// access: |
|
const Regex ce; |
|
typename Regex::size_type i = ce.mark_count(); |
|
ignore_unused_variable_warning(i); |
|
m_flags = ce.flags(); |
|
e.imbue(ce.getloc()); |
|
e.swap(e1); |
|
|
|
global_regex_namespace::swap(e, e1); |
|
|
|
// sub_match: |
|
BOOST_STATIC_ASSERT((::boost::is_base_and_derived<std::pair<BidiIterator, BidiIterator>, sub_match_type>::value)); |
|
typedef typename sub_match_type::value_type sub_value_type; |
|
typedef typename sub_match_type::difference_type sub_diff_type; |
|
typedef typename sub_match_type::iterator sub_iter_type; |
|
BOOST_STATIC_ASSERT((::boost::is_same<sub_value_type, value_type>::value)); |
|
BOOST_STATIC_ASSERT((::boost::is_same<sub_iter_type, BidiIterator>::value)); |
|
bool b = m_sub.matched; |
|
ignore_unused_variable_warning(b); |
|
BidiIterator bi = m_sub.first; |
|
ignore_unused_variable_warning(bi); |
|
bi = m_sub.second; |
|
ignore_unused_variable_warning(bi); |
|
sub_diff_type diff = m_sub.length(); |
|
ignore_unused_variable_warning(diff); |
|
// match_results tests: |
|
typedef typename match_results_type::value_type mr_value_type; |
|
typedef typename match_results_type::const_reference mr_const_reference; |
|
typedef typename match_results_type::reference mr_reference; |
|
typedef typename match_results_type::const_iterator mr_const_iterator; |
|
typedef typename match_results_type::iterator mr_iterator; |
|
typedef typename match_results_type::difference_type mr_difference_type; |
|
typedef typename match_results_type::size_type mr_size_type; |
|
typedef typename match_results_type::allocator_type mr_allocator_type; |
|
typedef typename match_results_type::char_type mr_char_type; |
|
typedef typename match_results_type::string_type mr_string_type; |
|
|
|
match_results_type m1; |
|
mr_allocator_type at; |
|
match_results_type m2(at); |
|
match_results_type m3(m1); |
|
m1 = m2; |
|
|
|
int ival = 0; |
|
|
|
mr_size_type mrs = m_cresults.size(); |
|
ignore_unused_variable_warning(mrs); |
|
mrs = m_cresults.max_size(); |
|
ignore_unused_variable_warning(mrs); |
|
b = m_cresults.empty(); |
|
ignore_unused_variable_warning(b); |
|
mr_difference_type mrd = m_cresults.length(); |
|
ignore_unused_variable_warning(mrd); |
|
mrd = m_cresults.length(ival); |
|
ignore_unused_variable_warning(mrd); |
|
mrd = m_cresults.position(); |
|
ignore_unused_variable_warning(mrd); |
|
mrd = m_cresults.position(mrs); |
|
ignore_unused_variable_warning(mrd); |
|
|
|
mr_const_reference mrcr = m_cresults[ival]; |
|
ignore_unused_variable_warning(mrcr); |
|
mr_const_reference mrcr2 = m_cresults.prefix(); |
|
ignore_unused_variable_warning(mrcr2); |
|
mr_const_reference mrcr3 = m_cresults.suffix(); |
|
ignore_unused_variable_warning(mrcr3); |
|
mr_const_iterator mrci = m_cresults.begin(); |
|
ignore_unused_variable_warning(mrci); |
|
mrci = m_cresults.end(); |
|
ignore_unused_variable_warning(mrci); |
|
|
|
mr_allocator_type at2 = m_cresults.get_allocator(); |
|
m_results.swap(m_results); |
|
global_regex_namespace::swap(m_results, m_results); |
|
|
|
// regex_match: |
|
b = global_regex_namespace::regex_match(m_in, m_in, m_results, e); |
|
ignore_unused_variable_warning(b); |
|
b = global_regex_namespace::regex_match(m_in, m_in, m_results, e, m_mft); |
|
ignore_unused_variable_warning(b); |
|
b = global_regex_namespace::regex_match(m_in, m_in, e); |
|
ignore_unused_variable_warning(b); |
|
b = global_regex_namespace::regex_match(m_in, m_in, e, m_mft); |
|
ignore_unused_variable_warning(b); |
|
b = global_regex_namespace::regex_match(m_pointer, m_pmatch, e); |
|
ignore_unused_variable_warning(b); |
|
b = global_regex_namespace::regex_match(m_pointer, m_pmatch, e, m_mft); |
|
ignore_unused_variable_warning(b); |
|
b = global_regex_namespace::regex_match(m_pointer, e); |
|
ignore_unused_variable_warning(b); |
|
b = global_regex_namespace::regex_match(m_pointer, e, m_mft); |
|
ignore_unused_variable_warning(b); |
|
// regex_search: |
|
b = global_regex_namespace::regex_search(m_in, m_in, m_results, e); |
|
ignore_unused_variable_warning(b); |
|
b = global_regex_namespace::regex_search(m_in, m_in, m_results, e, m_mft); |
|
ignore_unused_variable_warning(b); |
|
b = global_regex_namespace::regex_search(m_in, m_in, e); |
|
ignore_unused_variable_warning(b); |
|
b = global_regex_namespace::regex_search(m_in, m_in, e, m_mft); |
|
ignore_unused_variable_warning(b); |
|
b = global_regex_namespace::regex_search(m_pointer, m_pmatch, e); |
|
ignore_unused_variable_warning(b); |
|
b = global_regex_namespace::regex_search(m_pointer, m_pmatch, e, m_mft); |
|
ignore_unused_variable_warning(b); |
|
b = global_regex_namespace::regex_search(m_pointer, e); |
|
ignore_unused_variable_warning(b); |
|
b = global_regex_namespace::regex_search(m_pointer, e, m_mft); |
|
ignore_unused_variable_warning(b); |
|
|
|
// regex_iterator: |
|
typedef typename regex_iterator_type::regex_type rit_regex_type; |
|
typedef typename regex_iterator_type::value_type rit_value_type; |
|
typedef typename regex_iterator_type::difference_type rit_difference_type; |
|
typedef typename regex_iterator_type::pointer rit_pointer; |
|
typedef typename regex_iterator_type::reference rit_reference; |
|
typedef typename regex_iterator_type::iterator_category rit_iterator_category; |
|
BOOST_STATIC_ASSERT((::boost::is_same<rit_regex_type, Regex>::value)); |
|
BOOST_STATIC_ASSERT((::boost::is_same<rit_value_type, match_results_default_type>::value)); |
|
BOOST_STATIC_ASSERT((::boost::is_same<rit_difference_type, std::ptrdiff_t>::value)); |
|
BOOST_STATIC_ASSERT((::boost::is_same<rit_pointer, const match_results_default_type*>::value)); |
|
BOOST_STATIC_ASSERT((::boost::is_same<rit_reference, const match_results_default_type&>::value)); |
|
BOOST_STATIC_ASSERT((::boost::is_convertible<rit_iterator_category*, std::forward_iterator_tag*>::value)); |
|
// this takes care of most of the checks needed: |
|
function_requires<ForwardIteratorConcept<regex_iterator_type> >(); |
|
regex_iterator_type iter1(m_in, m_in, e); |
|
ignore_unused_variable_warning(iter1); |
|
regex_iterator_type iter2(m_in, m_in, e, m_mft); |
|
ignore_unused_variable_warning(iter2); |
|
|
|
// regex_token_iterator: |
|
typedef typename regex_token_iterator_type::regex_type rtit_regex_type; |
|
typedef typename regex_token_iterator_type::value_type rtit_value_type; |
|
typedef typename regex_token_iterator_type::difference_type rtit_difference_type; |
|
typedef typename regex_token_iterator_type::pointer rtit_pointer; |
|
typedef typename regex_token_iterator_type::reference rtit_reference; |
|
typedef typename regex_token_iterator_type::iterator_category rtit_iterator_category; |
|
BOOST_STATIC_ASSERT((::boost::is_same<rtit_regex_type, Regex>::value)); |
|
BOOST_STATIC_ASSERT((::boost::is_same<rtit_value_type, sub_match_type>::value)); |
|
BOOST_STATIC_ASSERT((::boost::is_same<rtit_difference_type, std::ptrdiff_t>::value)); |
|
BOOST_STATIC_ASSERT((::boost::is_same<rtit_pointer, const sub_match_type*>::value)); |
|
BOOST_STATIC_ASSERT((::boost::is_same<rtit_reference, const sub_match_type&>::value)); |
|
BOOST_STATIC_ASSERT((::boost::is_convertible<rtit_iterator_category*, std::forward_iterator_tag*>::value)); |
|
// this takes care of most of the checks needed: |
|
function_requires<ForwardIteratorConcept<regex_token_iterator_type> >(); |
|
regex_token_iterator_type ti1(m_in, m_in, e); |
|
ignore_unused_variable_warning(ti1); |
|
regex_token_iterator_type ti2(m_in, m_in, e, 0); |
|
ignore_unused_variable_warning(ti2); |
|
regex_token_iterator_type ti3(m_in, m_in, e, 0, m_mft); |
|
ignore_unused_variable_warning(ti3); |
|
std::vector<int> subs; |
|
regex_token_iterator_type ti4(m_in, m_in, e, subs); |
|
ignore_unused_variable_warning(ti4); |
|
regex_token_iterator_type ti5(m_in, m_in, e, subs, m_mft); |
|
ignore_unused_variable_warning(ti5); |
|
static const int i_array[3] = { 1, 2, 3, }; |
|
regex_token_iterator_type ti6(m_in, m_in, e, i_array); |
|
ignore_unused_variable_warning(ti6); |
|
regex_token_iterator_type ti7(m_in, m_in, e, i_array, m_mft); |
|
ignore_unused_variable_warning(ti7); |
|
} |
|
|
|
pointer_type m_pointer; |
|
flag_type m_flags; |
|
std::size_t m_size; |
|
input_iterator_type in1, in2; |
|
const sub_match_type m_sub; |
|
const value_type m_char; |
|
match_results_type m_results; |
|
const match_results_type m_cresults; |
|
OutIterator m_out; |
|
BidiIterator m_in; |
|
global_regex_namespace::regex_constants::match_flag_type m_mft; |
|
global_regex_namespace::match_results< |
|
pointer_type, |
|
allocator_architype<global_regex_namespace::sub_match<pointer_type> > > |
|
m_pmatch; |
|
|
|
BaseRegexConcept(); |
|
BaseRegexConcept(const BaseRegexConcept&); |
|
BaseRegexConcept& operator=(const BaseRegexConcept&); |
|
}; |
|
|
|
// |
|
// RegexConcept: |
|
// Test every interface in the std: |
|
// |
|
template <class Regex> |
|
struct RegexConcept |
|
{ |
|
typedef typename Regex::value_type value_type; |
|
//typedef typename Regex::size_type size_type; |
|
typedef typename Regex::flag_type flag_type; |
|
typedef typename Regex::locale_type locale_type; |
|
|
|
// derived test types: |
|
typedef const value_type* pointer_type; |
|
typedef std::basic_string<value_type> string_type; |
|
typedef boost::bidirectional_iterator_archetype<value_type> BidiIterator; |
|
typedef global_regex_namespace::sub_match<BidiIterator> sub_match_type; |
|
typedef global_regex_namespace::match_results<BidiIterator, allocator_architype<sub_match_type> > match_results_type; |
|
typedef output_iterator_archetype<value_type> OutIterator; |
|
|
|
|
|
void constraints() |
|
{ |
|
function_requires<BaseRegexConcept<Regex> >(); |
|
// string based construct: |
|
Regex e1(m_string); |
|
ignore_unused_variable_warning(e1); |
|
Regex e2(m_string, m_flags); |
|
ignore_unused_variable_warning(e2); |
|
|
|
// assign etc: |
|
Regex e; |
|
e = m_string; |
|
e.assign(m_string); |
|
e.assign(m_string, m_flags); |
|
|
|
// sub_match: |
|
string_type s(m_sub); |
|
ignore_unused_variable_warning(s); |
|
s = m_sub.str(); |
|
ignore_unused_variable_warning(s); |
|
int i = m_sub.compare(m_string); |
|
ignore_unused_variable_warning(i); |
|
|
|
int i2 = m_sub.compare(m_sub); |
|
ignore_unused_variable_warning(i2); |
|
i2 = m_sub.compare(m_pointer); |
|
ignore_unused_variable_warning(i2); |
|
|
|
bool b = m_sub == m_sub; |
|
ignore_unused_variable_warning(b); |
|
b = m_sub != m_sub; |
|
ignore_unused_variable_warning(b); |
|
b = m_sub <= m_sub; |
|
ignore_unused_variable_warning(b); |
|
b = m_sub <= m_sub; |
|
ignore_unused_variable_warning(b); |
|
b = m_sub > m_sub; |
|
ignore_unused_variable_warning(b); |
|
b = m_sub >= m_sub; |
|
ignore_unused_variable_warning(b); |
|
|
|
b = m_sub == m_pointer; |
|
ignore_unused_variable_warning(b); |
|
b = m_sub != m_pointer; |
|
ignore_unused_variable_warning(b); |
|
b = m_sub <= m_pointer; |
|
ignore_unused_variable_warning(b); |
|
b = m_sub <= m_pointer; |
|
ignore_unused_variable_warning(b); |
|
b = m_sub > m_pointer; |
|
ignore_unused_variable_warning(b); |
|
b = m_sub >= m_pointer; |
|
ignore_unused_variable_warning(b); |
|
|
|
b = m_pointer == m_sub; |
|
ignore_unused_variable_warning(b); |
|
b = m_pointer != m_sub; |
|
ignore_unused_variable_warning(b); |
|
b = m_pointer <= m_sub; |
|
ignore_unused_variable_warning(b); |
|
b = m_pointer <= m_sub; |
|
ignore_unused_variable_warning(b); |
|
b = m_pointer > m_sub; |
|
ignore_unused_variable_warning(b); |
|
b = m_pointer >= m_sub; |
|
ignore_unused_variable_warning(b); |
|
|
|
b = m_sub == m_char; |
|
ignore_unused_variable_warning(b); |
|
b = m_sub != m_char; |
|
ignore_unused_variable_warning(b); |
|
b = m_sub <= m_char; |
|
ignore_unused_variable_warning(b); |
|
b = m_sub <= m_char; |
|
ignore_unused_variable_warning(b); |
|
b = m_sub > m_char; |
|
ignore_unused_variable_warning(b); |
|
b = m_sub >= m_char; |
|
ignore_unused_variable_warning(b); |
|
|
|
b = m_char == m_sub; |
|
ignore_unused_variable_warning(b); |
|
b = m_char != m_sub; |
|
ignore_unused_variable_warning(b); |
|
b = m_char <= m_sub; |
|
ignore_unused_variable_warning(b); |
|
b = m_char <= m_sub; |
|
ignore_unused_variable_warning(b); |
|
b = m_char > m_sub; |
|
ignore_unused_variable_warning(b); |
|
b = m_char >= m_sub; |
|
ignore_unused_variable_warning(b); |
|
|
|
b = m_sub == m_string; |
|
ignore_unused_variable_warning(b); |
|
b = m_sub != m_string; |
|
ignore_unused_variable_warning(b); |
|
b = m_sub <= m_string; |
|
ignore_unused_variable_warning(b); |
|
b = m_sub <= m_string; |
|
ignore_unused_variable_warning(b); |
|
b = m_sub > m_string; |
|
ignore_unused_variable_warning(b); |
|
b = m_sub >= m_string; |
|
ignore_unused_variable_warning(b); |
|
|
|
b = m_string == m_sub; |
|
ignore_unused_variable_warning(b); |
|
b = m_string != m_sub; |
|
ignore_unused_variable_warning(b); |
|
b = m_string <= m_sub; |
|
ignore_unused_variable_warning(b); |
|
b = m_string <= m_sub; |
|
ignore_unused_variable_warning(b); |
|
b = m_string > m_sub; |
|
ignore_unused_variable_warning(b); |
|
b = m_string >= m_sub; |
|
ignore_unused_variable_warning(b); |
|
|
|
// match results: |
|
m_string = m_results.str(); |
|
ignore_unused_variable_warning(m_string); |
|
m_string = m_results.str(0); |
|
ignore_unused_variable_warning(m_string); |
|
m_out = m_cresults.format(m_out, m_string); |
|
m_out = m_cresults.format(m_out, m_string, m_mft); |
|
m_string = m_cresults.format(m_string); |
|
ignore_unused_variable_warning(m_string); |
|
m_string = m_cresults.format(m_string, m_mft); |
|
ignore_unused_variable_warning(m_string); |
|
|
|
// regex_match: |
|
b = global_regex_namespace::regex_match(m_string, m_smatch, e); |
|
ignore_unused_variable_warning(b); |
|
b = global_regex_namespace::regex_match(m_string, m_smatch, e, m_mft); |
|
ignore_unused_variable_warning(b); |
|
b = global_regex_namespace::regex_match(m_string, e); |
|
ignore_unused_variable_warning(b); |
|
b = global_regex_namespace::regex_match(m_string, e, m_mft); |
|
ignore_unused_variable_warning(b); |
|
|
|
// regex_search: |
|
b = global_regex_namespace::regex_search(m_string, m_smatch, e); |
|
ignore_unused_variable_warning(b); |
|
b = global_regex_namespace::regex_search(m_string, m_smatch, e, m_mft); |
|
ignore_unused_variable_warning(b); |
|
b = global_regex_namespace::regex_search(m_string, e); |
|
ignore_unused_variable_warning(b); |
|
b = global_regex_namespace::regex_search(m_string, e, m_mft); |
|
ignore_unused_variable_warning(b); |
|
|
|
// regex_replace: |
|
m_out = global_regex_namespace::regex_replace(m_out, m_in, m_in, e, m_string, m_mft); |
|
m_out = global_regex_namespace::regex_replace(m_out, m_in, m_in, e, m_string); |
|
m_string = global_regex_namespace::regex_replace(m_string, e, m_string, m_mft); |
|
ignore_unused_variable_warning(m_string); |
|
m_string = global_regex_namespace::regex_replace(m_string, e, m_string); |
|
ignore_unused_variable_warning(m_string); |
|
|
|
} |
|
|
|
flag_type m_flags; |
|
string_type m_string; |
|
const sub_match_type m_sub; |
|
match_results_type m_results; |
|
pointer_type m_pointer; |
|
value_type m_char; |
|
const match_results_type m_cresults; |
|
OutIterator m_out; |
|
BidiIterator m_in; |
|
global_regex_namespace::regex_constants::match_flag_type m_mft; |
|
global_regex_namespace::match_results<typename string_type::const_iterator, allocator_architype<global_regex_namespace::sub_match<typename string_type::const_iterator> > > m_smatch; |
|
|
|
RegexConcept(); |
|
RegexConcept(const RegexConcept&); |
|
RegexConcept& operator=(const RegexConcept&); |
|
}; |
|
|
|
#ifndef BOOST_REGEX_TEST_STD |
|
|
|
template <class M> |
|
struct functor1 |
|
{ |
|
typedef typename M::char_type char_type; |
|
const char_type* operator()(const M&)const |
|
{ |
|
static const char_type c = static_cast<char_type>(0); |
|
return &c; |
|
} |
|
}; |
|
template <class M> |
|
struct functor1b |
|
{ |
|
typedef typename M::char_type char_type; |
|
std::vector<char_type> operator()(const M&)const |
|
{ |
|
static const std::vector<char_type> c; |
|
return c; |
|
} |
|
}; |
|
template <class M> |
|
struct functor2 |
|
{ |
|
template <class O> |
|
O operator()(const M& /*m*/, O i)const |
|
{ |
|
return i; |
|
} |
|
}; |
|
template <class M> |
|
struct functor3 |
|
{ |
|
template <class O> |
|
O operator()(const M& /*m*/, O i, regex_constants::match_flag_type)const |
|
{ |
|
return i; |
|
} |
|
}; |
|
|
|
// |
|
// BoostRegexConcept: |
|
// Test every interface in the Boost implementation: |
|
// |
|
template <class Regex> |
|
struct BoostRegexConcept |
|
{ |
|
typedef typename Regex::value_type value_type; |
|
typedef typename Regex::size_type size_type; |
|
typedef typename Regex::flag_type flag_type; |
|
typedef typename Regex::locale_type locale_type; |
|
|
|
// derived test types: |
|
typedef const value_type* pointer_type; |
|
typedef std::basic_string<value_type> string_type; |
|
typedef typename Regex::const_iterator const_iterator; |
|
typedef bidirectional_iterator_archetype<value_type> BidiIterator; |
|
typedef output_iterator_archetype<value_type> OutputIterator; |
|
typedef global_regex_namespace::sub_match<BidiIterator> sub_match_type; |
|
typedef global_regex_namespace::match_results<BidiIterator, allocator_architype<sub_match_type> > match_results_type; |
|
typedef global_regex_namespace::match_results<BidiIterator> match_results_default_type; |
|
|
|
void constraints() |
|
{ |
|
global_regex_namespace::regex_constants::match_flag_type mopts |
|
= global_regex_namespace::regex_constants::match_default |
|
| global_regex_namespace::regex_constants::match_not_bol |
|
| global_regex_namespace::regex_constants::match_not_eol |
|
| global_regex_namespace::regex_constants::match_not_bow |
|
| global_regex_namespace::regex_constants::match_not_eow |
|
| global_regex_namespace::regex_constants::match_any |
|
| global_regex_namespace::regex_constants::match_not_null |
|
| global_regex_namespace::regex_constants::match_continuous |
|
| global_regex_namespace::regex_constants::match_partial |
|
| global_regex_namespace::regex_constants::match_prev_avail |
|
| global_regex_namespace::regex_constants::format_default |
|
| global_regex_namespace::regex_constants::format_sed |
|
| global_regex_namespace::regex_constants::format_perl |
|
| global_regex_namespace::regex_constants::format_no_copy |
|
| global_regex_namespace::regex_constants::format_first_only; |
|
|
|
(void)mopts; |
|
|
|
function_requires<RegexConcept<Regex> >(); |
|
const global_regex_namespace::regex_error except(global_regex_namespace::regex_constants::error_collate); |
|
std::ptrdiff_t pt = except.position(); |
|
ignore_unused_variable_warning(pt); |
|
const Regex ce, ce2; |
|
#ifndef BOOST_NO_STD_LOCALE |
|
m_stream << ce; |
|
#endif |
|
unsigned i = ce.error_code(); |
|
ignore_unused_variable_warning(i); |
|
pointer_type p = ce.expression(); |
|
ignore_unused_variable_warning(p); |
|
int i2 = ce.compare(ce2); |
|
ignore_unused_variable_warning(i2); |
|
bool b = ce == ce2; |
|
ignore_unused_variable_warning(b); |
|
b = ce.empty(); |
|
ignore_unused_variable_warning(b); |
|
b = ce != ce2; |
|
ignore_unused_variable_warning(b); |
|
b = ce < ce2; |
|
ignore_unused_variable_warning(b); |
|
b = ce > ce2; |
|
ignore_unused_variable_warning(b); |
|
b = ce <= ce2; |
|
ignore_unused_variable_warning(b); |
|
b = ce >= ce2; |
|
ignore_unused_variable_warning(b); |
|
i = ce.status(); |
|
ignore_unused_variable_warning(i); |
|
size_type s = ce.max_size(); |
|
ignore_unused_variable_warning(s); |
|
s = ce.size(); |
|
ignore_unused_variable_warning(s); |
|
const_iterator pi = ce.begin(); |
|
ignore_unused_variable_warning(pi); |
|
pi = ce.end(); |
|
ignore_unused_variable_warning(pi); |
|
string_type s2 = ce.str(); |
|
ignore_unused_variable_warning(s2); |
|
|
|
m_string = m_sub + m_sub; |
|
ignore_unused_variable_warning(m_string); |
|
m_string = m_sub + m_pointer; |
|
ignore_unused_variable_warning(m_string); |
|
m_string = m_pointer + m_sub; |
|
ignore_unused_variable_warning(m_string); |
|
m_string = m_sub + m_string; |
|
ignore_unused_variable_warning(m_string); |
|
m_string = m_string + m_sub; |
|
ignore_unused_variable_warning(m_string); |
|
m_string = m_sub + m_char; |
|
ignore_unused_variable_warning(m_string); |
|
m_string = m_char + m_sub; |
|
ignore_unused_variable_warning(m_string); |
|
|
|
// Named sub-expressions: |
|
m_sub = m_cresults[&m_char]; |
|
ignore_unused_variable_warning(m_sub); |
|
m_sub = m_cresults[m_string]; |
|
ignore_unused_variable_warning(m_sub); |
|
m_sub = m_cresults[""]; |
|
ignore_unused_variable_warning(m_sub); |
|
m_sub = m_cresults[std::string("")]; |
|
ignore_unused_variable_warning(m_sub); |
|
m_string = m_cresults.str(&m_char); |
|
ignore_unused_variable_warning(m_string); |
|
m_string = m_cresults.str(m_string); |
|
ignore_unused_variable_warning(m_string); |
|
m_string = m_cresults.str(""); |
|
ignore_unused_variable_warning(m_string); |
|
m_string = m_cresults.str(std::string("")); |
|
ignore_unused_variable_warning(m_string); |
|
|
|
typename match_results_type::difference_type diff; |
|
diff = m_cresults.length(&m_char); |
|
ignore_unused_variable_warning(diff); |
|
diff = m_cresults.length(m_string); |
|
ignore_unused_variable_warning(diff); |
|
diff = m_cresults.length(""); |
|
ignore_unused_variable_warning(diff); |
|
diff = m_cresults.length(std::string("")); |
|
ignore_unused_variable_warning(diff); |
|
diff = m_cresults.position(&m_char); |
|
ignore_unused_variable_warning(diff); |
|
diff = m_cresults.position(m_string); |
|
ignore_unused_variable_warning(diff); |
|
diff = m_cresults.position(""); |
|
ignore_unused_variable_warning(diff); |
|
diff = m_cresults.position(std::string("")); |
|
ignore_unused_variable_warning(diff); |
|
|
|
#ifndef BOOST_NO_STD_LOCALE |
|
m_stream << m_sub; |
|
m_stream << m_cresults; |
|
#endif |
|
// |
|
// Extended formatting with a functor: |
|
// |
|
regex_constants::match_flag_type f = regex_constants::match_default; |
|
OutputIterator out = static_object<OutputIterator>::get(); |
|
|
|
functor3<match_results_default_type> func3; |
|
functor2<match_results_default_type> func2; |
|
functor1<match_results_default_type> func1; |
|
|
|
functor3<match_results_type> func3b; |
|
functor2<match_results_type> func2b; |
|
functor1<match_results_type> func1b; |
|
|
|
out = regex_format(out, m_cresults, func3b, f); |
|
out = regex_format(out, m_cresults, func3b); |
|
out = regex_format(out, m_cresults, func2b, f); |
|
out = regex_format(out, m_cresults, func2b); |
|
out = regex_format(out, m_cresults, func1b, f); |
|
out = regex_format(out, m_cresults, func1b); |
|
out = regex_format(out, m_cresults, boost::ref(func3b), f); |
|
out = regex_format(out, m_cresults, boost::ref(func3b)); |
|
out = regex_format(out, m_cresults, boost::ref(func2b), f); |
|
out = regex_format(out, m_cresults, boost::ref(func2b)); |
|
out = regex_format(out, m_cresults, boost::ref(func1b), f); |
|
out = regex_format(out, m_cresults, boost::ref(func1b)); |
|
out = regex_format(out, m_cresults, boost::cref(func3b), f); |
|
out = regex_format(out, m_cresults, boost::cref(func3b)); |
|
out = regex_format(out, m_cresults, boost::cref(func2b), f); |
|
out = regex_format(out, m_cresults, boost::cref(func2b)); |
|
out = regex_format(out, m_cresults, boost::cref(func1b), f); |
|
out = regex_format(out, m_cresults, boost::cref(func1b)); |
|
|
|
m_string += regex_format(m_cresults, func3b, f); |
|
m_string += regex_format(m_cresults, func3b); |
|
m_string += regex_format(m_cresults, func2b, f); |
|
m_string += regex_format(m_cresults, func2b); |
|
m_string += regex_format(m_cresults, func1b, f); |
|
m_string += regex_format(m_cresults, func1b); |
|
m_string += regex_format(m_cresults, boost::ref(func3b), f); |
|
m_string += regex_format(m_cresults, boost::ref(func3b)); |
|
m_string += regex_format(m_cresults, boost::ref(func2b), f); |
|
m_string += regex_format(m_cresults, boost::ref(func2b)); |
|
m_string += regex_format(m_cresults, boost::ref(func1b), f); |
|
m_string += regex_format(m_cresults, boost::ref(func1b)); |
|
m_string += regex_format(m_cresults, boost::cref(func3b), f); |
|
m_string += regex_format(m_cresults, boost::cref(func3b)); |
|
m_string += regex_format(m_cresults, boost::cref(func2b), f); |
|
m_string += regex_format(m_cresults, boost::cref(func2b)); |
|
m_string += regex_format(m_cresults, boost::cref(func1b), f); |
|
m_string += regex_format(m_cresults, boost::cref(func1b)); |
|
|
|
out = m_cresults.format(out, func3b, f); |
|
out = m_cresults.format(out, func3b); |
|
out = m_cresults.format(out, func2b, f); |
|
out = m_cresults.format(out, func2b); |
|
out = m_cresults.format(out, func1b, f); |
|
out = m_cresults.format(out, func1b); |
|
out = m_cresults.format(out, boost::ref(func3b), f); |
|
out = m_cresults.format(out, boost::ref(func3b)); |
|
out = m_cresults.format(out, boost::ref(func2b), f); |
|
out = m_cresults.format(out, boost::ref(func2b)); |
|
out = m_cresults.format(out, boost::ref(func1b), f); |
|
out = m_cresults.format(out, boost::ref(func1b)); |
|
out = m_cresults.format(out, boost::cref(func3b), f); |
|
out = m_cresults.format(out, boost::cref(func3b)); |
|
out = m_cresults.format(out, boost::cref(func2b), f); |
|
out = m_cresults.format(out, boost::cref(func2b)); |
|
out = m_cresults.format(out, boost::cref(func1b), f); |
|
out = m_cresults.format(out, boost::cref(func1b)); |
|
|
|
m_string += m_cresults.format(func3b, f); |
|
m_string += m_cresults.format(func3b); |
|
m_string += m_cresults.format(func2b, f); |
|
m_string += m_cresults.format(func2b); |
|
m_string += m_cresults.format(func1b, f); |
|
m_string += m_cresults.format(func1b); |
|
m_string += m_cresults.format(boost::ref(func3b), f); |
|
m_string += m_cresults.format(boost::ref(func3b)); |
|
m_string += m_cresults.format(boost::ref(func2b), f); |
|
m_string += m_cresults.format(boost::ref(func2b)); |
|
m_string += m_cresults.format(boost::ref(func1b), f); |
|
m_string += m_cresults.format(boost::ref(func1b)); |
|
m_string += m_cresults.format(boost::cref(func3b), f); |
|
m_string += m_cresults.format(boost::cref(func3b)); |
|
m_string += m_cresults.format(boost::cref(func2b), f); |
|
m_string += m_cresults.format(boost::cref(func2b)); |
|
m_string += m_cresults.format(boost::cref(func1b), f); |
|
m_string += m_cresults.format(boost::cref(func1b)); |
|
|
|
out = regex_replace(out, m_in, m_in, ce, func3, f); |
|
out = regex_replace(out, m_in, m_in, ce, func3); |
|
out = regex_replace(out, m_in, m_in, ce, func2, f); |
|
out = regex_replace(out, m_in, m_in, ce, func2); |
|
out = regex_replace(out, m_in, m_in, ce, func1, f); |
|
out = regex_replace(out, m_in, m_in, ce, func1); |
|
out = regex_replace(out, m_in, m_in, ce, boost::ref(func3), f); |
|
out = regex_replace(out, m_in, m_in, ce, boost::ref(func3)); |
|
out = regex_replace(out, m_in, m_in, ce, boost::ref(func2), f); |
|
out = regex_replace(out, m_in, m_in, ce, boost::ref(func2)); |
|
out = regex_replace(out, m_in, m_in, ce, boost::ref(func1), f); |
|
out = regex_replace(out, m_in, m_in, ce, boost::ref(func1)); |
|
out = regex_replace(out, m_in, m_in, ce, boost::cref(func3), f); |
|
out = regex_replace(out, m_in, m_in, ce, boost::cref(func3)); |
|
out = regex_replace(out, m_in, m_in, ce, boost::cref(func2), f); |
|
out = regex_replace(out, m_in, m_in, ce, boost::cref(func2)); |
|
out = regex_replace(out, m_in, m_in, ce, boost::cref(func1), f); |
|
out = regex_replace(out, m_in, m_in, ce, boost::cref(func1)); |
|
|
|
functor3<match_results<typename string_type::const_iterator> > func3s; |
|
functor2<match_results<typename string_type::const_iterator> > func2s; |
|
functor1<match_results<typename string_type::const_iterator> > func1s; |
|
m_string += regex_replace(m_string, ce, func3s, f); |
|
m_string += regex_replace(m_string, ce, func3s); |
|
m_string += regex_replace(m_string, ce, func2s, f); |
|
m_string += regex_replace(m_string, ce, func2s); |
|
m_string += regex_replace(m_string, ce, func1s, f); |
|
m_string += regex_replace(m_string, ce, func1s); |
|
m_string += regex_replace(m_string, ce, boost::ref(func3s), f); |
|
m_string += regex_replace(m_string, ce, boost::ref(func3s)); |
|
m_string += regex_replace(m_string, ce, boost::ref(func2s), f); |
|
m_string += regex_replace(m_string, ce, boost::ref(func2s)); |
|
m_string += regex_replace(m_string, ce, boost::ref(func1s), f); |
|
m_string += regex_replace(m_string, ce, boost::ref(func1s)); |
|
m_string += regex_replace(m_string, ce, boost::cref(func3s), f); |
|
m_string += regex_replace(m_string, ce, boost::cref(func3s)); |
|
m_string += regex_replace(m_string, ce, boost::cref(func2s), f); |
|
m_string += regex_replace(m_string, ce, boost::cref(func2s)); |
|
m_string += regex_replace(m_string, ce, boost::cref(func1s), f); |
|
m_string += regex_replace(m_string, ce, boost::cref(func1s)); |
|
} |
|
|
|
std::basic_ostream<value_type> m_stream; |
|
sub_match_type m_sub; |
|
pointer_type m_pointer; |
|
string_type m_string; |
|
const value_type m_char; |
|
match_results_type m_results; |
|
const match_results_type m_cresults; |
|
BidiIterator m_in; |
|
|
|
BoostRegexConcept(); |
|
BoostRegexConcept(const BoostRegexConcept&); |
|
BoostRegexConcept& operator=(const BoostRegexConcept&); |
|
}; |
|
|
|
#endif // BOOST_REGEX_TEST_STD |
|
|
|
} |
|
|
|
#endif
|
|
|