xref: /aoo4110/main/rsc/source/res/rscclobj.cxx (revision b1cdbd2c)
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