xref: /aoo42x/main/autodoc/source/ary/cpp/c_class.cxx (revision d291ea28)
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 #include <precomp.h>
23 #include <ary/cpp/c_class.hxx>
24 
25 
26 // NOT FULLY DECLARED SERVICES
27 #include <slots.hxx>
28 #include "c_slots.hxx"
29 
30 
31 
32 namespace ary
33 {
34 namespace cpp
35 {
36 
Class(const String & i_sLocalName,Ce_id i_nOwner,E_Protection i_eProtection,loc::Le_id i_nFile,E_ClassKey i_eClassKey)37 Class::Class( const String  &     i_sLocalName,
38               Ce_id               i_nOwner,
39               E_Protection        i_eProtection,
40               loc::Le_id          i_nFile,
41               E_ClassKey          i_eClassKey )
42     :   aEssentials( i_sLocalName,
43                      i_nOwner,
44                      i_nFile ),
45 	    aAssignedNode(),
46    		aBaseClasses(),
47    		aTemplateParameterTypes(),
48         aClasses(),
49         aEnums(),
50         aTypedefs(),
51         aOperations(),
52         aStaticOperations(),
53         aData(),
54         aStaticData(),
55         aFriendClasses(),
56         aFriendOperations(),
57         aKnownDerivatives(),
58         eClassKey(i_eClassKey),
59         eProtection(i_eProtection),
60 		eVirtuality(VIRTUAL_none)
61 {
62     aAssignedNode.Assign_Entity(*this);
63 }
64 
~Class()65 Class::~Class()
66 {
67 }
68 
69 void
Add_BaseClass(const S_Classes_Base & i_rBaseClass)70 Class::Add_BaseClass( const S_Classes_Base & i_rBaseClass )
71 {
72 	aBaseClasses.push_back(i_rBaseClass);
73 }
74 
75 void
Add_TemplateParameterType(const String & i_sLocalName,Type_id i_nIdAsType)76 Class::Add_TemplateParameterType( const String  &     i_sLocalName,
77                                   Type_id             i_nIdAsType )
78 {
79     aTemplateParameterTypes.push_back(
80             List_TplParam::value_type(i_sLocalName,i_nIdAsType) );
81 }
82 
83 void
Add_LocalClass(const String & i_sLocalName,Cid i_nId)84 Class::Add_LocalClass( const String  &     i_sLocalName,
85                        Cid                 i_nId )
86 {
87     aClasses.push_back( S_LocalCe(i_sLocalName, i_nId) );
88 }
89 
90 void
Add_LocalEnum(const String & i_sLocalName,Cid i_nId)91 Class::Add_LocalEnum( const String  &     i_sLocalName,
92                       Cid                 i_nId )
93 {
94     aEnums.push_back( S_LocalCe(i_sLocalName, i_nId) );
95 }
96 
97 void
Add_LocalTypedef(const String & i_sLocalName,Cid i_nId)98 Class::Add_LocalTypedef( const String  &     i_sLocalName,
99                          Cid                 i_nId )
100 {
101     aTypedefs.push_back( S_LocalCe(i_sLocalName, i_nId) );
102 }
103 
104 void
Add_LocalOperation(const String & i_sLocalName,Cid i_nId)105 Class::Add_LocalOperation( const String  &          i_sLocalName,
106                            Cid                      i_nId )
107 {
108     aOperations.push_back( S_LocalCe(i_sLocalName, i_nId) );
109 }
110 
111 void
Add_LocalStaticOperation(const String & i_sLocalName,Cid i_nId)112 Class::Add_LocalStaticOperation( const String  &     i_sLocalName,
113                                  Cid                 i_nId )
114 {
115     aStaticOperations.push_back( S_LocalCe(i_sLocalName, i_nId) );
116 }
117 
118 void
Add_LocalData(const String & i_sLocalName,Cid i_nId)119 Class::Add_LocalData( const String  &     i_sLocalName,
120                       Cid                 i_nId )
121 {
122     aData.push_back( S_LocalCe(i_sLocalName, i_nId) );
123 }
124 
125 void
Add_LocalStaticData(const String & i_sLocalName,Cid i_nId)126 Class::Add_LocalStaticData( const String  &     i_sLocalName,
127                             Cid                 i_nId )
128 {
129     aStaticData.push_back( S_LocalCe(i_sLocalName, i_nId) );
130 }
131 
132 
133 struct find_name
134 {
find_nameary::cpp::find_name135                         find_name(
136                             const String &      i_name )
137                             :   sName(i_name) {}
138 
operator ()ary::cpp::find_name139     bool                operator()(
140                             const S_LocalCe &   i_lce ) const
141                             { return i_lce.sLocalName == sName; }
142   private:
143     String              sName;
144 };
145 
146 Ce_id
Search_Child(const String & i_key) const147 Class::Search_Child(const String & i_key) const
148 {
149     Ce_id
150         ret = Ce_id(Search_LocalClass(i_key));
151     if (ret.IsValid())
152         return ret;
153 
154     CIterator_Locals
155         itret = std::find_if(aEnums.begin(), aEnums.end(), find_name(i_key));
156     if (itret != aEnums.end())
157         return (*itret).nId;
158     itret = std::find_if(aTypedefs.begin(), aTypedefs.end(), find_name(i_key));
159     if (itret != aTypedefs.end())
160         return (*itret).nId;
161     itret = std::find_if(aData.begin(), aData.end(), find_name(i_key));
162     if (itret != aData.end())
163         return (*itret).nId;
164     itret = std::find_if(aStaticData.begin(), aStaticData.end(), find_name(i_key));
165     if (itret != aStaticData.end())
166         return (*itret).nId;
167     return Ce_id(0);
168 }
169 
170 Rid
Search_LocalClass(const String & i_sName) const171 Class::Search_LocalClass( const String  & i_sName ) const
172 {
173  	CIterator_Locals itFound = PosOfName(aClasses, i_sName);
174     if (itFound != aClasses.end())
175         return (*itFound).nId.Value();
176     return 0;
177 }
178 
179 const String  &
inq_LocalName() const180 Class::inq_LocalName() const
181 {
182 	return aEssentials.LocalName();
183 }
184 
185 Cid
inq_Owner() const186 Class::inq_Owner() const
187 {
188 	return aEssentials.Owner();
189 }
190 
191 loc::Le_id
inq_Location() const192 Class::inq_Location() const
193 {
194 	return aEssentials.Location();
195 }
196 
197 void
do_Accept(csv::ProcessorIfc & io_processor) const198 Class::do_Accept(csv::ProcessorIfc & io_processor) const
199 {
200     csv::CheckedCall(io_processor,*this);
201 }
202 
203 ClassId
get_AryClass() const204 Class::get_AryClass() const
205 {
206 	return class_id;
207 }
208 
209 Gid
inq_Id_Group() const210 Class::inq_Id_Group() const
211 {
212  	return static_cast<Gid>(Id());
213 }
214 
215 const ary::cpp::CppEntity &
inq_RE_Group() const216 Class::inq_RE_Group() const
217 {
218  	return *this;
219 }
220 
221 const group::SlotList &
inq_Slots() const222 Class::inq_Slots() const
223 {
224     static const SlotAccessId aProjectSlotData[]
225             = { SLOT_Bases,
226                 SLOT_NestedClasses,
227                 SLOT_Enums,
228                 SLOT_Typedefs,
229                 SLOT_Operations,
230                 SLOT_StaticOperations,
231                 SLOT_Data,
232                 SLOT_StaticData,
233                 SLOT_FriendClasses,
234                 SLOT_FriendOperations };
235     static const std::vector< SlotAccessId >
236             aSlots( &aProjectSlotData[0],
237                       &aProjectSlotData[0]
238                         + sizeof aProjectSlotData / sizeof (SlotAccessId) );
239     return aSlots;
240 }
241 
242 
243 DYN Slot *
inq_Create_Slot(SlotAccessId i_nSlot) const244 Class::inq_Create_Slot( SlotAccessId i_nSlot ) const
245 {
246     switch ( i_nSlot )
247     {
248         case SLOT_Bases:                return new Slot_BaseClass(aBaseClasses);
249         case SLOT_NestedClasses:        return new Slot_ListLocalCe(aClasses);
250         case SLOT_Enums:                return new Slot_ListLocalCe(aEnums);
251         case SLOT_Typedefs:             return new Slot_ListLocalCe(aTypedefs);
252         case SLOT_Operations:           return new Slot_ListLocalCe(aOperations);
253         case SLOT_StaticOperations:     return new Slot_ListLocalCe(aStaticOperations);
254         case SLOT_Data:                 return new Slot_ListLocalCe(aData);
255         case SLOT_StaticData:           return new Slot_ListLocalCe(aStaticData);
256         case SLOT_FriendClasses:        return new Slot_SequentialIds<Ce_id>(aFriendClasses);
257         case SLOT_FriendOperations:     return new Slot_SequentialIds<Ce_id>(aFriendOperations);
258         default:
259                                         return new Slot_Null;
260     }   // end switch
261 }
262 
263 Class::CIterator_Locals
PosOfName(const List_LocalCe & i_rList,const String & i_sName) const264 Class::PosOfName( const List_LocalCe &  i_rList,
265                   const String  &       i_sName ) const
266 {
267     for ( CIterator_Locals ret = i_rList.begin();
268           ret != i_rList.end();
269           ++ret )
270     {
271      	if ( (*ret).sLocalName == i_sName )
272             return ret;
273     }
274     return i_rList.end();
275 }
276 
277 }   //  namespace   cpp
278 }   //  namespace   ary
279