@@ -36,25 +36,42 @@ Url& Url::operator = (const char *url) {
3636 throw ParseException (" Invalid protocol in url. Must be 'http[s]://'" );
3737 }
3838
39- host_ = boost::string_ref (protocol_name_.end ());
40- const auto port_start = host_.find (' :' );
41- if (port_start != host_.npos ) {
42- if (host_.length () <= static_cast <decltype (host_.length ())>(port_start + 2 )) {
39+ auto remains = boost::string_ref (protocol_name_.end ());
40+ const auto args_start = remains.find (' ?' );
41+ if (args_start != remains.npos ) {
42+ args_ = {remains.begin () + args_start + 1 ,
43+ remains.size () - (args_start + 1 )};
44+ remains = {remains.begin (), args_start};
45+ }
46+ const auto port_start = remains.find (' :' );
47+ if (port_start != remains.npos ) {
48+ if (remains.length () <= static_cast <decltype (host_.length ())>(port_start + 2 )) {
4349 throw ParseException (" Invalid host (no port after column)" );
4450 }
45- port_ = boost::string_ref (&host_[port_start+1 ]);
46- host_ = boost::string_ref (host_.data (), port_start);
51+ // port_ = boost::string_ref(&remains[port_start+1]);
52+ // host_ = boost::string_ref(host_.data(), port_start);
53+ host_ = {remains.begin (), port_start};
54+ remains = {remains.begin () + port_start + 1 , remains.size () - (port_start + 1 )};
4755
48- const auto path_start = port_ .find (' /' );
56+ const auto path_start = remains .find (' /' );
4957 if (path_start != port_.npos ) {
50- path_ = &port_[path_start];
51- port_ = boost::string_ref (port_.data (), path_start);
58+ path_ = {remains.begin () + path_start, remains.size () - path_start};// &port_[path_start];
59+ port_ = {remains.begin (), path_start};
60+ remains = {};
61+ } else {
62+ port_ = remains;
5263 }
5364 } else {
54- const auto path_start = host_ .find (' /' );
65+ const auto path_start = remains .find (' /' );
5566 if (path_start != host_.npos ) {
56- path_ = &host_[path_start];
57- host_ = boost::string_ref (host_.data (), path_start);
67+ // path_ = &host_[path_start];
68+ // host_ = boost::string_ref(host_.data(), path_start);
69+
70+ host_ = {remains.begin (), path_start};
71+ path_ = {remains.begin () + host_.size (), remains.size () - host_.size ()};
72+ remains = {};
73+ } else {
74+ host_ = remains;
5875 }
5976 }
6077
0 commit comments