Refactored splitNsName

pull/9/head
Tatsuhiro Tsujikawa 2012-01-11 02:04:20 +09:00
parent 3b1834e633
commit 2997fa0631
1 changed files with 10 additions and 16 deletions

View File

@ -61,23 +61,18 @@ struct SessionData {
} // namespace } // namespace
namespace { namespace {
template<typename InputIterator> void splitNsName(const char** localname, const char** nsUri, const char* src)
void splitNsName
(const char** localname,
const char** nsUri,
InputIterator first,
InputIterator last)
{ {
InputIterator sep = std::find(first, last, '\t'); const char* sep = strchr(src, '\t');
if(sep == last) { if(sep) {
*localname = first;
} else {
*localname = sep+1; *localname = sep+1;
size_t nsUriLen = sep-first; size_t nsUriLen = sep-src;
char* temp = new char[nsUriLen+1]; char* temp = new char[nsUriLen+1];
memcpy(temp, first, nsUriLen); memcpy(temp, src, nsUriLen);
temp[nsUriLen] = '\0'; temp[nsUriLen] = '\0';
*nsUri = temp; *nsUri = temp;
} else {
*localname = src;
} }
} }
} // namespace } // namespace
@ -95,8 +90,7 @@ void mlStartElement(void* userData, const char* nsName, const char** attrs)
if(*p == 0) { if(*p == 0) {
break; break;
} }
splitNsName(&xa.localname, &xa.nsUri, splitNsName(&xa.localname, &xa.nsUri, attrNsName);
attrNsName, attrNsName+strlen(attrNsName));
const char* value = *p++; const char* value = *p++;
xa.value = value; xa.value = value;
xa.valueLength = strlen(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* localname = 0;
const char* prefix = 0; const char* prefix = 0;
const char* nsUri = 0; const char* nsUri = 0;
splitNsName(&localname, &nsUri, nsName, nsName+strlen(nsName)); splitNsName(&localname, &nsUri, nsName);
sd->psm_->beginElement(localname, prefix, nsUri, xmlAttrs); sd->psm_->beginElement(localname, prefix, nsUri, xmlAttrs);
delete [] nsUri; delete [] nsUri;
for(std::vector<XmlAttr>::iterator i = xmlAttrs.begin(), 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* localname = 0;
const char* prefix = 0; const char* prefix = 0;
const char* nsUri = 0; const char* nsUri = 0;
splitNsName(&localname, &nsUri, nsName, nsName+strlen(nsName)); splitNsName(&localname, &nsUri, nsName);
SessionData* sd = reinterpret_cast<SessionData*>(userData); SessionData* sd = reinterpret_cast<SessionData*>(userData);
std::string characters; std::string characters;
if(sd->psm_->needsCharactersBuffering()) { if(sd->psm_->needsCharactersBuffering()) {