diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2012-01-11 02:04:20 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2012-01-11 02:04:20 +0900 |
| commit | 2997fa0631ef85723b14691b5bca177538c76785 (patch) | |
| tree | 566e6dad69acad0e81e9905ee69ef9691a9ed68f /src/ExpatXmlParser.cc | |
| parent | 3b1834e63347f320bfe9df6127f6f017978d122a (diff) | |
Refactored splitNsName
Diffstat (limited to 'src/ExpatXmlParser.cc')
| -rw-r--r-- | src/ExpatXmlParser.cc | 26 |
1 files changed, 10 insertions, 16 deletions
diff --git a/src/ExpatXmlParser.cc b/src/ExpatXmlParser.cc index e18a7d7a..9673fc29 100644 --- a/src/ExpatXmlParser.cc +++ b/src/ExpatXmlParser.cc @@ -61,23 +61,18 @@ struct SessionData { } // namespace namespace { -template<typename InputIterator> -void splitNsName -(const char** localname, - const char** nsUri, - InputIterator first, - InputIterator last) +void splitNsName(const char** localname, const char** nsUri, const char* src) { - InputIterator sep = std::find(first, last, '\t'); - if(sep == last) { - *localname = first; - } else { + const char* sep = strchr(src, '\t'); + if(sep) { *localname = sep+1; - size_t nsUriLen = sep-first; + size_t nsUriLen = sep-src; char* temp = new char[nsUriLen+1]; - memcpy(temp, first, nsUriLen); + memcpy(temp, src, nsUriLen); temp[nsUriLen] = '\0'; *nsUri = temp; + } else { + *localname = src; } } } // namespace @@ -95,8 +90,7 @@ void mlStartElement(void* userData, const char* nsName, const char** attrs) if(*p == 0) { break; } - splitNsName(&xa.localname, &xa.nsUri, - attrNsName, attrNsName+strlen(attrNsName)); + splitNsName(&xa.localname, &xa.nsUri, attrNsName); const char* value = *p++; xa.value = value; xa.valueLength = strlen(value); @@ -106,7 +100,7 @@ void mlStartElement(void* userData, const char* nsName, const char** attrs) const char* localname = 0; const char* prefix = 0; const char* nsUri = 0; - splitNsName(&localname, &nsUri, nsName, nsName+strlen(nsName)); + splitNsName(&localname, &nsUri, nsName); sd->psm_->beginElement(localname, prefix, nsUri, xmlAttrs); delete [] nsUri; for(std::vector<XmlAttr>::iterator i = xmlAttrs.begin(), @@ -125,7 +119,7 @@ void mlEndElement(void* userData, const char* nsName) const char* localname = 0; const char* prefix = 0; const char* nsUri = 0; - splitNsName(&localname, &nsUri, nsName, nsName+strlen(nsName)); + splitNsName(&localname, &nsUri, nsName); SessionData* sd = reinterpret_cast<SessionData*>(userData); std::string characters; if(sd->psm_->needsCharactersBuffering()) { |
