name: Allow negative start index in getSubName method
refs #1962
Change-Id: I2f1b77d95d534d837d925022934f9a6ccaa340d2
diff --git a/src/name.cpp b/src/name.cpp
index c5adb7d..ff698d8 100644
--- a/src/name.cpp
+++ b/src/name.cpp
@@ -188,11 +188,11 @@
}
Name&
-Name::append(const Name& name)
+Name::append(const PartialName& name)
{
if (&name == this)
// Copying from this name, so need to make a copy first.
- return append(Name(name));
+ return append(PartialName(name));
for (size_t i = 0; i < name.size(); ++i)
append(name.at(i));
@@ -270,16 +270,20 @@
return *this;
}
-Name
-Name::getSubName(size_t iStartComponent, size_t nComponents) const
+PartialName
+Name::getSubName(ssize_t iStartComponent, size_t nComponents) const
{
- Name result;
+ PartialName result;
+ ssize_t iStart = iStartComponent < 0 ? this->size() + iStartComponent : iStartComponent;
size_t iEnd = this->size();
- if (nComponents != npos)
- iEnd = std::min(this->size(), iStartComponent + nComponents);
- for (size_t i = iStartComponent; i < iEnd; ++i)
+ iStart = std::max(iStart, static_cast<ssize_t>(0));
+
+ if (nComponents != npos)
+ iEnd = std::min(this->size(), iStart + nComponents);
+
+ for (size_t i = iStart; i < iEnd; ++i)
result.append(at(i));
return result;