Use "std::map" instead of "propertySet" in url class.

This commit is contained in:
Vincent Richard 2013-11-15 21:46:03 +01:00
parent 5915ca4e34
commit e760842265
3 changed files with 28 additions and 28 deletions

View File

@ -130,26 +130,23 @@ const string url::build() const
oss << urlUtils::encode(m_path);
}
const std::vector <ref <const propertySet::property> > params
= m_params.getPropertyList();
if (!params.empty())
if (!m_params.empty())
{
if (m_path.empty())
oss << "/";
oss << "?";
for (unsigned int i = 0 ; i < params.size() ; ++i)
for (std::map <string, string>::const_iterator it = m_params.begin() ;
it != m_params.end() ; ++it)
{
const ref <const propertySet::property> prop = params[i];
if (i != 0)
if (it != m_params.begin())
oss << "&";
oss << urlUtils::encode(prop->getName());
oss << urlUtils::encode((*it).first);
oss << "=";
oss << urlUtils::encode(prop->getValue <string>());
oss << urlUtils::encode((*it).second);
}
}
@ -267,7 +264,7 @@ void url::parse(const string& str)
portNum = UNSPECIFIED_PORT;
// Extract parameters
m_params.removeAllProperties();
m_params.clear();
if (!params.empty())
{
@ -300,7 +297,7 @@ void url::parse(const string& str)
name = urlUtils::decode(name);
value = urlUtils::decode(value);
m_params.setProperty(name, value);
m_params[name] = value;
if (pos != string::npos)
++pos;
@ -393,13 +390,13 @@ void url::setPath(const string& path)
}
const propertySet& url::getParams() const
const std::map <string, string>& url::getParams() const
{
return (m_params);
}
propertySet& url::getParams()
std::map <string, string>& url::getParams()
{
return (m_params);
}

View File

@ -164,29 +164,29 @@ VMIME_TEST_SUITE_BEGIN(urlTest)
vmime::utility::url u1("", "");
VASSERT_EQ("1.1", true, parseHelper(u1, "proto://host/path?p1=v1&p2=v2"));
VASSERT_EQ("1.2", "v1", u1.getParams().getProperty <vmime::string>("p1"));
VASSERT_EQ("1.3", "v2", u1.getParams().getProperty <vmime::string>("p2"));
VASSERT_EQ("1.2", "v1", u1.getParams()["p1"]);
VASSERT_EQ("1.3", "v2", u1.getParams()["p2"]);
VASSERT_EQ("1.4", "/path", u1.getPath());
vmime::utility::url u2("", "");
VASSERT_EQ("2.1", true, parseHelper(u2, "proto://host/path?p1=v1&p2"));
VASSERT_EQ("2.2", "v1", u2.getParams().getProperty <vmime::string>("p1"));
VASSERT_EQ("2.3", "p2", u2.getParams().getProperty <vmime::string>("p2"));
VASSERT_EQ("2.2", "v1", u2.getParams()["p1"]);
VASSERT_EQ("2.3", "p2", u2.getParams()["p2"]);
VASSERT_EQ("2.4", "/path", u2.getPath());
vmime::utility::url u3("", "");
VASSERT_EQ("3.1", true, parseHelper(u3, "proto://host/?p1=v1&p2=v2"));
VASSERT_EQ("3.2", "v1", u3.getParams().getProperty <vmime::string>("p1"));
VASSERT_EQ("3.3", "v2", u3.getParams().getProperty <vmime::string>("p2"));
VASSERT_EQ("3.2", "v1", u3.getParams()["p1"]);
VASSERT_EQ("3.3", "v2", u3.getParams()["p2"]);
VASSERT_EQ("3.4", "", u3.getPath());
vmime::utility::url u4("", "");
VASSERT_EQ("4.1", true, parseHelper(u4, "proto://host/path?p1=%3D&%3D=v2"));
VASSERT_EQ("4.2", "=", u4.getParams().getProperty <vmime::string>("p1"));
VASSERT_EQ("4.3", "v2", u4.getParams().getProperty <vmime::string>("="));
VASSERT_EQ("4.2", "=", u4.getParams()["p1"]);
VASSERT_EQ("4.3", "v2", u4.getParams()["="]);
VASSERT_EQ("4.4", "/path", u4.getPath());
}
@ -211,14 +211,17 @@ VMIME_TEST_SUITE_BEGIN(urlTest)
VASSERT_EQ("2", "proto://host", static_cast <vmime::string>(u2));
vmime::utility::url u3("proto", "host");
u3.getParams().setProperty("p1", "v1");
u3.getParams()["p1"] = "v1";
VASSERT_EQ("3.1", "proto://host/?p1=v1",
static_cast <vmime::string>(u3));
u3.getParams().setProperty("p2", "v2");
u3.getParams()["p2"] = "v2";
VASSERT_EQ("3.2", "proto://host/?p1=v1&p2=v2",
static_cast <vmime::string>(u3));
u3.getParams().setProperty("&", "=");
VASSERT_EQ("3.3", "proto://host/?p1=v1&p2=v2&%26=%3D",
// Test special characters
u3.getParams().clear();
u3.getParams()["&"] = "=";
VASSERT_EQ("3.3", "proto://host/?%26=%3D",
static_cast <vmime::string>(u3));
}

View File

@ -162,13 +162,13 @@ public:
*
* @return parameters
*/
const propertySet& getParams() const;
const std::map <string, string>& getParams() const;
/** Return the parameters of the URL.
*
* @return parameters
*/
propertySet& getParams();
std::map <string, string>& getParams();
/** Build a string URL from this object.
*/
@ -196,7 +196,7 @@ private:
string m_path;
propertySet m_params;
std::map <string, string> m_params;
};