1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_rsc.hxx"
26*b1cdbd2cSJim Jagielski /****************** I N C L U D E S **************************************/
27*b1cdbd2cSJim Jagielski
28*b1cdbd2cSJim Jagielski // C and C++ Includes.
29*b1cdbd2cSJim Jagielski
30*b1cdbd2cSJim Jagielski // Solar Definitionen
31*b1cdbd2cSJim Jagielski #include <tools/solar.h>
32*b1cdbd2cSJim Jagielski
33*b1cdbd2cSJim Jagielski // Programmabhaengige Includes.
34*b1cdbd2cSJim Jagielski #include <rscclobj.hxx>
35*b1cdbd2cSJim Jagielski #include <rsctop.hxx>
36*b1cdbd2cSJim Jagielski
37*b1cdbd2cSJim Jagielski /****************** C O D E **********************************************/
38*b1cdbd2cSJim Jagielski
39*b1cdbd2cSJim Jagielski /****************** R e f N o d e ****************************************/
40*b1cdbd2cSJim Jagielski /*************************************************************************
41*b1cdbd2cSJim Jagielski |*
42*b1cdbd2cSJim Jagielski |* RefNode::RefNode()
43*b1cdbd2cSJim Jagielski |*
44*b1cdbd2cSJim Jagielski |* Beschreibung
45*b1cdbd2cSJim Jagielski |* Ersterstellung MM 03.05.91
46*b1cdbd2cSJim Jagielski |* Letzte Aenderung MM 03.05.91
47*b1cdbd2cSJim Jagielski |*
48*b1cdbd2cSJim Jagielski *************************************************************************/
RefNode(Atom nTyp)49*b1cdbd2cSJim Jagielski RefNode::RefNode( Atom nTyp ){
50*b1cdbd2cSJim Jagielski pObjBiTree = 0;
51*b1cdbd2cSJim Jagielski nTypNameId = nTyp;
52*b1cdbd2cSJim Jagielski }
53*b1cdbd2cSJim Jagielski
54*b1cdbd2cSJim Jagielski /*************************************************************************
55*b1cdbd2cSJim Jagielski |*
56*b1cdbd2cSJim Jagielski |* RefNode::GetId()
57*b1cdbd2cSJim Jagielski |*
58*b1cdbd2cSJim Jagielski |* Beschreibung
59*b1cdbd2cSJim Jagielski |* Ersterstellung MM 29.10.91
60*b1cdbd2cSJim Jagielski |* Letzte Aenderung MM 29.10.91
61*b1cdbd2cSJim Jagielski |*
62*b1cdbd2cSJim Jagielski *************************************************************************/
GetId() const63*b1cdbd2cSJim Jagielski sal_uInt32 RefNode::GetId() const
64*b1cdbd2cSJim Jagielski {
65*b1cdbd2cSJim Jagielski return( nTypNameId );
66*b1cdbd2cSJim Jagielski }
67*b1cdbd2cSJim Jagielski
68*b1cdbd2cSJim Jagielski /*************************************************************************
69*b1cdbd2cSJim Jagielski |*
70*b1cdbd2cSJim Jagielski |* RefNode::PutObjNode()
71*b1cdbd2cSJim Jagielski |*
72*b1cdbd2cSJim Jagielski |* Beschreibung NAME.DOC
73*b1cdbd2cSJim Jagielski |* Ersterstellung MM 21.03.90
74*b1cdbd2cSJim Jagielski |* Letzte Aenderung MM 27.06.90
75*b1cdbd2cSJim Jagielski |*
76*b1cdbd2cSJim Jagielski *************************************************************************/
PutObjNode(ObjNode * pPutObject)77*b1cdbd2cSJim Jagielski sal_Bool RefNode::PutObjNode( ObjNode * pPutObject ){
78*b1cdbd2cSJim Jagielski // insert a node in the b-tree pObjBiTree
79*b1cdbd2cSJim Jagielski // if the node with the same name is in pObjBiTree,
80*b1cdbd2cSJim Jagielski // return sal_False and no insert,
81*b1cdbd2cSJim Jagielski
82*b1cdbd2cSJim Jagielski if( pObjBiTree )
83*b1cdbd2cSJim Jagielski return( pObjBiTree->Insert( pPutObject ) );
84*b1cdbd2cSJim Jagielski
85*b1cdbd2cSJim Jagielski pObjBiTree = pPutObject;
86*b1cdbd2cSJim Jagielski return( sal_True );
87*b1cdbd2cSJim Jagielski }
88*b1cdbd2cSJim Jagielski
89*b1cdbd2cSJim Jagielski /****************** O b j N o d e ****************************************/
90*b1cdbd2cSJim Jagielski /*************************************************************************
91*b1cdbd2cSJim Jagielski |*
92*b1cdbd2cSJim Jagielski |* RefNode::GetObjNode()
93*b1cdbd2cSJim Jagielski |*
94*b1cdbd2cSJim Jagielski |* Beschreibung NAME.DOC
95*b1cdbd2cSJim Jagielski |* Ersterstellung MM 21.03.90
96*b1cdbd2cSJim Jagielski |* Letzte Aenderung MM 27.06.90
97*b1cdbd2cSJim Jagielski |*
98*b1cdbd2cSJim Jagielski *************************************************************************/
GetObjNode(const RscId & rRscId)99*b1cdbd2cSJim Jagielski ObjNode * RefNode :: GetObjNode( const RscId & rRscId ){
100*b1cdbd2cSJim Jagielski // insert a node in the b-tree pObjBiTree
101*b1cdbd2cSJim Jagielski // if the node with the same name is in pObjBiTree,
102*b1cdbd2cSJim Jagielski // return NULL and no insert,
103*b1cdbd2cSJim Jagielski // if not return the pointer to the Object
104*b1cdbd2cSJim Jagielski
105*b1cdbd2cSJim Jagielski if( pObjBiTree )
106*b1cdbd2cSJim Jagielski return( pObjBiTree->Search( rRscId ) );
107*b1cdbd2cSJim Jagielski return( NULL );
108*b1cdbd2cSJim Jagielski }
109*b1cdbd2cSJim Jagielski
110*b1cdbd2cSJim Jagielski /*************************************************************************
111*b1cdbd2cSJim Jagielski |*
112*b1cdbd2cSJim Jagielski |* ObjNode::ObjNode()
113*b1cdbd2cSJim Jagielski |*
114*b1cdbd2cSJim Jagielski |* Beschreibung
115*b1cdbd2cSJim Jagielski |* Ersterstellung MM 15.05.91
116*b1cdbd2cSJim Jagielski |* Letzte Aenderung MM 15.05.91
117*b1cdbd2cSJim Jagielski |*
118*b1cdbd2cSJim Jagielski *************************************************************************/
ObjNode(const RscId & rId,CLASS_DATA pData,sal_uLong lKey)119*b1cdbd2cSJim Jagielski ObjNode::ObjNode( const RscId & rId, CLASS_DATA pData, sal_uLong lKey ){
120*b1cdbd2cSJim Jagielski pRscObj = pData;
121*b1cdbd2cSJim Jagielski aRscId = rId;
122*b1cdbd2cSJim Jagielski lFileKey = lKey;
123*b1cdbd2cSJim Jagielski }
124*b1cdbd2cSJim Jagielski
125*b1cdbd2cSJim Jagielski /*************************************************************************
126*b1cdbd2cSJim Jagielski |*
127*b1cdbd2cSJim Jagielski |* ObjNode::DelObjNode()
128*b1cdbd2cSJim Jagielski |*
129*b1cdbd2cSJim Jagielski |* Beschreibung
130*b1cdbd2cSJim Jagielski |* Ersterstellung MM 09.12.91
131*b1cdbd2cSJim Jagielski |* Letzte Aenderung MM 09.12.91
132*b1cdbd2cSJim Jagielski |*
133*b1cdbd2cSJim Jagielski *************************************************************************/
DelObjNode(RscTop * pClass,sal_uLong nFileKey)134*b1cdbd2cSJim Jagielski ObjNode * ObjNode::DelObjNode( RscTop * pClass, sal_uLong nFileKey ){
135*b1cdbd2cSJim Jagielski ObjNode * pRetNode = this;
136*b1cdbd2cSJim Jagielski
137*b1cdbd2cSJim Jagielski if( Right() )
138*b1cdbd2cSJim Jagielski pRight = ((ObjNode *)Right())->DelObjNode( pClass, nFileKey );
139*b1cdbd2cSJim Jagielski if( Left() )
140*b1cdbd2cSJim Jagielski pLeft = ((ObjNode *)Left())->DelObjNode( pClass, nFileKey );
141*b1cdbd2cSJim Jagielski
142*b1cdbd2cSJim Jagielski if( GetFileKey() == nFileKey ){
143*b1cdbd2cSJim Jagielski if( GetRscObj() ){
144*b1cdbd2cSJim Jagielski pClass->Destroy( RSCINST( pClass, GetRscObj() ) );
145*b1cdbd2cSJim Jagielski rtl_freeMemory( GetRscObj() );
146*b1cdbd2cSJim Jagielski }
147*b1cdbd2cSJim Jagielski pRetNode = (ObjNode *)Right();
148*b1cdbd2cSJim Jagielski if( pRetNode ){
149*b1cdbd2cSJim Jagielski if( Left() )
150*b1cdbd2cSJim Jagielski pRetNode->Insert( (ObjNode *)Left() );
151*b1cdbd2cSJim Jagielski }
152*b1cdbd2cSJim Jagielski else
153*b1cdbd2cSJim Jagielski pRetNode = (ObjNode *)Left();
154*b1cdbd2cSJim Jagielski delete this;
155*b1cdbd2cSJim Jagielski }
156*b1cdbd2cSJim Jagielski return pRetNode;
157*b1cdbd2cSJim Jagielski }
158*b1cdbd2cSJim Jagielski
159*b1cdbd2cSJim Jagielski /*************************************************************************
160*b1cdbd2cSJim Jagielski |*
161*b1cdbd2cSJim Jagielski |* ObjNode::GetId()
162*b1cdbd2cSJim Jagielski |*
163*b1cdbd2cSJim Jagielski |* Beschreibung
164*b1cdbd2cSJim Jagielski |* Ersterstellung MM 29.10.91
165*b1cdbd2cSJim Jagielski |* Letzte Aenderung MM 29.10.91
166*b1cdbd2cSJim Jagielski |*
167*b1cdbd2cSJim Jagielski *************************************************************************/
GetId() const168*b1cdbd2cSJim Jagielski sal_uInt32 ObjNode::GetId() const
169*b1cdbd2cSJim Jagielski {
170*b1cdbd2cSJim Jagielski return( (sal_uInt32)(long)aRscId );
171*b1cdbd2cSJim Jagielski }
172*b1cdbd2cSJim Jagielski
173*b1cdbd2cSJim Jagielski /*************************************************************************
174*b1cdbd2cSJim Jagielski |*
175*b1cdbd2cSJim Jagielski |* ObjNode::IsConsistent()
176*b1cdbd2cSJim Jagielski |*
177*b1cdbd2cSJim Jagielski |* Beschreibung
178*b1cdbd2cSJim Jagielski |* Ersterstellung MM 23.09.91
179*b1cdbd2cSJim Jagielski |* Letzte Aenderung MM 23.09.91
180*b1cdbd2cSJim Jagielski |*
181*b1cdbd2cSJim Jagielski *************************************************************************/
IsConsistent(RscInconsList * pList)182*b1cdbd2cSJim Jagielski sal_Bool ObjNode::IsConsistent( RscInconsList * pList )
183*b1cdbd2cSJim Jagielski {
184*b1cdbd2cSJim Jagielski sal_Bool bRet = sal_True;
185*b1cdbd2cSJim Jagielski
186*b1cdbd2cSJim Jagielski if( (long)aRscId > 0x7FFF || (long)aRscId < 1 )
187*b1cdbd2cSJim Jagielski {
188*b1cdbd2cSJim Jagielski bRet = sal_False;
189*b1cdbd2cSJim Jagielski if( pList )
190*b1cdbd2cSJim Jagielski pList->Insert( new RscInconsistent( aRscId, aRscId ) );
191*b1cdbd2cSJim Jagielski }
192*b1cdbd2cSJim Jagielski else
193*b1cdbd2cSJim Jagielski {
194*b1cdbd2cSJim Jagielski if( Left() )
195*b1cdbd2cSJim Jagielski {
196*b1cdbd2cSJim Jagielski if( !((ObjNode *)Left())->IsConsistent( pList ) )
197*b1cdbd2cSJim Jagielski bRet = sal_False;
198*b1cdbd2cSJim Jagielski if( ((ObjNode *)Left())->aRscId >= aRscId )
199*b1cdbd2cSJim Jagielski {
200*b1cdbd2cSJim Jagielski bRet = sal_False;
201*b1cdbd2cSJim Jagielski if( pList )
202*b1cdbd2cSJim Jagielski pList->Insert(
203*b1cdbd2cSJim Jagielski new RscInconsistent( ((ObjNode *)Left())->GetRscId(),
204*b1cdbd2cSJim Jagielski GetRscId() ) );
205*b1cdbd2cSJim Jagielski }
206*b1cdbd2cSJim Jagielski };
207*b1cdbd2cSJim Jagielski if( Right() )
208*b1cdbd2cSJim Jagielski {
209*b1cdbd2cSJim Jagielski if( ((ObjNode *)Right())->aRscId <= aRscId )
210*b1cdbd2cSJim Jagielski {
211*b1cdbd2cSJim Jagielski bRet = sal_False;
212*b1cdbd2cSJim Jagielski if( pList )
213*b1cdbd2cSJim Jagielski pList->Insert(
214*b1cdbd2cSJim Jagielski new RscInconsistent( GetRscId(),
215*b1cdbd2cSJim Jagielski ((ObjNode *)Right())->GetRscId() ) );
216*b1cdbd2cSJim Jagielski }
217*b1cdbd2cSJim Jagielski if( !((ObjNode *)Right())->IsConsistent( pList ) )
218*b1cdbd2cSJim Jagielski bRet = sal_False;
219*b1cdbd2cSJim Jagielski };
220*b1cdbd2cSJim Jagielski };
221*b1cdbd2cSJim Jagielski
222*b1cdbd2cSJim Jagielski return( bRet );
223*b1cdbd2cSJim Jagielski }
224