Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitadac71b

Browse files
committed
Incremental Changes to Boilerplate in Incremental Request Parser
This just fixes the internal logic used to drive the internalimplementation.
1 parentc0a29e3 commitadac71b

File tree

2 files changed

+41
-11
lines changed

2 files changed

+41
-11
lines changed

‎boost/network/protocol/http/server/request_parser.hpp‎

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,27 +37,44 @@ namespace boost { namespace network { namespace http {
3737
, headers_done
3838
};
3939

40+
explicitrequest_parser(state_t start_state = method_start)
41+
: internal_state(start_state)
42+
{}
43+
44+
voidreset(state_t start_state = method_start) {
45+
internal_state = method_start;
46+
}
47+
48+
state_tstate()const {return internal_state; }
49+
4050
template<classRange>
41-
fusion::tuple<logic::tribool, Range>
42-
parse_until(state_tstate, Rangeconst & range) {
51+
fusion::tuple<logic::tribool,iterator_range<typenameRange::const_iterator>>
52+
parse_until(state_tstop_state, Range & range) {
4353
logic::tribool parsed_ok;
4454
typedeftypename range_iterator<Range>::type iterator;
4555
iterator start =boost::begin(range)
4656
, end =boost::end(range)
4757
, current_iterator = start;
48-
49-
while (!boost::empty(range) || state != internal_state) {
58+
iterator_range<iterator> local_range =
59+
boost::make_iterator_range(start, end);
60+
while (
61+
!boost::empty(local_range)
62+
&& stop_state != internal_state
63+
&& parsed_ok == logic::indeterminate
64+
) {
5065
switch(internal_state) {
5166
default:
5267
parsed_ok =false;
53-
returnfusion::make_tuple(
54-
parsed_ok,
55-
boost::make_iterator_range(
56-
start, current_iterator
57-
)
58-
);
5968
};
69+
local_range =boost::make_iterator_range(
70+
++current_iterator, end);
6071
}
72+
returnfusion::make_tuple(
73+
parsed_ok,
74+
boost::make_iterator_range(
75+
start, current_iterator
76+
)
77+
);
6178
}
6279

6380
private:

‎libs/network/test/http_incremental_request_parser.cpp‎

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,17 @@ BOOST_AUTO_TEST_CASE(incremental_parser_constructor) {
3333
request_parser<tags::default_string> p;// default constructible
3434
}
3535

36-
36+
BOOST_AUTO_TEST_CASE(incremental_parser_parse_http_method) {
37+
request_parser<tags::default_string> p;
38+
logic::tribool parsed_ok =false;
39+
typedef request_parser<tags::default_string> request_parser_type;
40+
typedef boost::iterator_range<std::string::const_iterator> range_type;
41+
range_type result_range;
42+
43+
std::string valid_http_method ="GET";
44+
fusion::tie(parsed_ok, result_range) = p.parse_until(
45+
request_parser_type::method_done
46+
, valid_http_method);
47+
BOOST_CHECK_EQUAL(parsed_ok,true);
48+
BOOST_CHECK(!boost::empty(result_range));
49+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp