xref: /aoo4110/main/rsc/inc/rscarray.hxx (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 #ifndef _RSCARRAY_HXX
24*b1cdbd2cSJim Jagielski #define _RSCARRAY_HXX
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #include <rscall.h>
27*b1cdbd2cSJim Jagielski #include <rscerror.h>
28*b1cdbd2cSJim Jagielski #include <rsctop.hxx>
29*b1cdbd2cSJim Jagielski 
30*b1cdbd2cSJim Jagielski class RscEnum;
31*b1cdbd2cSJim Jagielski 
32*b1cdbd2cSJim Jagielski /******************* R s c A r r a y ************************************/
33*b1cdbd2cSJim Jagielski class RscInstNode : public IdNode
34*b1cdbd2cSJim Jagielski {
35*b1cdbd2cSJim Jagielski 	sal_uInt32	nTypeId;
36*b1cdbd2cSJim Jagielski protected:
37*b1cdbd2cSJim Jagielski     using NameNode::Search;
38*b1cdbd2cSJim Jagielski public:
39*b1cdbd2cSJim Jagielski 	RSCINST	aInst;
40*b1cdbd2cSJim Jagielski 	RscInstNode( sal_uInt32 nId );
41*b1cdbd2cSJim Jagielski 	~RscInstNode();
42*b1cdbd2cSJim Jagielski 	virtual sal_uInt32	GetId() const;
Left() const43*b1cdbd2cSJim Jagielski 	RscInstNode *   Left() const { return (RscInstNode *)pLeft  ; };
Right() const44*b1cdbd2cSJim Jagielski 	RscInstNode *   Right() const{ return (RscInstNode *)pRight ; };
Search(sal_uInt32 nId) const45*b1cdbd2cSJim Jagielski 	RscInstNode *	Search( sal_uInt32 nId ) const
46*b1cdbd2cSJim Jagielski 					{
47*b1cdbd2cSJim Jagielski 						return (RscInstNode *)IdNode::Search( nId );
48*b1cdbd2cSJim Jagielski 					}
49*b1cdbd2cSJim Jagielski };
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski struct RscArrayInst
52*b1cdbd2cSJim Jagielski {
53*b1cdbd2cSJim Jagielski 	RscInstNode *	pNode;
54*b1cdbd2cSJim Jagielski };
55*b1cdbd2cSJim Jagielski 
56*b1cdbd2cSJim Jagielski /* Der Baum wird ueber die Werte des Enums sortiert, nicht ueber
57*b1cdbd2cSJim Jagielski 	seine HashId.
58*b1cdbd2cSJim Jagielski */
59*b1cdbd2cSJim Jagielski class RscArray : public RscTop
60*b1cdbd2cSJim Jagielski {
61*b1cdbd2cSJim Jagielski protected:
62*b1cdbd2cSJim Jagielski     RscEnum *       pTypeClass; // Typ der Eintraege
63*b1cdbd2cSJim Jagielski     sal_uInt32          nSize;      // Groesse der Instanzdaten dieser Klasse
64*b1cdbd2cSJim Jagielski                                 // mit Superklassen
65*b1cdbd2cSJim Jagielski     sal_uInt32          nOffInstData;// Offset auf eigen Instanzdaten
66*b1cdbd2cSJim Jagielski     void            WriteSrcArray( const RSCINST & rInst, FILE * fOutput,
67*b1cdbd2cSJim Jagielski                               	RscTypCont * pTC, sal_uInt32 nTab, const char * );
68*b1cdbd2cSJim Jagielski public:
69*b1cdbd2cSJim Jagielski                     RscArray( Atom nId, sal_uInt32 nTypId,
70*b1cdbd2cSJim Jagielski                                 RscTop * pSuper, RscEnum * pTypeClass );
71*b1cdbd2cSJim Jagielski                     ~RscArray();
72*b1cdbd2cSJim Jagielski 	virtual RSCCLASS_TYPE	GetClassType() const;
73*b1cdbd2cSJim Jagielski 
SetTypeClass(RscEnum * pClass)74*b1cdbd2cSJim Jagielski     void            SetTypeClass( RscEnum * pClass )
75*b1cdbd2cSJim Jagielski 					{
76*b1cdbd2cSJim Jagielski                         pTypeClass = pClass;
77*b1cdbd2cSJim Jagielski                     }
78*b1cdbd2cSJim Jagielski     virtual RscTop *    GetTypeClass() const;
79*b1cdbd2cSJim Jagielski     RSCINST         Create( RSCINST * pInst, const RSCINST & rDflt, sal_Bool );
80*b1cdbd2cSJim Jagielski     void            Destroy( const RSCINST & rInst );
81*b1cdbd2cSJim Jagielski     virtual ERRTYPE GetValueEle( const RSCINST & rInst, sal_Int32 lValue,
82*b1cdbd2cSJim Jagielski 								RscTop * pCreateClass,
83*b1cdbd2cSJim Jagielski                                 RSCINST * pGetInst );
84*b1cdbd2cSJim Jagielski     virtual ERRTYPE GetArrayEle( const RSCINST & rInst, Atom nId,
85*b1cdbd2cSJim Jagielski 								RscTop * pCreateClass,
86*b1cdbd2cSJim Jagielski                                 RSCINST * pGetInst );
87*b1cdbd2cSJim Jagielski 
88*b1cdbd2cSJim Jagielski                     // Gibt die Groesse der Klasse in Bytes
Size()89*b1cdbd2cSJim Jagielski     sal_uInt32          Size(){ return( nSize ); };
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski     sal_Bool            IsConsistent( const RSCINST & rInst, RscInconsList * pList );
92*b1cdbd2cSJim Jagielski 	virtual void	SetToDefault( const RSCINST & rInst );
93*b1cdbd2cSJim Jagielski     sal_Bool            IsDefault( const RSCINST & rInst );
94*b1cdbd2cSJim Jagielski     sal_Bool            IsValueDefault( const RSCINST & rInst, CLASS_DATA pDef );
95*b1cdbd2cSJim Jagielski 
96*b1cdbd2cSJim Jagielski     virtual void    WriteSrcHeader( const RSCINST & rInst, FILE * fOutput,
97*b1cdbd2cSJim Jagielski                                     RscTypCont * pTC, sal_uInt32 nTab,
98*b1cdbd2cSJim Jagielski                                     const RscId & aId, const char * );
99*b1cdbd2cSJim Jagielski     void            WriteSrc( const RSCINST & rInst, FILE * fOutput,
100*b1cdbd2cSJim Jagielski                               RscTypCont * pTC, sal_uInt32 nTab, const char * );
101*b1cdbd2cSJim Jagielski     ERRTYPE         WriteRc( const RSCINST & rInst, RscWriteRc & aMem,
102*b1cdbd2cSJim Jagielski                              RscTypCont * pTC, sal_uInt32, sal_Bool bExtra );
103*b1cdbd2cSJim Jagielski 	virtual void	WriteRcAccess( FILE * fOutput, RscTypCont * pTC,
104*b1cdbd2cSJim Jagielski 									const char * );
105*b1cdbd2cSJim Jagielski };
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski class RscClassArray : public RscArray
108*b1cdbd2cSJim Jagielski {
109*b1cdbd2cSJim Jagielski public:
110*b1cdbd2cSJim Jagielski                     RscClassArray( Atom nId, sal_uInt32 nTypId,
111*b1cdbd2cSJim Jagielski                                 RscTop * pSuper, RscEnum * pTypeClass );
112*b1cdbd2cSJim Jagielski                     ~RscClassArray();
113*b1cdbd2cSJim Jagielski     virtual void    WriteSrcHeader( const RSCINST & rInst, FILE * fOutput,
114*b1cdbd2cSJim Jagielski                                     RscTypCont * pTC, sal_uInt32 nTab,
115*b1cdbd2cSJim Jagielski                                     const RscId & aId, const char * );
116*b1cdbd2cSJim Jagielski     void            WriteSrc( const RSCINST & rInst, FILE * fOutput,
117*b1cdbd2cSJim Jagielski                               RscTypCont * pTC, sal_uInt32 nTab, const char * );
118*b1cdbd2cSJim Jagielski     virtual ERRTYPE WriteRcHeader( const RSCINST & rInst, RscWriteRc & aMem,
119*b1cdbd2cSJim Jagielski                                    RscTypCont * pTC, const RscId & aId,
120*b1cdbd2cSJim Jagielski                     				sal_uInt32 nDeep, sal_Bool bExtra );
121*b1cdbd2cSJim Jagielski };
122*b1cdbd2cSJim Jagielski 
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski class RscLangArray : public RscArray
125*b1cdbd2cSJim Jagielski {
126*b1cdbd2cSJim Jagielski public:
127*b1cdbd2cSJim Jagielski                     RscLangArray( Atom nId, sal_uInt32 nTypId,
128*b1cdbd2cSJim Jagielski                                 RscTop * pSuper, RscEnum * pTypeClass );
129*b1cdbd2cSJim Jagielski 	virtual RSCCLASS_TYPE	GetClassType() const;
130*b1cdbd2cSJim Jagielski };
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski #endif //_RSCARRAY
133