9 #include "url_parser.h"
15 void url_parser::parse(
const string &url_s) {
16 const string prot_end(
"://");
17 string::const_iterator prot_i = search(url_s.begin(), url_s.end(),
18 prot_end.begin(), prot_end.end());
19 protocol_.reserve(distance(url_s.begin(), prot_i));
20 transform(url_s.begin(), prot_i,
21 back_inserter(protocol_),
22 ptr_fun<int, int>(tolower));
23 if (prot_i == url_s.end())
25 advance(prot_i, prot_end.length());
26 string::const_iterator path_i = find(prot_i, url_s.end(),
'/');
27 host_.reserve(distance(prot_i, path_i));
28 transform(prot_i, path_i,
30 ptr_fun<int, int>(tolower));
31 string::const_iterator query_i = find(path_i, url_s.end(),
'?');
32 path_.assign(path_i, query_i);
33 if (query_i != url_s.end())
35 query_.assign(query_i, url_s.end());