qname.cpp
来自「IBM的解析xml的工具Xerces的源代码」· C++ 代码 · 共 508 行 · 第 1/2 页
CPP
508 行
fRawName[prefixLen] = chColon; XMLString::copyString(&fRawName[prefixLen+1], fLocalPart); } else { return fLocalPart; } } return fRawName;}XMLCh* QName::getRawName(){ // // If there is no buffer, or if there is but we've not faulted in the // value yet, then we have to do that now. // if (!fRawName || !*fRawName) { // // If we have a prefix, then do the prefix:name version. Else, its // just the name. // if (*fPrefix) { // // Calculate the worst case size buffer we will need. We use the // current high water marks of the prefix and name buffers, so it // might be a little wasteful of memory but we don't have to do // string len operations on the two strings. // const unsigned int neededLen = fPrefixBufSz + fLocalPartBufSz + 1; // // If no buffer, or the current one is too small, then allocate one // and get rid of any old one. // if (!fRawName || (neededLen > fRawNameBufSz)) { fMemoryManager->deallocate(fRawName); //delete [] fRawName; // We have to cast off the const'ness to do this ((QName*)this)->fRawNameBufSz = neededLen; ((QName*)this)->fRawName = (XMLCh*) fMemoryManager->allocate ( (neededLen + 1) * sizeof(XMLCh) ); //new XMLCh[neededLen + 1]; // Make sure its initially empty *fRawName = 0; } const unsigned int prefixLen = XMLString::stringLen(fPrefix); XMLString::moveChars(fRawName, fPrefix, prefixLen); fRawName[prefixLen] = chColon; XMLString::copyString(&fRawName[prefixLen+1], fLocalPart); } else { return fLocalPart; } } return fRawName;}// ---------------------------------------------------------------------------// QName: Setter methods// ---------------------------------------------------------------------------void QName::setName(const XMLCh* const prefix , const XMLCh* const localPart , const unsigned int uriId){ setPrefix(prefix); setLocalPart(localPart); // And clean up any QName and leave it undone until/if asked for again if (fRawName) *fRawName = 0; // And finally store the URI id parameter fURIId = uriId;}void QName::setName(const XMLCh* const rawName , const unsigned int uriId){ //set the rawName unsigned int newLen; newLen = XMLString::stringLen(rawName); if (!fRawNameBufSz || (newLen > fRawNameBufSz)) { fMemoryManager->deallocate(fRawName); //delete [] fRawName; fRawNameBufSz = newLen + 8; fRawName = (XMLCh*) fMemoryManager->allocate ( (fRawNameBufSz + 1) * sizeof(XMLCh) ); //new XMLCh[fRawNameBufSz + 1]; } XMLString::moveChars(fRawName, rawName, newLen + 1); //find out the prefix and localPart from the rawName const int colonInd = XMLString::indexOf(rawName, chColon); if (colonInd >= 0) { setNPrefix(rawName, colonInd); } else { // No colon, so we just have a name with no prefix setPrefix(XMLUni::fgZeroLenString); } setNLocalPart(&rawName[colonInd+1], newLen-colonInd-1); // And finally store the URI id parameter fURIId = uriId;}void QName::setPrefix(const XMLCh* prefix){ unsigned int newLen; newLen = XMLString::stringLen(prefix); if (!fPrefixBufSz || (newLen > fPrefixBufSz)) { fMemoryManager->deallocate(fPrefix); //delete [] fPrefix; fPrefixBufSz = newLen + 8; fPrefix = (XMLCh*) fMemoryManager->allocate ( (fPrefixBufSz + 1) * sizeof(XMLCh) ); //new XMLCh[fPrefixBufSz + 1]; } XMLString::moveChars(fPrefix, prefix, newLen + 1);}void QName::setNPrefix(const XMLCh* prefix, const unsigned int newLen){ if (!fPrefixBufSz || (newLen > fPrefixBufSz)) { fMemoryManager->deallocate(fPrefix); //delete [] fPrefix; fPrefixBufSz = newLen + 8; fPrefix = (XMLCh*) fMemoryManager->allocate ( (fPrefixBufSz + 1) * sizeof(XMLCh) ); //new XMLCh[fPrefixBufSz + 1]; } XMLString::moveChars(fPrefix, prefix, newLen); fPrefix[newLen] = chNull;}void QName::setLocalPart(const XMLCh* localPart){ unsigned int newLen; newLen = XMLString::stringLen(localPart); if (!fLocalPartBufSz || (newLen > fLocalPartBufSz)) { fMemoryManager->deallocate(fLocalPart); //delete [] fLocalPart; fLocalPartBufSz = newLen + 8; fLocalPart = (XMLCh*) fMemoryManager->allocate ( (fLocalPartBufSz + 1) * sizeof(XMLCh) ); //new XMLCh[fLocalPartBufSz + 1]; } XMLString::moveChars(fLocalPart, localPart, newLen + 1);}void QName::setNLocalPart(const XMLCh* localPart, const unsigned int newLen){ if (!fLocalPartBufSz || (newLen > fLocalPartBufSz)) { fMemoryManager->deallocate(fLocalPart); //delete [] fLocalPart; fLocalPartBufSz = newLen + 8; fLocalPart = (XMLCh*) fMemoryManager->allocate ( (fLocalPartBufSz + 1) * sizeof(XMLCh) ); //new XMLCh[fLocalPartBufSz + 1]; } XMLString::moveChars(fLocalPart, localPart, newLen); fLocalPart[newLen] = chNull;}void QName::setValues(const QName& qname){ setPrefix(qname.getPrefix()); setLocalPart(qname.getLocalPart()); setURI(qname.getURI());}// -----------------------------------------------------------------------// comparison// -----------------------------------------------------------------------bool QName::operator==(const QName& qname) const{ if (fURIId == 0) // null URI return (XMLString::equals(getRawName(),qname.getRawName())); return ((fURIId == qname.getURI()) && (XMLString::equals(fLocalPart, qname.getLocalPart())));}// ---------------------------------------------------------------------------// QName: Private, helper methods// ---------------------------------------------------------------------------void QName::cleanUp(){ fMemoryManager->deallocate(fLocalPart); //delete [] fLocalPart; fMemoryManager->deallocate(fPrefix); //delete [] fPrefix; fMemoryManager->deallocate(fRawName); //delete [] fRawName; fLocalPart = fPrefix = fRawName = 0;}/*** * Support for Serialization/De-serialization ***/IMPL_XSERIALIZABLE_TOCREATE(QName)void QName::serialize(XSerializeEngine& serEng){ if (serEng.isStoring()) { serEng.writeString(fPrefix, fPrefixBufSz, XSerializeEngine::toWriteBufferLen); serEng.writeString(fLocalPart, fLocalPartBufSz, XSerializeEngine::toWriteBufferLen); //do not serialize rawName serEng<<fURIId; } else { int dataLen = 0; serEng.readString(fPrefix, (int&)fPrefixBufSz, dataLen, XSerializeEngine::toReadBufferLen); serEng.readString(fLocalPart, (int&)fLocalPartBufSz, dataLen, XSerializeEngine::toReadBufferLen); //force raw name rebuilt fRawNameBufSz = 0; fRawName = 0; serEng>>fURIId; }}XERCES_CPP_NAMESPACE_END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?