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 {
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()) {