xref: /aoo4110/main/autodoc/inc/ary/cpp/c_class.hxx (revision b1cdbd2c)
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 ARY_CPP_C_CLASS_HXX
25 #define ARY_CPP_C_CLASS_HXX
26 
27 
28 
29 // USED SERVICES
30 	// BASE CLASSES
31 #include <ary/cpp/c_ce.hxx>
32 #include <ary/arygroup.hxx>
33 	// OTHER
34 #include <ary/symtreenode.hxx>
35 #include <ary/cessentl.hxx>
36 #include <ary/sequentialids.hxx>
37 #include <ary/cpp/c_types4cpp.hxx>
38 #include <ary/cpp/c_slntry.hxx>
39 
40 namespace ary
41 {
42 namespace cpp
43 {
44     class Enum;
45     class Typedef;
46     class Function;
47     class Variable;
48 }
49 }
50 
51 
52 
53 namespace ary
54 {
55 namespace cpp
56 {
57 
58 
59 /** A C++ class.
60 */
61 class Class : public CodeEntity,
62               public AryGroup
63 {
64   public:
65     enum E_ClassId { class_id = 1001 };
66 
67     enum E_Slots
68     {
69         SLOT_Bases = 1,
70         SLOT_NestedClasses,
71         SLOT_Enums,
72         SLOT_Typedefs,
73         SLOT_Operations,
74         SLOT_StaticOperations,
75         SLOT_Data,
76         SLOT_StaticData,
77         SLOT_FriendClasses,
78         SLOT_FriendOperations
79     };
80 
81     typedef ::ary::symtree::Node<CeNode_Traits>    node_t;
82 
83 
84 	// LIFECYCLE
85 						Class(
86                             const String  &     i_sLocalName,
87                             Ce_id               i_nOwner,
88                             E_Protection        i_eProtection,
89                             loc::Le_id          i_nFile,
90                             E_ClassKey          i_eClassKey );
91 						~Class();
92 
93 	// OPERATIONS
94 	void				Add_BaseClass(
95 							const S_Classes_Base &
96                                                 i_rBaseClass );
97     void                Add_TemplateParameterType(
98                             const String  &     i_sLocalName,
99                             Type_id             i_nIdAsType );
Add_KnownDerivative(Ce_id i_nId)100 	void				Add_KnownDerivative(
101 							Ce_id               i_nId )
102                                                 { aKnownDerivatives.Add(i_nId); }
103 
104 	void                Add_LocalClass(
105                             const String  &     i_sLocalName,
106                             Cid                 i_nId );
107 	void                Add_LocalEnum(
108                             const String  &     i_sLocalName,
109                             Cid                 i_nId );
110 	void                Add_LocalTypedef(
111                             const String  &     i_sLocalName,
112                             Cid                 i_nId );
113 	void                Add_LocalOperation(
114                             const String  &     i_sLocalName,
115                             Cid                 i_nId );
116 	void                Add_LocalStaticOperation(
117                             const String  &     i_sLocalName,
118                             Cid                 i_nId );
119 	void                Add_LocalData(
120                             const String  &     i_sLocalName,
121                             Cid                 i_nId );
122 	void                Add_LocalStaticData(
123                             const String  &     i_sLocalName,
124                             Cid                 i_nId );
125 
UpdateVirtuality(E_Virtuality i_eVirtuality)126     void                UpdateVirtuality(
127                             E_Virtuality        i_eVirtuality )
128                                                 { if ( int(i_eVirtuality) > int(eVirtuality) )
129                                                      eVirtuality = i_eVirtuality; }
130     const List_TplParam &
TemplateParameters() const131                         TemplateParameters() const
132                                                 { return aTemplateParameterTypes; }
BaseClasses() const133     const List_Bases &  BaseClasses() const     { return aBaseClasses; }
134     const SequentialIds<Ce_id> &
KnownDerivatives() const135                         KnownDerivatives() const
136                                                 { return aKnownDerivatives; }
137 
138 	// INQUIRY
139     E_ClassKey			ClassKey() const;
140     E_Protection        Protection() const;
Virtuality() const141     E_Virtuality        Virtuality() const      { return eVirtuality; }
142 
143     Ce_id               Search_Child(
144                             const String &      i_key ) const;
145     Rid                 Search_LocalClass(
146                             const String  &     i_sName ) const;
147     const node_t &      AsNode() const;
148 
149     // ACCESS
150     node_t &            AsNode();
151 
152   private:
153     NON_COPYABLE(Class);
154 
155     // Interface csv::ConstProcessorClient
156     virtual void        do_Accept(
157                             csv::ProcessorIfc & io_processor ) const;
158 
159     // Interface ary::cpp::CodeEntity
160 	virtual const String  &
161                         inq_LocalName() const;
162 	virtual Cid         inq_Owner() const;
163 	virtual loc::Le_id  inq_Location() const;
164 
165     // Interface ary::cpp::CppEntity
166     virtual ClassId     get_AryClass() const;
167 
168     // Interface ary::AryGroup
169 	virtual Gid 		inq_Id_Group() const;
170     virtual const cpp::CppEntity &
171                         inq_RE_Group() const;
172 	virtual const group::SlotList &
173                         inq_Slots() const;
174     virtual DYN Slot *  inq_Create_Slot(
175                             SlotAccessId        i_nSlot ) const;
176     // Local
177  	typedef List_LocalCe::const_iterator        CIterator_Locals;
178  	typedef List_LocalCe::iterator              Iterator_Locals;
179     typedef SequentialIds<Ce_id>                IdSequence;
180 
181     CIterator_Locals    PosOfName(
182                             const List_LocalCe& i_rList,
183                             const String  &     i_sName ) const;
184 	// DATA
185 	CeEssentials		aEssentials;
186 	node_t              aAssignedNode;
187 
188 	List_Bases			aBaseClasses;
189     List_TplParam       aTemplateParameterTypes;
190 
191     List_LocalCe        aClasses;
192     List_LocalCe        aEnums;
193     List_LocalCe        aTypedefs;
194     List_LocalCe        aOperations;
195     List_LocalCe        aStaticOperations;
196     List_LocalCe        aData;
197     List_LocalCe        aStaticData;
198 
199     IdSequence          aFriendClasses;
200     IdSequence          aFriendOperations;
201     IdSequence          aKnownDerivatives;
202 
203 	E_ClassKey			eClassKey;
204 	E_Protection		eProtection;
205     E_Virtuality        eVirtuality;
206 };
207 
208 
209 
210 
211 // IMPLEMENTATION
212 inline E_ClassKey
ClassKey() const213 Class::ClassKey() const
214 {
215     return eClassKey;
216 }
217 
218 inline E_Protection
Protection() const219 Class::Protection() const
220 {
221     return eProtection;
222 }
223 
224 inline const Class::node_t &
AsNode() const225 Class::AsNode() const
226 {
227     return aAssignedNode;
228 }
229 
230 inline Class::node_t &
AsNode()231 Class::AsNode()
232 {
233     return aAssignedNode;
234 }
235 
236 
237 
238 
239 }   //  namespace cpp
240 }   //  namespace ary
241 #endif
242