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