summaryrefslogtreecommitdiff
path: root/src/ExpatXmlParser.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2012-01-11 02:04:20 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2012-01-11 02:04:20 +0900
commit2997fa0631ef85723b14691b5bca177538c76785 (patch)
tree566e6dad69acad0e81e9905ee69ef9691a9ed68f /src/ExpatXmlParser.cc
parent3b1834e63347f320bfe9df6127f6f017978d122a (diff)
Refactored splitNsName
Diffstat (limited to 'src/ExpatXmlParser.cc')
-rw-r--r--src/ExpatXmlParser.cc26
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()) {