source: icXML/icXML-devel/src/xercesc/validators/schema/SchemaAttDef.cpp @ 2734

Last change on this file since 2734 was 2722, checked in by cameron, 7 years ago

Original Xerces files with import mods for icxercesc

File size: 5.8 KB
Line 
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements.  See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License.  You may obtain a copy of the License at
8 *
9 *      http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18/*
19 * $Id: SchemaAttDef.cpp 679359 2008-07-24 11:15:19Z borisk $
20 */
21
22
23// ---------------------------------------------------------------------------
24//  Includes
25// ---------------------------------------------------------------------------
26#include <icxercesc/framework/XMLElementDecl.hpp>
27#include <xercesc/validators/schema/SchemaAttDef.hpp>
28
29#include <xercesc/internal/XTemplateSerializer.hpp>
30
31XERCES_CPP_NAMESPACE_BEGIN
32
33// ---------------------------------------------------------------------------
34//  SchemaAttDef: Implementation of the XMLAttDef interface
35// ---------------------------------------------------------------------------
36const XMLCh* SchemaAttDef::getFullName() const
37{
38   return fAttName->getRawName();
39}
40
41// ---------------------------------------------------------------------------
42//  SchemaAttDef: Constructors and Destructor
43// ---------------------------------------------------------------------------
44SchemaAttDef::SchemaAttDef(MemoryManager* const manager) :
45    XMLAttDef(XMLAttDef::CData, XMLAttDef::Implied, manager)
46    , fElemId(XMLElementDecl::fgInvalidElemId)
47    , fPSVIScope(PSVIDefs::SCP_ABSENT)
48    , fAttName(0)
49    , fDatatypeValidator(0)
50    , fNamespaceList(0)
51    , fBaseAttDecl(0)
52{
53}
54
55SchemaAttDef::SchemaAttDef( const XMLCh* const           prefix
56                          , const XMLCh* const           localPart
57                          , const int                    uriId
58                          , const XMLAttDef::AttTypes    type
59                          , const XMLAttDef::DefAttTypes defType
60                          , MemoryManager* const         manager) :
61    XMLAttDef(type, defType, manager)
62    , fElemId(XMLElementDecl::fgInvalidElemId)
63    , fPSVIScope(PSVIDefs::SCP_ABSENT)
64    , fDatatypeValidator(0)
65    , fNamespaceList(0)
66    , fBaseAttDecl(0)
67{
68    fAttName = new (manager) QName(prefix, localPart, uriId, manager);
69}
70
71SchemaAttDef::SchemaAttDef( const XMLCh* const           prefix
72                          , const XMLCh* const           localPart
73                          , const int                    uriId
74                          , const XMLCh* const           attValue
75                          , const XMLAttDef::AttTypes    type
76                          , const XMLAttDef::DefAttTypes defType
77                          , const XMLCh* const           enumValues
78                          , MemoryManager* const         manager) :
79
80    XMLAttDef(attValue, type, defType, enumValues, manager)
81    , fElemId(XMLElementDecl::fgInvalidElemId)
82    , fPSVIScope(PSVIDefs::SCP_ABSENT)
83    , fDatatypeValidator(0)
84    , fNamespaceList(0)
85    , fBaseAttDecl(0)
86{
87    fAttName = new (manager) QName(prefix, localPart, uriId, manager);
88}
89
90SchemaAttDef::SchemaAttDef(const SchemaAttDef* other) :
91
92    XMLAttDef(other->getValue(), other->getType(),
93              other->getDefaultType(), other->getEnumeration(),
94              other->getMemoryManager())
95    , fElemId(XMLElementDecl::fgInvalidElemId)
96    , fPSVIScope(other->fPSVIScope)
97    , fAttName(0)
98    , fDatatypeValidator(other->fDatatypeValidator)
99    , fNamespaceList(0)
100    , fBaseAttDecl(other->fBaseAttDecl)
101{
102    QName* otherName = other->getAttName();
103    fAttName = new (getMemoryManager()) QName(otherName->getPrefix(),
104                         otherName->getLocalPart(), otherName->getURI(),
105                         getMemoryManager());
106
107    if (other->fNamespaceList && other->fNamespaceList->size()) {
108        fNamespaceList = new (getMemoryManager()) ValueVectorOf<unsigned int>(*(other->fNamespaceList));
109    }
110}
111
112SchemaAttDef::~SchemaAttDef()
113{
114   delete fAttName;
115   delete fNamespaceList;
116}
117
118
119// ---------------------------------------------------------------------------
120//  SchemaAttDef: Setter methods
121// ---------------------------------------------------------------------------
122void SchemaAttDef::setAttName(const XMLCh* const        prefix
123                            , const XMLCh* const        localPart
124                            , const int                 uriId )
125{
126   fAttName->setName(prefix, localPart, uriId);
127}
128
129/***
130 * Support for Serialization/De-serialization
131 ***/
132
133IMPL_XSERIALIZABLE_TOCREATE(SchemaAttDef)
134
135void SchemaAttDef::serialize(XSerializeEngine& serEng)
136{
137
138    XMLAttDef::serialize(serEng);
139
140    if (serEng.isStoring())
141    {
142        serEng.writeSize (fElemId);
143        serEng<<(int)fPSVIScope;
144
145        serEng<<fAttName;
146
147        DatatypeValidator::storeDV(serEng, fDatatypeValidator);
148
149        /***
150         * Serialize ValueVectorOf<unsigned int>
151         ***/
152        XTemplateSerializer::storeObject(fNamespaceList, serEng);
153
154        serEng<<fBaseAttDecl;
155    }
156    else
157    {
158
159        serEng.readSize (fElemId);
160        int i;
161        serEng>>i;
162        fPSVIScope = (PSVIDefs::PSVIScope)i;
163
164        serEng>>fAttName;
165
166        fDatatypeValidator    = DatatypeValidator::loadDV(serEng);
167
168        /***
169         * Deserialize ValueVectorOf<unsigned int>
170         ***/
171        XTemplateSerializer::loadObject(&fNamespaceList, 8, false, serEng);
172
173        serEng>>fBaseAttDecl;
174    }
175}
176
177
178XERCES_CPP_NAMESPACE_END
Note: See TracBrowser for help on using the repository browser.