xref: /trunk/main/autodoc/source/parser/cpp/pev.hxx (revision 1c78a5d6)
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 ADC_CPP_PEV_HXX
25 #define ADC_CPP_PEV_HXX
26 
27 
28 
29 // USED SERVICES
30 	// BASE CLASSES
31 #include <tokens/tokproct.hxx>
32 	// COMPONENTS
33 	// PARAMETERS
34 #include <ary/cpp/c_types4cpp.hxx>
35 
36 namespace ary
37 {
38     namespace cpp
39     {
40         class Gate;
41         class InputContext;
42 
43         class Namespace;
44         class Class;
45         class Enum;
46         class Typedef;
47         class Function;
48         class Variable;
49         class EnumValue;
50 
51         class DefineEntity;
52     }
53 
54     class Documentation;
55 }
56 
57 
58 namespace cpp
59 {
60 
61 
62 class PeEnvironment : protected TokenProcessing_Types
63 {
64   public:
65     // INQUIRY
~PeEnvironment()66 	virtual				~PeEnvironment() {}
67 
68     // OPERATIONS
69         // Token results
70 	void				SetTokenResult(
71 							E_TokenDone			i_eDone,
72 							E_EnvStackAction	i_eWhat2DoWithEnvStack,
73 							ParseEnvironment *	i_pParseEnv2Push = 0 );
74 
75         // Owner stack
76 	void                OpenNamespace(
77 							ary::cpp::Namespace &
78                                                 io_rOpenedNamespace );
79 	void                OpenExternC(
80 	                    	bool				i_bOnlyForOneDeclaration = false );
81 	void                OpenClass(
82 							ary::cpp::Class &	io_rOpenedClass );
83 	void                OpenEnum(
84 							ary::cpp::Enum &	io_rOpenedEnum );
85 	void                CloseBlock();           /// Handles a '}' on file scope.
86 	void                CloseClass();
87 	void                CloseEnum();
88     void                SetCurProtection(       /// Handles 'public:', 'protected:' and 'private:' on class scope.
89                             ary::cpp::E_Protection
90                                                 i_eProtection );
91     void                OpenTemplate(
92                             const StringVector &
93                                                 i_rParameters );
94     /// Removes parameters from this object.
95     DYN StringVector *  Get_CurTemplateParameters();
96     /// Checks, if a template is still open, and if yes, closes it.
97     void                Close_OpenTemplate();
98 
99         // Special events
100     void                Event_Class_FinishedBase(
101                             const String  &     i_sParameterName );
102 
103     void                Event_Store_Typedef(
104                             ary::cpp::Typedef & io_rTypedef );
105     void                Event_Store_EnumValue(
106                             ary::cpp::EnumValue &
107                                                 io_rEnumValue );
108     void                Event_Store_CppDefinition(
109                             ary::cpp::DefineEntity  &
110                                                 io_rDefinition );
111 
112     void                Event_EnterFunction_ParameterList();
113     void                Event_Function_FinishedParameter(
114                             const String  &     i_sParameterName );
115     void                Event_LeaveFunction_ParameterList();
116     void                Event_EnterFunction_Implementation();
117     void                Event_LeaveFunction_Implementation();
118 
119     void                Event_Store_Function(
120                             ary::cpp::Function &
121                                                 io_rFunction );
122     void                Event_Store_Variable(
123                             ary::cpp::Variable &
124                                                 io_rVariable );
125         // Error recovery
126     void                StartWaitingFor_Recovery();
127 
128     // INQUIRY
129     ary::cpp::Gate &  AryGate() const;
130 	const ary::cpp::InputContext &
131 						Context() const;
132 	String              CurFileName() const;
133 	uintt               LineCount() const;
134 	bool                IsWaitingFor_Recovery() const;
135 	bool                IsExternC() const;
136 
137   private:
138 	virtual void        do_SetTokenResult(
139 							E_TokenDone			i_eDone,
140 							E_EnvStackAction	i_eWhat2DoWithEnvStack,
141 							ParseEnvironment *	i_pParseEnv2Push ) = 0;
142 	virtual void        do_OpenNamespace(
143 							ary::cpp::Namespace &
144 												io_rOpenedNamespace ) = 0;
145 	virtual void        do_OpenExternC(
146 							bool				i_bOnlyForOneDeclaration ) = 0;
147 	virtual void        do_OpenClass(
148 							ary::cpp::Class &	io_rOpenedClass ) = 0;
149 	virtual void        do_OpenEnum(
150 							ary::cpp::Enum &	io_rOpenedEnum ) = 0;
151 	virtual void        do_CloseBlock() = 0;
152 	virtual void        do_CloseClass() = 0;
153 	virtual void        do_CloseEnum() = 0;
154     virtual void        do_SetCurProtection(
155                             ary::cpp::E_Protection
156 												i_eProtection ) = 0;
157     virtual void        do_OpenTemplate(
158                             const StringVector &
159                                                 i_rParameters ) = 0;
160     virtual DYN StringVector *
161                         do_Get_CurTemplateParameters() = 0;
162     virtual void        do_Close_OpenTemplate() = 0;
163 	virtual void        do_Event_Class_FinishedBase(
164                             const String  &     i_sBaseName ) = 0;
165 
166     virtual void        do_Event_Store_Typedef(
167 							ary::cpp::Typedef & io_rTypedef ) = 0;
168     virtual void        do_Event_Store_EnumValue(
169                             ary::cpp::EnumValue &
170                                                 io_rEnumValue ) = 0;
171     virtual void        do_Event_Store_CppDefinition(
172                             ary::cpp::DefineEntity &
173                                                 io_rDefinition ) = 0;
174     virtual void        do_Event_EnterFunction_ParameterList() = 0;
175     virtual void        do_Event_Function_FinishedParameter(
176                             const String  &     i_sParameterName ) = 0;
177 	virtual void        do_Event_LeaveFunction_ParameterList() = 0;
178     virtual void        do_Event_EnterFunction_Implementation() = 0;
179     virtual void        do_Event_LeaveFunction_Implementation() = 0;
180     virtual void        do_Event_Store_Function(
181 							ary::cpp::Function &
182                                                 io_rFunction ) = 0;
183 	virtual void        do_Event_Store_Variable(
184                             ary::cpp::Variable &
185                                                 io_rVariable ) = 0;
186     virtual void        do_StartWaitingFor_Recovery() = 0;
187     virtual ary::cpp::Gate &
188 						inq_AryGate() const = 0;
189 	virtual const ary::cpp::InputContext &
190 						inq_Context() const = 0;
191 	virtual String 		inq_CurFileName() const = 0;
192 	virtual uintt       inq_LineCount() const = 0;
193     virtual bool        inq_IsWaitingFor_Recovery() const = 0;
194 	virtual bool        inq_IsExternC() const = 0;
195 };
196 
197 
198 
199 // IMPLEMENTATION
200 
201 inline void
SetTokenResult(E_TokenDone i_eDone,E_EnvStackAction i_eWhat2DoWithEnvStack,ParseEnvironment * i_pParseEnv2Push)202 PeEnvironment::SetTokenResult( E_TokenDone			i_eDone,
203 							   E_EnvStackAction	    i_eWhat2DoWithEnvStack,
204 							   ParseEnvironment *	i_pParseEnv2Push )
205     { do_SetTokenResult(i_eDone, i_eWhat2DoWithEnvStack,  i_pParseEnv2Push); }
206 inline void
OpenNamespace(ary::cpp::Namespace & io_rOpenedNamespace)207 PeEnvironment::OpenNamespace( ary::cpp::Namespace & io_rOpenedNamespace )
208 	{ do_OpenNamespace(io_rOpenedNamespace); }
209 inline void
OpenExternC(bool i_bOnlyForOneDeclaration)210 PeEnvironment::OpenExternC( bool i_bOnlyForOneDeclaration )
211     { do_OpenExternC(i_bOnlyForOneDeclaration); }
212 inline void
OpenClass(ary::cpp::Class & io_rOpenedClass)213 PeEnvironment::OpenClass( ary::cpp::Class &	io_rOpenedClass )
214     { do_OpenClass(io_rOpenedClass); }
215 inline void
OpenEnum(ary::cpp::Enum & io_rOpenedEnum)216 PeEnvironment::OpenEnum( ary::cpp::Enum & io_rOpenedEnum )
217     { do_OpenEnum(io_rOpenedEnum); }
218 inline void
CloseBlock()219 PeEnvironment::CloseBlock()
220     { do_CloseBlock(); }
221 inline void
CloseClass()222 PeEnvironment::CloseClass()
223     { do_CloseClass(); }
224 inline void
CloseEnum()225 PeEnvironment::CloseEnum()
226     { do_CloseEnum(); }
227 inline void
SetCurProtection(ary::cpp::E_Protection i_eProtection)228 PeEnvironment::SetCurProtection( ary::cpp::E_Protection i_eProtection )
229     { do_SetCurProtection(i_eProtection); }
230 inline void
OpenTemplate(const StringVector & i_rParameters)231 PeEnvironment::OpenTemplate( const StringVector & i_rParameters )
232     { do_OpenTemplate(i_rParameters); }
233 inline DYN StringVector *
Get_CurTemplateParameters()234 PeEnvironment::Get_CurTemplateParameters()
235     { return do_Get_CurTemplateParameters(); }
236 inline void
Close_OpenTemplate()237 PeEnvironment::Close_OpenTemplate()
238     { do_Close_OpenTemplate(); }
239 inline void
Event_Class_FinishedBase(const String & i_sBaseName)240 PeEnvironment::Event_Class_FinishedBase( const String  &  i_sBaseName )
241     { do_Event_Class_FinishedBase(i_sBaseName); }
242 inline void
Event_Store_Typedef(ary::cpp::Typedef & io_rTypedef)243 PeEnvironment::Event_Store_Typedef( ary::cpp::Typedef & io_rTypedef )
244     { do_Event_Store_Typedef(io_rTypedef); }
245 inline void
Event_Store_EnumValue(ary::cpp::EnumValue & io_rEnumValue)246 PeEnvironment::Event_Store_EnumValue( ary::cpp::EnumValue & io_rEnumValue )
247     { do_Event_Store_EnumValue(io_rEnumValue); }
248 inline void
Event_Store_CppDefinition(ary::cpp::DefineEntity & io_rDefinition)249 PeEnvironment::Event_Store_CppDefinition( ary::cpp::DefineEntity & io_rDefinition )
250     { do_Event_Store_CppDefinition(io_rDefinition); }
251 inline void
Event_EnterFunction_ParameterList()252 PeEnvironment::Event_EnterFunction_ParameterList()
253     { do_Event_EnterFunction_ParameterList(); }
254 inline void
Event_Function_FinishedParameter(const String & i_sParameterName)255 PeEnvironment::Event_Function_FinishedParameter( const String  & i_sParameterName )
256     { do_Event_Function_FinishedParameter(i_sParameterName); }
257 inline void
Event_LeaveFunction_ParameterList()258 PeEnvironment::Event_LeaveFunction_ParameterList()
259     { do_Event_LeaveFunction_ParameterList(); }
260 inline void
Event_EnterFunction_Implementation()261 PeEnvironment::Event_EnterFunction_Implementation()
262     { do_Event_EnterFunction_Implementation(); }
263 inline void
Event_LeaveFunction_Implementation()264 PeEnvironment::Event_LeaveFunction_Implementation()
265 	{ do_Event_LeaveFunction_Implementation(); }
266 inline void
Event_Store_Function(ary::cpp::Function & io_rFunction)267 PeEnvironment::Event_Store_Function( ary::cpp::Function & io_rFunction )
268 	{ do_Event_Store_Function(io_rFunction); }
269 inline void
Event_Store_Variable(ary::cpp::Variable & io_rVariable)270 PeEnvironment::Event_Store_Variable( ary::cpp::Variable & io_rVariable )
271 	{ do_Event_Store_Variable(io_rVariable); }
272 inline void
StartWaitingFor_Recovery()273 PeEnvironment::StartWaitingFor_Recovery()
274 	{ do_StartWaitingFor_Recovery(); }
275 inline ary::cpp::Gate &
AryGate() const276 PeEnvironment::AryGate() const
277 	{ return inq_AryGate(); }
278 inline const ary::cpp::InputContext &
Context() const279 PeEnvironment::Context() const
280 	{ return inq_Context(); }
281 inline String
CurFileName() const282 PeEnvironment::CurFileName() const
283 	{ return inq_CurFileName(); }
284 inline uintt
LineCount() const285 PeEnvironment::LineCount() const
286 	{ return inq_LineCount(); }
287 inline bool
IsWaitingFor_Recovery() const288 PeEnvironment::IsWaitingFor_Recovery() const
289     { return inq_IsWaitingFor_Recovery(); }
290 inline bool
IsExternC() const291 PeEnvironment::IsExternC() const
292     { return inq_IsExternC(); }
293 
294 
295 
296 }   // namespace cpp
297 
298 
299 #endif
300 
301