Change Component setFromEscapedString and setSegment to static makeFromEscapedString and makeSegment, and make the class read-only.
diff --git a/ndn-cpp/name.cpp b/ndn-cpp/name.cpp
index d94eecd..2b5c6a9 100644
--- a/ndn-cpp/name.cpp
+++ b/ndn-cpp/name.cpp
@@ -103,7 +103,7 @@
return result.str();
}
-bool Name::Component::setFromEscapedString(const char *escapedString, unsigned int beginOffset, unsigned int endOffset)
+Blob Name::Component::makeFromEscapedString(const char *escapedString, unsigned int beginOffset, unsigned int endOffset)
{
string trimmedString(escapedString + beginOffset, escapedString + endOffset);
trim(trimmedString);
@@ -113,18 +113,16 @@
// Special case for component of only periods.
if (component.size() <= 2)
// Zero, one or two periods is illegal. Ignore this component.
- return false;
+ return Blob();
else
// Remove 3 periods.
- value_ = Blob((const unsigned char *)&component[3], component.size() - 3);
+ return Blob((const unsigned char *)&component[3], component.size() - 3);
}
else
- value_ = Blob((const unsigned char *)&component[0], component.size());
-
- return true;
+ return Blob((const unsigned char *)&component[0], component.size());
}
-void Name::Component::setSegment(unsigned long segment)
+Blob Name::Component::makeSegment(unsigned long segment)
{
ptr_lib::shared_ptr<vector<unsigned char> > value;
@@ -139,7 +137,7 @@
// Make it big endian.
reverse(value->begin() + 1, value->end());
- value_ = value;
+ return Blob(value);
}
void Name::set(const char *uri_cstr)
@@ -189,10 +187,10 @@
if (iComponentEnd == string::npos)
iComponentEnd = uri.size();
- components_.push_back(Component());
- if (!components_[components_.size() - 1].setFromEscapedString(&uri[0], iComponentStart, iComponentEnd))
- // Ignore the illegal component. This also gets rid of a trailing '/'.
- components_.pop_back();
+ Blob component = Component::makeFromEscapedString(&uri[0], iComponentStart, iComponentEnd);
+ // Ignore illegal components. This also gets rid of a trailing '/'.
+ if (component)
+ components_.push_back(Component(component));
iComponentStart = iComponentEnd + 1;
}