X-Git-Url: http://plrg.eecs.uci.edu/git/?p=folly.git;a=blobdiff_plain;f=folly%2FUri.cpp;h=8a4c790a19b933c02635d8b7a49c2686f19cf90c;hp=6d5befb95e3ad511194aa3708ab21d207b9d500e;hb=59cb2ab00419bffb627e89cb096e1288c2f37eeb;hpb=275ca94d04e44f28cfa411668eb1c1dd8db90b80 diff --git a/folly/Uri.cpp b/folly/Uri.cpp index 6d5befb9..8a4c790a 100644 --- a/folly/Uri.cpp +++ b/folly/Uri.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2015 Facebook, Inc. + * Copyright 2013-present Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,28 +16,29 @@ #include -#include +#include + #include namespace folly { namespace { -fbstring submatch(const boost::cmatch& m, size_t idx) { +std::string submatch(const boost::cmatch& m, int idx) { auto& sub = m[idx]; - return fbstring(sub.first, sub.second); + return std::string(sub.first, sub.second); } template void toLower(String& s) { for (auto& c : s) { - c = tolower(c); + c = char(tolower(c)); } } -} // namespace +} // namespace -Uri::Uri(StringPiece str) : port_(0) { +Uri::Uri(StringPiece str) : hasAuthority_(false), port_(0) { static const boost::regex uriRegex( "([a-zA-Z][a-zA-Z0-9+.-]*):" // scheme: "([^?#]*)" // authority and path @@ -60,7 +61,8 @@ Uri::Uri(StringPiece str) : port_(0) { authorityAndPathMatch, authorityAndPathRegex)) { // Does not start with //, doesn't have authority - path_ = authorityAndPath.fbstr(); + hasAuthority_ = false; + path_ = authorityAndPath.str(); } else { static const boost::regex authorityRegex( "(?:([^@:]*)(?::([^@]*))?@)?" // username, password @@ -84,6 +86,7 @@ Uri::Uri(StringPiece str) : port_(0) { port_ = to(port); } + hasAuthority_ = true; username_ = submatch(authorityMatch, 1); password_ = submatch(authorityMatch, 2); host_ = submatch(authorityMatch, 3); @@ -94,8 +97,8 @@ Uri::Uri(StringPiece str) : port_(0) { fragment_ = submatch(match, 4); } -fbstring Uri::authority() const { - fbstring result; +std::string Uri::authority() const { + std::string result; // Port is 5 characters max and we have up to 3 delimiters. result.reserve(host().size() + username().size() + password().size() + 8); @@ -121,7 +124,7 @@ fbstring Uri::authority() const { return result; } -fbstring Uri::hostname() const { +std::string Uri::hostname() const { if (host_.size() > 0 && host_[0] == '[') { // If it starts with '[', then it should end with ']', this is ensured by // regex @@ -130,7 +133,7 @@ fbstring Uri::hostname() const { return host_; } -const std::vector>& Uri::getQueryParams() { +const std::vector>& Uri::getQueryParams() { if (!query_.empty() && queryParams_.empty()) { // Parse query string static const boost::regex queryParamRegex( @@ -148,12 +151,12 @@ const std::vector>& Uri::getQueryParams() { continue; } queryParams_.emplace_back( - fbstring((*itr)[2].first, (*itr)[2].second), // parameter name - fbstring((*itr)[3].first, (*itr)[3].second) // parameter value + std::string((*itr)[2].first, (*itr)[2].second), // parameter name + std::string((*itr)[3].first, (*itr)[3].second) // parameter value ); } } return queryParams_; } -} // namespace folly +} // namespace folly