From 2997fa0631ef85723b14691b5bca177538c76785 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Wed, 11 Jan 2012 02:04:20 +0900 Subject: [PATCH] Refactored splitNsName --- src/ExpatXmlParser.cc | 26 ++++++++++---------------- 1 file 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 -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::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(userData); std::string characters; if(sd->psm_->needsCharactersBuffering()) {