Edit: /usr/include/boost/regex/mfc.hpp (6559B)
/*
*
* 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 mfc.hpp
* VERSION see
* DESCRIPTION: Overloads and helpers for using MFC/ATL string types with Boost.Regex.
*/
#ifndef BOOST_REGEX_MFC_HPP
#define BOOST_REGEX_MFC_HPP
#include
#include
namespace boost{
//
// define the types used for TCHAR's:
typedef basic_regex tregex;
typedef match_results tmatch;
typedef regex_iterator tregex_iterator;
typedef regex_token_iterator tregex_token_iterator;
// Obsolete. Remove
#define SIMPLE_STRING_PARAM class B, bool b
#define SIMPLE_STRING_ARG_LIST B, b
//
// define regex creation functions:
//
template
inline basic_regex
make_regex(const ATL::CSimpleStringT& s, ::boost::regex_constants::syntax_option_type f = boost::regex_constants::normal)
{
basic_regex result(s.GetString(), s.GetString() + s.GetLength(), f);
return result;
}
//
// regex_match overloads:
//
template
inline bool regex_match(const ATL::CSimpleStringT& s,
match_results& what,
const basic_regex& e,
boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
{
return ::boost::regex_match(s.GetString(),
s.GetString() + s.GetLength(),
what,
e,
f);
}
template
inline bool regex_match(const ATL::CSimpleStringT& s,
const basic_regex& e,
boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
{
return ::boost::regex_match(s.GetString(),
s.GetString() + s.GetLength(),
e,
f);
}
//
// regex_search overloads:
//
template
inline bool regex_search(const ATL::CSimpleStringT& s,
match_results& what,
const basic_regex& e,
boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
{
return ::boost::regex_search(s.GetString(),
s.GetString() + s.GetLength(),
what,
e,
f);
}
template
inline bool regex_search(const ATL::CSimpleStringT& s,
const basic_regex& e,
boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
{
return ::boost::regex_search(s.GetString(),
s.GetString() + s.GetLength(),
e,
f);
}
//
// regex_iterator creation:
//
template
inline regex_iterator
make_regex_iterator(const ATL::CSimpleStringT& s, const basic_regex& e, ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
{
regex_iterator result(s.GetString(), s.GetString() + s.GetLength(), e, f);
return result;
}
template
inline regex_token_iterator
make_regex_token_iterator(const ATL::CSimpleStringT& s, const basic_regex& e, int sub = 0, ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
{
regex_token_iterator result(s.GetString(), s.GetString() + s.GetLength(), e, sub, f);
return result;
}
template
inline regex_token_iterator
make_regex_token_iterator(const ATL::CSimpleStringT& s, const basic_regex& e, const std::vector& subs, ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
{
regex_token_iterator result(s.GetString(), s.GetString() + s.GetLength(), e, subs, f);
return result;
}
template
inline regex_token_iterator
make_regex_token_iterator(const ATL::CSimpleStringT& s, const basic_regex& e, const int (& subs)[N], ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
{
regex_token_iterator result(s.GetString(), s.GetString() + s.GetLength(), e, subs, f);
return result;
}
template
OutputIterator regex_replace(OutputIterator out,
BidirectionalIterator first,
BidirectionalIterator last,
const basic_regex& e,
const ATL::CSimpleStringT& fmt,
match_flag_type flags = match_default)
{
return ::boost::regex_replace(out, first, last, e, fmt.GetString(), flags);
}
namespace BOOST_REGEX_DETAIL_NS{
template
class mfc_string_out_iterator
{
ATL::CSimpleStringT* out;
public:
mfc_string_out_iterator(ATL::CSimpleStringT& s) : out(&s) {}
mfc_string_out_iterator& operator++() { return *this; }
mfc_string_out_iterator& operator++(int) { return *this; }
mfc_string_out_iterator& operator*() { return *this; }
mfc_string_out_iterator& operator=(B v)
{
out->AppendChar(v);
return *this;
}
typedef std::ptrdiff_t difference_type;
typedef B value_type;
typedef value_type* pointer;
typedef value_type& reference;
typedef std::output_iterator_tag iterator_category;
};
}
template
ATL::CSimpleStringT regex_replace(const ATL::CSimpleStringT& s,
const basic_regex& e,
const ATL::CSimpleStringT& fmt,
match_flag_type flags = match_default)
{
ATL::CSimpleStringT result(s.GetManager());
BOOST_REGEX_DETAIL_NS::mfc_string_out_iterator i(result);
regex_replace(i, s.GetString(), s.GetString() + s.GetLength(), e, fmt.GetString(), flags);
return result;
}
} // namespace boost.
#endif