| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /** |
| * $Id: XMLAttr.cpp 568078 2007-08-21 11:43:25Z amassari $ |
| */ |
| |
| |
| // --------------------------------------------------------------------------- |
| // Includes |
| // --------------------------------------------------------------------------- |
| #include <xercesc/framework/XMLAttr.hpp> |
| #include <xercesc/framework/MemoryManager.hpp> |
| #include <xercesc/util/OutOfMemoryException.hpp> |
| |
| XERCES_CPP_NAMESPACE_BEGIN |
| |
| // --------------------------------------------------------------------------- |
| // XMLAttr: Constructors and Destructor |
| // --------------------------------------------------------------------------- |
| XMLAttr::XMLAttr(MemoryManager* const manager) : |
| |
| fSpecified(false) |
| , fType(XMLAttDef::CData) |
| , fValueBufSz(0) |
| , fValue(0) |
| , fAttName(0) |
| , fMemoryManager(manager) |
| , fDatatypeValidator(0) |
| , fIsSchemaValidated(false) |
| { |
| fAttName = new (fMemoryManager) QName(fMemoryManager); |
| } |
| |
| typedef JanitorMemFunCall<XMLAttr> CleanupType; |
| |
| XMLAttr::XMLAttr( const unsigned int uriId |
| , const XMLCh* const attrName |
| , const XMLCh* const attrPrefix |
| , const XMLCh* const attrValue |
| , const XMLAttDef::AttTypes type |
| , const bool specified |
| , MemoryManager* const manager |
| , DatatypeValidator * datatypeValidator |
| , const bool isSchema ): |
| |
| fSpecified(specified) |
| , fType(type) |
| , fValueBufSz(0) |
| , fValue(0) |
| , fAttName(0) |
| , fMemoryManager(manager) |
| , fDatatypeValidator(datatypeValidator) |
| , fIsSchemaValidated(isSchema) |
| { |
| CleanupType cleanup(this, &XMLAttr::cleanUp); |
| |
| try |
| { |
| // |
| // Just call the local setters to set up everything. Too much |
| // work is required to replicate that functionality here. |
| // |
| fAttName = new (fMemoryManager) QName(attrPrefix, attrName, uriId, fMemoryManager); |
| setValue(attrValue); |
| } |
| catch(const OutOfMemoryException&) |
| { |
| cleanup.release(); |
| |
| throw; |
| } |
| |
| cleanup.release(); |
| } |
| |
| XMLAttr::XMLAttr( const unsigned int uriId |
| , const XMLCh* const rawName |
| , const XMLCh* const attrValue |
| , const XMLAttDef::AttTypes type |
| , const bool specified |
| , MemoryManager* const manager |
| , DatatypeValidator * datatypeValidator |
| , const bool isSchema ): |
| |
| fSpecified(specified) |
| , fType(type) |
| , fValueBufSz(0) |
| , fValue(0) |
| , fAttName(0) |
| , fMemoryManager(manager) |
| , fDatatypeValidator(datatypeValidator) |
| , fIsSchemaValidated(isSchema) |
| { |
| CleanupType cleanup(this, &XMLAttr::cleanUp); |
| |
| try |
| { |
| // Just call the local setters to set up everything. Too much |
| // work is required to replicate that functionality here. |
| fAttName = new (fMemoryManager) QName(rawName, uriId, fMemoryManager); |
| setValue(attrValue); |
| } |
| catch(const OutOfMemoryException&) |
| { |
| cleanup.release(); |
| |
| throw; |
| } |
| |
| cleanup.release(); |
| } |
| |
| |
| // --------------------------------------------------------------------------- |
| // XMLAttr: Getter methods |
| // --------------------------------------------------------------------------- |
| const XMLCh* XMLAttr::getQName() const |
| { |
| return fAttName->getRawName(); |
| } |
| |
| |
| // --------------------------------------------------------------------------- |
| // XMLAttr: Setter methods |
| // --------------------------------------------------------------------------- |
| void XMLAttr::setName( const unsigned int uriId |
| , const XMLCh* const attrName |
| , const XMLCh* const attrPrefix) |
| { |
| fAttName->setName(attrPrefix, attrName, uriId); |
| } |
| |
| |
| void XMLAttr::setURIId(const unsigned int uriId) |
| { |
| fAttName->setURI(uriId); |
| } |
| |
| |
| void XMLAttr::setValue(const XMLCh* const newValue) |
| { |
| const unsigned int newLen = XMLString::stringLen(newValue); |
| if (!fValueBufSz || (newLen > fValueBufSz)) |
| { |
| fMemoryManager->deallocate(fValue); //delete [] fValue; |
| fValue = 0; |
| fValueBufSz = newLen + 8; |
| fValue = (XMLCh*) fMemoryManager->allocate((fValueBufSz+1) * sizeof(XMLCh)); //new XMLCh[fValueBufSz + 1]; |
| } |
| XMLString::moveChars(fValue, newValue, newLen + 1); |
| } |
| |
| |
| // --------------------------------------------------------------------------- |
| // XMLAttr: Private, helper methods |
| // --------------------------------------------------------------------------- |
| void XMLAttr::cleanUp() |
| { |
| delete fAttName; |
| fMemoryManager->deallocate(fValue); //delete [] fValue; |
| } |
| |
| XERCES_CPP_NAMESPACE_END |
| |