Skip to content

Commit 1bb075c

Browse files
committed
Remove dependency on boost.regex headers.
1 parent add946f commit 1bb075c

3 files changed

Lines changed: 78 additions & 75 deletions

File tree

include/boost/asio/detail/regex_fwd.hpp

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,6 @@
1717

1818
#if defined(BOOST_ASIO_HAS_BOOST_REGEX)
1919

20-
#include <boost/regex_fwd.hpp>
21-
#include <boost/version.hpp>
22-
#if BOOST_VERSION >= 107600
23-
# if defined(BOOST_REGEX_CXX03)
24-
# include <boost/regex/v4/match_flags.hpp>
25-
# else // defined(BOOST_REGEX_CXX03)
26-
# include <boost/regex/v5/match_flags.hpp>
27-
# endif // defined(BOOST_REGEX_CXX03)
28-
#else // BOOST_VERSION >= 107600
29-
# include <boost/regex/v4/match_flags.hpp>
30-
#endif // BOOST_VERSION >= 107600
31-
3220
namespace boost {
3321

3422
template <class BidiIterator>
@@ -37,6 +25,9 @@ struct sub_match;
3725
template <class BidiIterator, class Allocator>
3826
class match_results;
3927

28+
template <class CharT, class Traits>
29+
class basic_regex;
30+
4031
} // namespace boost
4132

4233
#endif // defined(BOOST_ASIO_HAS_BOOST_REGEX)

include/boost/asio/impl/read_until.hpp

