ferencd@0: #include "url_breaker.h" ferencd@0: ferencd@0: #include "log.h" ferencd@0: ferencd@0: #include ferencd@0: #include ferencd@0: ferencd@0: url_breaker::url_breaker(const std::string &components, const std::string &url) ferencd@0: { ferencd@0: std::vector tempcomps; ferencd@0: boost::char_separator sep("/"); ferencd@0: ferencd@0: // gather the mapping ferencd@0: { ferencd@0: boost::tokenizer> tok(components, sep); ferencd@0: ferencd@0: for(boost::tokenizer>::iterator beg=tok.begin(); ; ) ferencd@0: { ferencd@0: tempcomps.push_back(*beg); ferencd@0: ++ beg; ferencd@0: if(beg == tok.end()) ferencd@0: { ferencd@0: break; ferencd@0: } ferencd@0: } ferencd@0: ferencd@0: } ferencd@0: ferencd@0: // gather the varios url components ferencd@0: { ferencd@0: boost::tokenizer> tok(url, sep); ferencd@0: auto vecit = tempcomps.begin(); ferencd@0: for(boost::tokenizer>::iterator beg=tok.begin();; ) ferencd@0: { ferencd@0: comps[*vecit] = *beg; ferencd@0: ++vecit; ferencd@0: ++beg; ferencd@0: ferencd@0: if(vecit == tempcomps.end() && beg == tok.end()) ferencd@0: { ferencd@0: break; ferencd@0: } ferencd@0: ferencd@0: if(vecit == tempcomps.end()) ferencd@0: { ferencd@0: log_err() << "components map" << components << "contains less keys than" << url; ferencd@0: break; ferencd@0: } ferencd@0: ferencd@0: if(beg == tok.end()) ferencd@0: { ferencd@0: log_err() << "components map" << components << "contains more keys than" << url; ferencd@0: break; ferencd@0: } ferencd@0: } ferencd@0: ferencd@0: } ferencd@0: ferencd@0: // debug part ferencd@0: // for(auto iterator = comps.begin(); iterator != comps.end(); ++ iterator) ferencd@0: // { ferencd@0: // debug() << "COMP[" << iterator->first << "] = " << iterator->second; ferencd@0: // } ferencd@0: } ferencd@0: ferencd@0: std::string url_breaker::operator [](const std::string &k) ferencd@0: { ferencd@0: if(comps.count(k)) ferencd@0: { ferencd@0: return comps[k]; ferencd@0: } ferencd@0: log_err() << "components map contains no value for " << k; ferencd@0: return ""; ferencd@0: }