xref: /AOO41X/main/autodoc/source/parser_i/inc/s2_luidl/pe_struc.hxx (revision 1c78a5d6c0093dece4c096ba53051800fbad6e33)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef LUIDL_PE_STRUC_HXX
25 #define LUIDL_PE_STRUC_HXX
26 
27 
28 
29 // USED SERVICES
30     // BASE CLASSES
31 #include <s2_luidl/parsenv2.hxx>
32 #include <s2_luidl/pestate.hxx>
33     // COMPONENTS
34 #include <s2_luidl/semnode.hxx>
35 #include <ary/qualiname.hxx>
36     // PARAMETERS
37 
38 
39 
40 namespace csi
41 {
42 namespace prl
43 {
44     class TNamespace;
45 }
46 }
47 
48 
49 
50 namespace csi
51 {
52 namespace uidl
53 {
54 
55 
56 class Struct;
57 class StructElement;
58 class PE_StructElement;
59 class PE_Type;
60 
61 
62 class PE_Struct : public UnoIDL_PE
63 {
64   public:
65                         PE_Struct();
66     virtual void        EstablishContacts(
67                             UnoIDL_PE *         io_pParentPE,
68                             ary::Repository &   io_rRepository,
69                             TokenProcessing_Result &
70                                                 o_rResult );
71                         ~PE_Struct();
72     virtual void        ProcessToken(
73                             const Token &       i_rToken );
74 
75   private:
76     struct S_Work
77     {
78                             S_Work();
79 
80         void                InitData();
81         void                Prepare_PE_QualifiedName();
82         void                Prepare_PE_Element();
83         void                Data_Set_Name(
84                                 const char *        i_sName );
85         void                Data_Set_TemplateParam(
86                                 const char *        i_sTemplateParam );
87 
88         String              sData_Name;
89         String              sData_TemplateParam;
90         bool                bIsPreDeclaration;
91         ary::idl::Ce_id     nCurStruct;
92 
93         Dyn<PE_StructElement>
94                             pPE_Element;
95         ary::idl::Ce_id     nCurParsed_ElementRef;
96         Dyn<PE_Type>        pPE_Type;
97         ary::idl::Type_id   nCurParsed_Base;
98     };
99 
100     struct S_Stati;
101     class PE_StructState;
102     friend struct S_Stati;
103     friend class PE_StructState;
104 
105 
106     class PE_StructState : public ParseEnvState
107     {
108       public:
109 
110       protected:
PE_StructState(PE_Struct & i_rStruct)111                             PE_StructState(
112                                 PE_Struct &         i_rStruct )
113                                                     :   rStruct(i_rStruct) {}
114         void                MoveState(
115                                 ParseEnvState &     i_rState ) const;
SetResult(E_TokenDone i_eDone,E_EnvStackAction i_eWhat2DoWithEnvStack,UnoIDL_PE * i_pParseEnv2Push=0) const116         void                SetResult(
117                                 E_TokenDone         i_eDone,
118                                 E_EnvStackAction    i_eWhat2DoWithEnvStack,
119                                 UnoIDL_PE *         i_pParseEnv2Push = 0 ) const
120                                                     { rStruct.SetResult(i_eDone, i_eWhat2DoWithEnvStack, i_pParseEnv2Push); }
121 
Stati() const122         S_Stati &           Stati() const           { return *rStruct.pStati; }
Work() const123         S_Work &            Work() const            { return rStruct.aWork; }
PE() const124         PE_Struct &         PE() const              { return rStruct; }
125 
126       private:
127         virtual UnoIDL_PE & MyPE();
128         // DATA
129         PE_Struct &         rStruct;
130     };
131 
132     class State_None : public PE_StructState
133     {
134         public:
State_None(PE_Struct & i_rStruct)135                             State_None(
136                                 PE_Struct &         i_rStruct )
137                                                     :   PE_StructState(i_rStruct) {}
138     };
139     class State_WaitForName : public PE_StructState
140     {   // -> Name
141       public:
State_WaitForName(PE_Struct & i_rStruct)142                             State_WaitForName(
143                                 PE_Struct &         i_rStruct )
144                                                     :   PE_StructState(i_rStruct) {}
145         virtual void        Process_Identifier(
146                                 const TokIdentifier &
147                                                     i_rToken );
148     };
149     class State_GotName : public PE_StructState
150     {   // -> : { ; <
151       public:
State_GotName(PE_Struct & i_rStruct)152                             State_GotName(
153                                 PE_Struct &         i_rStruct )
154                                                     :   PE_StructState(i_rStruct) {}
155         virtual void        Process_Punctuation(
156                                 const TokPunctuation &
157                                                     i_rToken );
158     };
159     class State_WaitForTemplateParam : public PE_StructState
160     {   // -> Template parameter identifier
161       public:
State_WaitForTemplateParam(PE_Struct & i_rStruct)162                             State_WaitForTemplateParam(
163                                 PE_Struct &         i_rStruct )
164                                                     :   PE_StructState(i_rStruct) {}
165         virtual void        Process_Identifier(
166                                 const TokIdentifier &
167                                                     i_rToken );
168     };
169     class State_WaitForTemplateEnd : public PE_StructState
170     {   // -> >
171       public:
State_WaitForTemplateEnd(PE_Struct & i_rStruct)172                             State_WaitForTemplateEnd(
173                                 PE_Struct &         i_rStruct )
174                                                     :   PE_StructState(i_rStruct) {}
175         virtual void        Process_Punctuation(
176                                 const TokPunctuation &
177                                                     i_rToken );
178     };
179     class State_WaitForBase : public PE_StructState
180     {   // -> Base
181       public:
State_WaitForBase(PE_Struct & i_rStruct)182                             State_WaitForBase(
183                                 PE_Struct &         i_rStruct )
184                                                     :   PE_StructState(i_rStruct) {}
185         virtual void        On_SubPE_Left();
186     };
187     class State_GotBase : public PE_StructState
188     {   // -> {
189       public:
State_GotBase(PE_Struct & i_rStruct)190                             State_GotBase(
191                                 PE_Struct &         i_rStruct )
192                                                     :   PE_StructState(i_rStruct) {}
193         virtual void        Process_Punctuation(
194                                 const TokPunctuation &
195                                                     i_rToken );
196     };
197     class State_WaitForElement : public PE_StructState
198     {   // -> Typ }
199       public:
State_WaitForElement(PE_Struct & i_rStruct)200                             State_WaitForElement(
201                                 PE_Struct &         i_rStruct )
202                                                     :   PE_StructState(i_rStruct) {}
203         virtual void        Process_Identifier(
204                                 const TokIdentifier &
205                                                     i_rToken );
206         virtual void        Process_NameSeparator();
207         virtual void        Process_BuiltInType(
208                                 const TokBuiltInType &
209                                                     i_rToken );
210         virtual void        Process_TypeModifier(
211                                 const TokTypeModifier &
212                                                     i_rToken );
213         virtual void        Process_Punctuation(
214                                 const TokPunctuation &
215                                                     i_rToken );
216     };
217     class State_WaitForFinish : public PE_StructState
218     { // -> ;
219       public:
State_WaitForFinish(PE_Struct & i_rStruct)220                             State_WaitForFinish(
221                                 PE_Struct &         i_rStruct )
222                                                     :   PE_StructState(i_rStruct) {}
223         virtual void        Process_Punctuation(
224                                 const TokPunctuation &
225                                                     i_rToken );
226     };
227 
228     struct S_Stati
229     {
230                             S_Stati(
231                                 PE_Struct &         io_rStruct );
SetStatecsi::uidl::PE_Struct::S_Stati232         void                SetState(
233                                 ParseEnvState &     i_rNextState )
234                                                     { pCurStatus = &i_rNextState; }
235 
236         State_None          aNone;
237         State_WaitForName   aWaitForName;
238         State_GotName       aGotName;
239         State_WaitForTemplateParam
240                             aWaitForTemplateParam;
241         State_WaitForTemplateEnd
242                             aWaitForTemplateEnd;
243         State_WaitForBase   aWaitForBase;
244         State_GotBase       aGotBase;
245         State_WaitForElement
246                             aWaitForElement;
247         State_WaitForFinish aWaitForFinish;
248 
249         ParseEnvState *     pCurStatus;
250     };
251 
252     virtual void        InitData();
253     virtual void        TransferData();
254     virtual void        ReceiveData();
255 
256     public:
257 
258     void        store_Struct();
259 
260     private:
261 
Stati()262     S_Stati &           Stati()                 { return *pStati; }
Work()263     S_Work &            Work()                  { return aWork; }
264 
265     // DATA
266     S_Work              aWork;
267     Dyn<S_Stati>        pStati;
268 };
269 
270 
271 inline void
MoveState(ParseEnvState & i_rState) const272 PE_Struct::PE_StructState::MoveState(
273                                 ParseEnvState &     i_rState ) const
274                                                     { rStruct.Stati().SetState(i_rState); }
275 
276 }   // namespace uidl
277 }   // namespace csi
278 
279 
280 #endif
281 
282