Lines changed: 50 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -232,10 +232,22 @@ std::size_t read_until(SyncReadStream& s,
232232
#if !defined(BOOST_ASIO_NO_EXTENSIONS)
233233
#if defined(BOOST_ASIO_HAS_BOOST_REGEX)
234234

235-
template <typename SyncReadStream, typename DynamicBuffer_v1>
236-
inline std::size_t read_until(SyncReadStream& s,
237-
DynamicBuffer_v1&& buffers,
238-
const boost::regex& expr,
235+
namespace detail {
236+
237+
struct regex_match_flags
238+
{
239+
template <typename T>
240+
operator T() const
241+
{
242+
return T::match_default | T::match_partial;
243+
}
244+
};
245+
246+
} // namespace detail
247+
248+
template <typename SyncReadStream, typename DynamicBuffer_v1, typename Traits>
249+
inline std::size_t read_until(SyncReadStream& s, DynamicBuffer_v1&& buffers,
250+
const boost::basic_regex<char, Traits>& expr,
239251
constraint_t<
240252
is_dynamic_buffer_v1<decay_t<DynamicBuffer_v1>>::value
241253
>,
@@ -250,10 +262,9 @@ inline std::size_t read_until(SyncReadStream& s,
250262
return bytes_transferred;
251263
}
252264

253-
template <typename SyncReadStream, typename DynamicBuffer_v1>
254-
std::size_t read_until(SyncReadStream& s,
255-
DynamicBuffer_v1&& buffers,
256-
const boost::regex& expr, boost::system::error_code& ec,
265+
template <typename SyncReadStream, typename DynamicBuffer_v1, typename Traits>
266+
std::size_t read_until(SyncReadStream& s, DynamicBuffer_v1&& buffers,
267+
const boost::basic_regex<char, Traits>& expr, boost::system::error_code& ec,
257268
constraint_t<
258269
is_dynamic_buffer_v1<decay_t<DynamicBuffer_v1>>::value
259270
>,
@@ -279,8 +290,8 @@ std::size_t read_until(SyncReadStream& s,
279290
boost::match_results<iterator,
280291
typename std::vector<boost::sub_match<iterator>>::allocator_type>
281292
match_results;
282-
if (regex_search(start_pos, end, match_results, expr,
283-
boost::match_default | boost::match_partial))
293+
if (regex_search(start_pos, end, match_results,
294+
expr, detail::regex_match_flags()))
284295
{
285296
if (match_results[0].matched)
286297
{
@@ -442,16 +453,18 @@ inline std::size_t read_until(SyncReadStream& s,
442453

443454
#if defined(BOOST_ASIO_HAS_BOOST_REGEX)
444455

445-
template <typename SyncReadStream, typename Allocator>
456+
template <typename SyncReadStream, typename Allocator, typename Traits>
446457
inline std::size_t read_until(SyncReadStream& s,
447-
boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr)
458+
boost::asio::basic_streambuf<Allocator>& b,
459+
const boost::basic_regex<char, Traits>& expr)
448460
{
449461
return read_until(s, basic_streambuf_ref<Allocator>(b), expr);
450462
}
451463

452-
template <typename SyncReadStream, typename Allocator>
464+
template <typename SyncReadStream, typename Allocator, typename Traits>
453465
inline std::size_t read_until(SyncReadStream& s,
454-
boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr,
466+
boost::asio::basic_streambuf<Allocator>& b,
467+
const boost::basic_regex<char, Traits>& expr,
455468
boost::system::error_code& ec)
456469
{
457470
return read_until(s, basic_streambuf_ref<Allocator>(b), expr, ec);
@@ -630,9 +643,9 @@ std::size_t read_until(SyncReadStream& s, DynamicBuffer_v2 buffers,
630643
#if !defined(BOOST_ASIO_NO_EXTENSIONS)
631644
#if defined(BOOST_ASIO_HAS_BOOST_REGEX)
632645

633-
template <typename SyncReadStream, typename DynamicBuffer_v2>
634-
inline std::size_t read_until(SyncReadStream& s,
635-
DynamicBuffer_v2 buffers, const boost::regex& expr,
646+
template <typename SyncReadStream, typename DynamicBuffer_v2, typename Traits>
647+
inline std::size_t read_until(SyncReadStream& s, DynamicBuffer_v2 buffers,
648+
const boost::basic_regex<char, Traits>& expr,
636649
constraint_t<
637650
is_dynamic_buffer_v2<DynamicBuffer_v2>::value
638651
>)
@@ -644,9 +657,9 @@ inline std::size_t read_until(SyncReadStream& s,
644657
return bytes_transferred;
645658
}
646659

647-
template <typename SyncReadStream, typename DynamicBuffer_v2>
660+
template <typename SyncReadStream, typename DynamicBuffer_v2, typename Traits>
648661
std::size_t read_until(SyncReadStream& s, DynamicBuffer_v2 buffers,
649-
const boost::regex& expr, boost::system::error_code& ec,
662+
const boost::basic_regex<char, Traits>& expr, boost::system::error_code& ec,
650663
constraint_t<
651664
is_dynamic_buffer_v2<DynamicBuffer_v2>::value
652665
>)
@@ -669,8 +682,8 @@ std::size_t read_until(SyncReadStream& s, DynamicBuffer_v2 buffers,
669682
boost::match_results<iterator,
670683
typename std::vector<boost::sub_match<iterator>>::allocator_type>
671684
match_results;
672-
if (regex_search(start_pos, end, match_results, expr,
673-
boost::match_default | boost::match_partial))
685+
if (regex_search(start_pos, end, match_results,
686+
expr, detail::regex_match_flags()))
674687
{
675688
if (match_results[0].matched)
676689
{
@@ -1304,10 +1317,9 @@ namespace detail
13041317
: public base_from_cancellation_state<ReadHandler>
13051318
{
13061319
public:
1307-
template <typename BufferSequence>
1308-
read_until_expr_op_v1(AsyncReadStream& stream,
1309-
BufferSequence&& buffers,
1310-
const boost::regex& expr, ReadHandler& handler)
1320+
template <typename BufferSequence, typename Traits>
1321+
read_until_expr_op_v1(AsyncReadStream& stream, BufferSequence&& buffers,
1322+
const boost::basic_regex<char, Traits>& expr, ReadHandler& handler)
13111323
: base_from_cancellation_state<ReadHandler>(
13121324
handler, enable_partial_cancellation()),
13131325
stream_(stream),
@@ -1366,8 +1378,8 @@ namespace detail
13661378
boost::match_results<iterator,
13671379
typename std::vector<boost::sub_match<iterator>>::allocator_type>
13681380
match_results;
1369-
bool match = regex_search(start_pos, end, match_results, expr_,
1370-
boost::match_default | boost::match_partial);
1381+
bool match = regex_search(start_pos, end,
1382+
match_results, expr_, regex_match_flags());
13711383
if (match && match_results[0].matched)
13721384
{
13731385
// Full match. We're done.
@@ -1526,11 +1538,11 @@ struct associator<Associator,
15261538

15271539
#endif // !defined(GENERATING_DOCUMENTATION)
15281540

1529-
template <typename AsyncReadStream, typename DynamicBuffer_v1,
1541+
template <typename AsyncReadStream, typename DynamicBuffer_v1, typename Traits,
15301542
BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
15311543
std::size_t)) ReadToken>
15321544
inline auto async_read_until(AsyncReadStream& s, DynamicBuffer_v1&& buffers,
1533-
const boost::regex& expr, ReadToken&& token,
1545+
const boost::basic_regex<char, Traits>& expr, ReadToken&& token,
15341546
constraint_t<
15351547
is_dynamic_buffer_v1<decay_t<DynamicBuffer_v1>>::value
15361548
>,
@@ -1850,12 +1862,12 @@ inline auto async_read_until(AsyncReadStream& s,
18501862

18511863
#if defined(BOOST_ASIO_HAS_BOOST_REGEX)
18521864

1853-
template <typename AsyncReadStream, typename Allocator,
1865+
template <typename AsyncReadStream, typename Allocator, typename Traits,
18541866
BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
18551867
std::size_t)) ReadToken>
18561868
inline auto async_read_until(AsyncReadStream& s,
18571869
boost::asio::basic_streambuf<Allocator>& b,
1858-
const boost::regex& expr, ReadToken&& token)
1870+
const boost::basic_regex<char, Traits>& expr, ReadToken&& token)
18591871
-> decltype(
18601872
async_initiate<ReadToken,
18611873
void (boost::system::error_code, std::size_t)>(
@@ -2408,10 +2420,9 @@ namespace detail
24082420
: public base_from_cancellation_state<ReadHandler>
24092421
{
24102422
public:
2411-
template <typename BufferSequence>
2412-
read_until_expr_op_v2(AsyncReadStream& stream,
2413-
BufferSequence&& buffers,
2414-
const boost::regex& expr, ReadHandler& handler)
2423+
template <typename BufferSequence, typename Traits>
2424+
read_until_expr_op_v2(AsyncReadStream& stream, BufferSequence&& buffers,
2425+
const boost::basic_regex<char, Traits>& expr, ReadHandler& handler)
24152426
: base_from_cancellation_state<ReadHandler>(
24162427
handler, enable_partial_cancellation()),
24172428
stream_(stream),
@@ -2475,8 +2486,8 @@ namespace detail
24752486
boost::match_results<iterator,
24762487
typename std::vector<boost::sub_match<iterator>>::allocator_type>
24772488
match_results;
2478-
bool match = regex_search(start_pos, end, match_results, expr_,
2479-
boost::match_default | boost::match_partial);
2489+
bool match = regex_search(start_pos, end,
2490+
match_results, expr_, regex_match_flags());
24802491
if (match && match_results[0].matched)
24812492
{
24822493
// Full match. We're done.
@@ -2639,11 +2650,11 @@ struct associator<Associator,
26392650

26402651
#endif // !defined(GENERATING_DOCUMENTATION)
26412652

2642-
template <typename AsyncReadStream, typename DynamicBuffer_v2,
2653+
template <typename AsyncReadStream, typename DynamicBuffer_v2, typename Traits,
26432654
BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
26442655
std::size_t)) ReadToken>
26452656
inline auto async_read_until(AsyncReadStream& s, DynamicBuffer_v2 buffers,
2646-
const boost::regex& expr, ReadToken&& token,
2657+
const boost::basic_regex<char, Traits>& expr, ReadToken&& token,
26472658
constraint_t<
26482659
is_dynamic_buffer_v2<DynamicBuffer_v2>::value
26492660
>)

include/boost/asio/read_until.hpp

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -366,10 +366,9 @@ std::size_t read_until(SyncReadStream& s,
366366
* This data may be the start of a new line, to be extracted by a subsequent
367367
* @c read_until operation.
368368
*/
369-
template <typename SyncReadStream, typename DynamicBuffer_v1>
370-
std::size_t read_until(SyncReadStream& s,
371-
DynamicBuffer_v1&& buffers,
372-
const boost::regex& expr,
369+
template <typename SyncReadStream, typename DynamicBuffer_v1, typename Traits>
370+
std::size_t read_until(SyncReadStream& s, DynamicBuffer_v1&& buffers,
371+
const boost::basic_regex<char, Traits>& expr,
373372
constraint_t<
374373
is_dynamic_buffer_v1<decay_t<DynamicBuffer_v1>>::value
375374
> = 0,
@@ -413,10 +412,9 @@ std::size_t read_until(SyncReadStream& s,
413412
* expression. An application will typically leave that data in the dynamic
414413
* buffer sequence for a subsequent read_until operation to examine.
415414
*/
416-
template <typename SyncReadStream, typename DynamicBuffer_v1>
417-
std::size_t read_until(SyncReadStream& s,
418-
DynamicBuffer_v1&& buffers,
419-
const boost::regex& expr, boost::system::error_code& ec,
415+
template <typename SyncReadStream, typename DynamicBuffer_v1, typename Traits>
416+
std::size_t read_until(SyncReadStream& s, DynamicBuffer_v1&& buffers,
417+
const boost::basic_regex<char, Traits>& expr, boost::system::error_code& ec,
420418
constraint_t<
421419
is_dynamic_buffer_v1<decay_t<DynamicBuffer_v1>>::value
422420
> = 0,
@@ -842,9 +840,10 @@ std::size_t read_until(SyncReadStream& s,
842840
* This data may be the start of a new line, to be extracted by a subsequent
843841
* @c read_until operation.
844842
*/
845-
template <typename SyncReadStream, typename Allocator>
843+
template <typename SyncReadStream, typename Allocator, typename Traits>
846844
std::size_t read_until(SyncReadStream& s,
847-
boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr);
845+
boost::asio::basic_streambuf<Allocator>& b,
846+
const boost::basic_regex<char, Traits>& expr);
848847

849848
/// Read data into a streambuf until some part of the data it contains matches
850849
/// a regular expression.
@@ -879,9 +878,10 @@ std::size_t read_until(SyncReadStream& s,
879878
* application will typically leave that data in the streambuf for a subsequent
880879
* read_until operation to examine.
881880
*/
882-
template <typename SyncReadStream, typename Allocator>
881+
template <typename SyncReadStream, typename Allocator, typename Traits>
883882
std::size_t read_until(SyncReadStream& s,
884-
boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr,
883+
boost::asio::basic_streambuf<Allocator>& b,
884+
const boost::basic_regex<char, Traits>& expr,
885885
boost::system::error_code& ec);
886886

887887
#endif // defined(BOOST_ASIO_HAS_BOOST_REGEX)
@@ -1310,9 +1310,9 @@ std::size_t read_until(SyncReadStream& s, DynamicBuffer_v2 buffers,
13101310
* This data may be the start of a new line, to be extracted by a subsequent
13111311
* @c read_until operation.
13121312
*/
1313-
template <typename SyncReadStream, typename DynamicBuffer_v2>
1313+
template <typename SyncReadStream, typename DynamicBuffer_v2, typename Traits>
13141314
std::size_t read_until(SyncReadStream& s, DynamicBuffer_v2 buffers,
1315-
const boost::regex& expr,
1315+
const boost::basic_regex<char, Traits>& expr,
13161316
constraint_t<
13171317
is_dynamic_buffer_v2<DynamicBuffer_v2>::value
13181318
> = 0);
@@ -1353,9 +1353,9 @@ std::size_t read_until(SyncReadStream& s, DynamicBuffer_v2 buffers,
13531353
* expression. An application will typically leave that data in the dynamic
13541354
* buffer sequence for a subsequent read_until operation to examine.
13551355
*/
1356-
template <typename SyncReadStream, typename DynamicBuffer_v2>
1356+
template <typename SyncReadStream, typename DynamicBuffer_v2, typename Traits>
13571357
std::size_t read_until(SyncReadStream& s, DynamicBuffer_v2 buffers,
1358-
const boost::regex& expr, boost::system::error_code& ec,
1358+
const boost::basic_regex<char, Traits>& expr, boost::system::error_code& ec,
13591359
constraint_t<
13601360
is_dynamic_buffer_v2<DynamicBuffer_v2>::value
13611361
> = 0);
@@ -1898,12 +1898,12 @@ auto async_read_until(AsyncReadStream& s,
18981898
* if they are also supported by the @c AsyncReadStream type's
18991899
* @c async_read_some operation.
19001900
*/
1901-
template <typename AsyncReadStream, typename DynamicBuffer_v1,
1901+
template <typename AsyncReadStream, typename DynamicBuffer_v1, typename Traits,
19021902
BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
19031903
std::size_t)) ReadToken = default_completion_token_t<
19041904
typename AsyncReadStream::executor_type>>
1905-
auto async_read_until(AsyncReadStream& s,
1906-
DynamicBuffer_v1&& buffers, const boost::regex& expr,
1905+
auto async_read_until(AsyncReadStream& s, DynamicBuffer_v1&& buffers,
1906+
const boost::basic_regex<char, Traits>& expr,
19071907
ReadToken&& token = default_completion_token_t<
19081908
typename AsyncReadStream::executor_type>(),
19091909
constraint_t<
@@ -2414,12 +2414,13 @@ auto async_read_until(AsyncReadStream& s,
24142414
* if they are also supported by the @c AsyncReadStream type's
24152415
* @c async_read_some operation.
24162416
*/
2417-
template <typename AsyncReadStream, typename Allocator,
2417+
template <typename AsyncReadStream, typename Allocator, typename Traits,
24182418
BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
24192419
std::size_t)) ReadToken = default_completion_token_t<
24202420
typename AsyncReadStream::executor_type>>
24212421
auto async_read_until(AsyncReadStream& s,
2422-
boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr,
2422+
boost::asio::basic_streambuf<Allocator>& b,
2423+
const boost::basic_regex<char, Traits>& expr,
24232424
ReadToken&& token = default_completion_token_t<
24242425
typename AsyncReadStream::executor_type>())
24252426
-> decltype(
@@ -2926,12 +2927,12 @@ auto async_read_until(AsyncReadStream& s, DynamicBuffer_v2 buffers,
29262927
* if they are also supported by the @c AsyncReadStream type's
29272928
* @c async_read_some operation.
29282929
*/
2929-
template <typename AsyncReadStream, typename DynamicBuffer_v2,
2930+
template <typename AsyncReadStream, typename DynamicBuffer_v2, typename Traits,
29302931
BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
29312932
std::size_t)) ReadToken = default_completion_token_t<
29322933
typename AsyncReadStream::executor_type>>
2933-
auto async_read_until(AsyncReadStream& s,
2934-
DynamicBuffer_v2 buffers, const boost::regex& expr,
2934+
auto async_read_until(AsyncReadStream& s, DynamicBuffer_v2 buffers,
2935+
const boost::basic_regex<char, Traits>& expr,
29352936
ReadToken&& token = default_completion_token_t<
29362937
typename AsyncReadStream::executor_type>(),
29372938
constraint_t<

0 commit comments

Comments
 (0)