xref: /aoo42x/main/autodoc/source/ary/idl/ia_ce.cxx (revision d291ea28)
1*d291ea28SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*d291ea28SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*d291ea28SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*d291ea28SAndrew Rist  * distributed with this work for additional information
6*d291ea28SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*d291ea28SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*d291ea28SAndrew Rist  * "License"); you may not use this file except in compliance
9*d291ea28SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*d291ea28SAndrew Rist  *
11*d291ea28SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*d291ea28SAndrew Rist  *
13*d291ea28SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*d291ea28SAndrew Rist  * software distributed under the License is distributed on an
15*d291ea28SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*d291ea28SAndrew Rist  * KIND, either express or implied.  See the License for the
17*d291ea28SAndrew Rist  * specific language governing permissions and limitations
18*d291ea28SAndrew Rist  * under the License.
19*d291ea28SAndrew Rist  *
20*d291ea28SAndrew Rist  *************************************************************/
21cdf0e10cSrcweir 
22cdf0e10cSrcweir #include <precomp.h>
23cdf0e10cSrcweir #include "ia_ce.hxx"
24cdf0e10cSrcweir 
25cdf0e10cSrcweir 
26cdf0e10cSrcweir // NOT FULLY DEFINED SERVICES
27cdf0e10cSrcweir #include <algorithm>
28cdf0e10cSrcweir #include <cosv/tpl/tpltools.hxx>
29cdf0e10cSrcweir #include <ary/idl/i_attribute.hxx>
30cdf0e10cSrcweir #include <ary/idl/i_constant.hxx>
31cdf0e10cSrcweir #include <ary/idl/i_constgroup.hxx>
32cdf0e10cSrcweir #include <ary/idl/i_enum.hxx>
33cdf0e10cSrcweir #include <ary/idl/i_enumvalue.hxx>
34cdf0e10cSrcweir #include <ary/idl/i_exception.hxx>
35cdf0e10cSrcweir #include <ary/idl/i_function.hxx>
36cdf0e10cSrcweir #include <ary/idl/i_interface.hxx>
37cdf0e10cSrcweir #include <ary/idl/i_module.hxx>
38cdf0e10cSrcweir #include <ary/idl/i_namelookup.hxx>
39cdf0e10cSrcweir #include <ary/idl/i_property.hxx>
40cdf0e10cSrcweir #include <ary/idl/i_service.hxx>
41cdf0e10cSrcweir #include <ary/idl/i_singleton.hxx>
42cdf0e10cSrcweir #include <ary/idl/i_siservice.hxx>
43cdf0e10cSrcweir #include <ary/idl/i_sisingleton.hxx>
44cdf0e10cSrcweir #include <ary/idl/i_struct.hxx>
45cdf0e10cSrcweir #include <ary/idl/i_structelem.hxx>
46cdf0e10cSrcweir #include <ary/idl/i_traits.hxx>
47cdf0e10cSrcweir #include <ary/idl/i_typedef.hxx>
48cdf0e10cSrcweir #include <idsort.hxx>
49cdf0e10cSrcweir #include "ia_type.hxx"
50cdf0e10cSrcweir #include "is_ce.hxx"
51cdf0e10cSrcweir #include "it_tplparam.hxx"
52cdf0e10cSrcweir 
53cdf0e10cSrcweir 
54cdf0e10cSrcweir 
55cdf0e10cSrcweir 
56cdf0e10cSrcweir namespace ary
57cdf0e10cSrcweir {
58cdf0e10cSrcweir namespace idl
59cdf0e10cSrcweir {
60cdf0e10cSrcweir 
61cdf0e10cSrcweir inline Module &
lhf_Access_Module(Ce_id i_nId)62cdf0e10cSrcweir CeAdmin::lhf_Access_Module( Ce_id i_nId )
63cdf0e10cSrcweir     { return ary_cast<Module>(Storage()[i_nId]); }
64cdf0e10cSrcweir 
65cdf0e10cSrcweir inline void
lhf_Put2Storage_and_AssignId(CodeEntity & pass_io_rCe)66cdf0e10cSrcweir CeAdmin::lhf_Put2Storage_and_AssignId( CodeEntity & pass_io_rCe )
67cdf0e10cSrcweir     { // This also assigns an ID to pass_io_rCe:
68cdf0e10cSrcweir       Storage().Store_Entity(pass_io_rCe);
69cdf0e10cSrcweir       my_NameDictionary().Add_Name( pass_io_rCe.LocalName(),
70cdf0e10cSrcweir                                     pass_io_rCe.CeId(),
71cdf0e10cSrcweir                                     pass_io_rCe.AryClass(),
72cdf0e10cSrcweir                                     pass_io_rCe.Owner() );
73cdf0e10cSrcweir     }
74cdf0e10cSrcweir 
75cdf0e10cSrcweir inline void
lhf_Store_NewEntity(DYN CodeEntity & pass_io_rCe,Module & i_rOwner)76cdf0e10cSrcweir CeAdmin::lhf_Store_NewEntity( DYN CodeEntity &  pass_io_rCe,
77cdf0e10cSrcweir                                    Module &          i_rOwner )
78cdf0e10cSrcweir {
79cdf0e10cSrcweir     lhf_Put2Storage_and_AssignId(pass_io_rCe);
80cdf0e10cSrcweir     i_rOwner.Add_Name(pass_io_rCe.LocalName(), pass_io_rCe.CeId());
81cdf0e10cSrcweir }
82cdf0e10cSrcweir 
83cdf0e10cSrcweir inline void
lhf_Store_NewEntity(DYN CodeEntity & pass_io_rCe,Ce_id i_nOwnerModule)84cdf0e10cSrcweir CeAdmin::lhf_Store_NewEntity( DYN CodeEntity &  pass_io_rCe,
85cdf0e10cSrcweir                                    Ce_id             i_nOwnerModule )
86cdf0e10cSrcweir {
87cdf0e10cSrcweir     lhf_Store_NewEntity(pass_io_rCe, lhf_Access_Module(i_nOwnerModule));
88cdf0e10cSrcweir }
89cdf0e10cSrcweir 
90cdf0e10cSrcweir 
91cdf0e10cSrcweir 
CeAdmin(NameLookup & io_rNameDictionary,TypeAdmin & io_rTypePilot)92cdf0e10cSrcweir CeAdmin::CeAdmin( NameLookup &        io_rNameDictionary,
93cdf0e10cSrcweir                   TypeAdmin &         io_rTypePilot )
94cdf0e10cSrcweir     :   pStorage(new Ce_Storage),
95cdf0e10cSrcweir         pGlobalNamespace(0),
96cdf0e10cSrcweir         pNameDictionary(&io_rNameDictionary),
97cdf0e10cSrcweir         pTypePilot(&io_rTypePilot)
98cdf0e10cSrcweir {
99cdf0e10cSrcweir     Storage().Set_Reserved(
100cdf0e10cSrcweir                     predefined::ce_GlobalNamespace,
101cdf0e10cSrcweir                     *new Module );
102cdf0e10cSrcweir     pGlobalNamespace = &lhf_Access_Module(Ce_id(predefined::ce_GlobalNamespace));
103cdf0e10cSrcweir }
104cdf0e10cSrcweir 
~CeAdmin()105cdf0e10cSrcweir CeAdmin::~CeAdmin()
106cdf0e10cSrcweir {
107cdf0e10cSrcweir }
108cdf0e10cSrcweir 
109cdf0e10cSrcweir 
110cdf0e10cSrcweir 
111cdf0e10cSrcweir Module &
CheckIn_Module(Ce_id i_nParentId,const String & i_sName)112cdf0e10cSrcweir CeAdmin::CheckIn_Module( Ce_id               i_nParentId,
113cdf0e10cSrcweir                             const String &      i_sName )
114cdf0e10cSrcweir {
115cdf0e10cSrcweir     Module & rOwner  = lhf_Access_Module(i_nParentId);
116cdf0e10cSrcweir     Ce_id    nId     = rOwner.Search_Name(i_sName);
117cdf0e10cSrcweir     if (nId.IsValid())
118cdf0e10cSrcweir     {
119cdf0e10cSrcweir         return lhf_Access_Module(nId);
120cdf0e10cSrcweir     }
121cdf0e10cSrcweir 
122cdf0e10cSrcweir     Module & ret = *new Module( i_sName,
123cdf0e10cSrcweir                                 rOwner );
124cdf0e10cSrcweir     lhf_Store_NewEntity(ret, rOwner);
125cdf0e10cSrcweir     return ret;
126cdf0e10cSrcweir }
127cdf0e10cSrcweir 
128cdf0e10cSrcweir Service &
Store_Service(Ce_id i_nOwner,const String & i_sName)129cdf0e10cSrcweir CeAdmin::Store_Service( Ce_id           i_nOwner,
130cdf0e10cSrcweir                         const String &  i_sName )
131cdf0e10cSrcweir {
132cdf0e10cSrcweir     Service & ret = *new Service( i_sName,
133cdf0e10cSrcweir                                   i_nOwner );
134cdf0e10cSrcweir     lhf_Store_NewEntity(ret, i_nOwner);
135cdf0e10cSrcweir     return ret;
136cdf0e10cSrcweir }
137cdf0e10cSrcweir 
138cdf0e10cSrcweir SglIfcService &
Store_SglIfcService(Ce_id i_nOwner,const String & i_sName,Type_id i_nBaseInterface)139cdf0e10cSrcweir CeAdmin::Store_SglIfcService( Ce_id               i_nOwner,
140cdf0e10cSrcweir 								   const String &      i_sName,
141cdf0e10cSrcweir 								   Type_id             i_nBaseInterface )
142cdf0e10cSrcweir {
143cdf0e10cSrcweir     SglIfcService &
144cdf0e10cSrcweir         ret = *new SglIfcService( i_sName,
145cdf0e10cSrcweir                                   i_nOwner,
146cdf0e10cSrcweir                                   i_nBaseInterface );
147cdf0e10cSrcweir     lhf_Store_NewEntity(ret, i_nOwner);
148cdf0e10cSrcweir     return ret;
149cdf0e10cSrcweir }
150cdf0e10cSrcweir 
151cdf0e10cSrcweir Interface &
Store_Interface(Ce_id i_nOwner,const String & i_sName,Type_id i_nBase)152cdf0e10cSrcweir CeAdmin::Store_Interface( Ce_id               i_nOwner,
153cdf0e10cSrcweir                                   const String &      i_sName,
154cdf0e10cSrcweir                                   Type_id             i_nBase )
155cdf0e10cSrcweir {
156cdf0e10cSrcweir     Interface & ret = *new Interface( i_sName,
157cdf0e10cSrcweir                                       i_nOwner );
158cdf0e10cSrcweir     lhf_Store_NewEntity(ret, i_nOwner);
159cdf0e10cSrcweir     if (i_nBase.IsValid())
160cdf0e10cSrcweir         ret.Add_Base(i_nBase, 0);
161cdf0e10cSrcweir     return ret;
162cdf0e10cSrcweir }
163cdf0e10cSrcweir 
164cdf0e10cSrcweir Struct &
Store_Struct(Ce_id i_nOwner,const String & i_sName,Type_id i_nBase,const String & i_sTemplateParam)165cdf0e10cSrcweir CeAdmin::Store_Struct( Ce_id               i_nOwner,
166cdf0e10cSrcweir                                const String &      i_sName,
167cdf0e10cSrcweir                                Type_id             i_nBase,
168cdf0e10cSrcweir                                const String &      i_sTemplateParam )
169cdf0e10cSrcweir {
170cdf0e10cSrcweir     if (NOT i_sTemplateParam.empty())
171cdf0e10cSrcweir     {
172cdf0e10cSrcweir         return lhf_Store_TplStruct( i_nOwner,
173cdf0e10cSrcweir                                     i_sName,
174cdf0e10cSrcweir                                     i_nBase,
175cdf0e10cSrcweir                                     i_sTemplateParam );
176cdf0e10cSrcweir     }
177cdf0e10cSrcweir 
178cdf0e10cSrcweir     Struct & ret = *new Struct( i_sName,
179cdf0e10cSrcweir                                 i_nOwner,
180cdf0e10cSrcweir                                 i_nBase,
181cdf0e10cSrcweir                                 String::Null_(),
182cdf0e10cSrcweir                                 Type_id::Null_() );
183cdf0e10cSrcweir     lhf_Store_NewEntity(ret, i_nOwner);
184cdf0e10cSrcweir 
185cdf0e10cSrcweir     return ret;
186cdf0e10cSrcweir }
187cdf0e10cSrcweir 
188cdf0e10cSrcweir Exception &
Store_Exception(Ce_id i_nOwner,const String & i_sName,Type_id i_nBase)189cdf0e10cSrcweir CeAdmin::Store_Exception( Ce_id               i_nOwner,
190cdf0e10cSrcweir                                   const String &      i_sName,
191cdf0e10cSrcweir                                   Type_id             i_nBase )
192cdf0e10cSrcweir {
193cdf0e10cSrcweir     Exception & ret = *new Exception( i_sName,
194cdf0e10cSrcweir                                       i_nOwner,
195cdf0e10cSrcweir                                       i_nBase );
196cdf0e10cSrcweir     lhf_Store_NewEntity(ret, i_nOwner);
197cdf0e10cSrcweir     return ret;
198cdf0e10cSrcweir }
199cdf0e10cSrcweir 
200cdf0e10cSrcweir Enum &
Store_Enum(Ce_id i_nOwner,const String & i_sName)201cdf0e10cSrcweir CeAdmin::Store_Enum( Ce_id               i_nOwner,
202cdf0e10cSrcweir                              const String &      i_sName )
203cdf0e10cSrcweir {
204cdf0e10cSrcweir     Enum & ret = *new Enum( i_sName,
205cdf0e10cSrcweir                             i_nOwner );
206cdf0e10cSrcweir     lhf_Store_NewEntity(ret, i_nOwner);
207cdf0e10cSrcweir     return ret;
208cdf0e10cSrcweir }
209cdf0e10cSrcweir 
210cdf0e10cSrcweir Typedef &
Store_Typedef(Ce_id i_nOwner,const String & i_sName,Type_id i_nDefiningType)211cdf0e10cSrcweir CeAdmin::Store_Typedef( Ce_id               i_nOwner,
212cdf0e10cSrcweir                                 const String &      i_sName,
213cdf0e10cSrcweir                                 Type_id             i_nDefiningType )
214cdf0e10cSrcweir {
215cdf0e10cSrcweir     Typedef & ret = *new Typedef( i_sName,
216cdf0e10cSrcweir                                   i_nOwner,
217cdf0e10cSrcweir                                   i_nDefiningType );
218cdf0e10cSrcweir     lhf_Store_NewEntity(ret, i_nOwner);
219cdf0e10cSrcweir     return ret;
220cdf0e10cSrcweir }
221cdf0e10cSrcweir 
222cdf0e10cSrcweir 
223cdf0e10cSrcweir ConstantsGroup &
Store_ConstantsGroup(Ce_id i_nOwner,const String & i_sName)224cdf0e10cSrcweir CeAdmin::Store_ConstantsGroup( Ce_id               i_nOwner,
225cdf0e10cSrcweir                                        const String &      i_sName )
226cdf0e10cSrcweir {
227cdf0e10cSrcweir     ConstantsGroup & ret = *new ConstantsGroup( i_sName,
228cdf0e10cSrcweir                                                 i_nOwner );
229cdf0e10cSrcweir     lhf_Store_NewEntity(ret, i_nOwner);
230cdf0e10cSrcweir     return ret;
231cdf0e10cSrcweir }
232cdf0e10cSrcweir 
233cdf0e10cSrcweir Singleton &
Store_Singleton(Ce_id i_nOwner,const String & i_sName)234cdf0e10cSrcweir CeAdmin::Store_Singleton( Ce_id               i_nOwner,
235cdf0e10cSrcweir                                   const String &      i_sName )
236cdf0e10cSrcweir {
237cdf0e10cSrcweir     Singleton & ret = *new Singleton( i_sName,
238cdf0e10cSrcweir                                       i_nOwner );
239cdf0e10cSrcweir     lhf_Store_NewEntity(ret, i_nOwner);
240cdf0e10cSrcweir     return ret;
241cdf0e10cSrcweir }
242cdf0e10cSrcweir 
243cdf0e10cSrcweir SglIfcSingleton &
Store_SglIfcSingleton(Ce_id i_nOwner,const String & i_sName,Type_id i_nBaseInterface)244cdf0e10cSrcweir CeAdmin::Store_SglIfcSingleton( Ce_id               i_nOwner,
245cdf0e10cSrcweir 									 const String &      i_sName,
246cdf0e10cSrcweir 									 Type_id             i_nBaseInterface )
247cdf0e10cSrcweir {
248cdf0e10cSrcweir     SglIfcSingleton &
249cdf0e10cSrcweir         ret = *new SglIfcSingleton( i_sName,
250cdf0e10cSrcweir 									i_nOwner,
251cdf0e10cSrcweir 									i_nBaseInterface );
252cdf0e10cSrcweir     lhf_Store_NewEntity(ret, i_nOwner);
253cdf0e10cSrcweir     return ret;
254cdf0e10cSrcweir }
255cdf0e10cSrcweir 
256cdf0e10cSrcweir Constant &
Store_Constant(Ce_id i_nOwner,const String & i_sName,Type_id i_nType,const String & i_sValue)257cdf0e10cSrcweir CeAdmin::Store_Constant( Ce_id               i_nOwner,
258cdf0e10cSrcweir                                  const String &      i_sName,
259cdf0e10cSrcweir                                  Type_id             i_nType,
260cdf0e10cSrcweir                                  const String &      i_sValue )
261cdf0e10cSrcweir {
262cdf0e10cSrcweir     ConstantsGroup &
263cdf0e10cSrcweir         rOwner  = ary_cast<ConstantsGroup>(Storage()[i_nOwner]);
264cdf0e10cSrcweir     Constant & ret = *new Constant( i_sName,
265cdf0e10cSrcweir                                     i_nOwner,
266cdf0e10cSrcweir                                     rOwner.NameRoom(),
267cdf0e10cSrcweir                                     i_nType,
268cdf0e10cSrcweir                                     i_sValue );
269cdf0e10cSrcweir     lhf_Put2Storage_and_AssignId(ret);
270cdf0e10cSrcweir     rOwner.Add_Constant(ret.CeId());
271cdf0e10cSrcweir     return ret;
272cdf0e10cSrcweir }
273cdf0e10cSrcweir 
274cdf0e10cSrcweir Property &
Store_Property(Ce_id i_nOwner,const String & i_sName,Type_id i_nType,Property::Stereotypes i_stereotypes)275cdf0e10cSrcweir CeAdmin::Store_Property( Ce_id                  i_nOwner,
276cdf0e10cSrcweir                                  const String &         i_sName,
277cdf0e10cSrcweir                                  Type_id                i_nType,
278cdf0e10cSrcweir                                  Property::Stereotypes  i_stereotypes )
279cdf0e10cSrcweir {
280cdf0e10cSrcweir     Service &
281cdf0e10cSrcweir         rOwner = ary_cast<Service>(Storage()[i_nOwner]);
282cdf0e10cSrcweir     Property & ret = *new Property( i_sName,
283cdf0e10cSrcweir                                     i_nOwner,
284cdf0e10cSrcweir                                     rOwner.NameRoom(),
285cdf0e10cSrcweir                                     i_nType,
286cdf0e10cSrcweir                                     i_stereotypes );
287cdf0e10cSrcweir     lhf_Put2Storage_and_AssignId(ret);
288cdf0e10cSrcweir     rOwner.Add_Property(ret.CeId());
289cdf0e10cSrcweir     return ret;
290cdf0e10cSrcweir }
291cdf0e10cSrcweir 
292cdf0e10cSrcweir Function &
Store_Function(Ce_id i_nOwner,const String & i_sName,Type_id i_nReturnType,bool i_bOneWay)293cdf0e10cSrcweir CeAdmin::Store_Function( Ce_id               i_nOwner,
294cdf0e10cSrcweir                                  const String &      i_sName,
295cdf0e10cSrcweir                                  Type_id             i_nReturnType,
296cdf0e10cSrcweir                                  bool                i_bOneWay )
297cdf0e10cSrcweir {
298cdf0e10cSrcweir     Interface &
299cdf0e10cSrcweir         rOwner = ary_cast<Interface>(Storage()[i_nOwner]);
300cdf0e10cSrcweir     Function & ret = *new Function( i_sName,
301cdf0e10cSrcweir 									i_nOwner,
302cdf0e10cSrcweir                                     rOwner.NameRoom(),
303cdf0e10cSrcweir                                     i_nReturnType,
304cdf0e10cSrcweir                               		i_bOneWay);
305cdf0e10cSrcweir     lhf_Put2Storage_and_AssignId(ret);
306cdf0e10cSrcweir     rOwner.Add_Function(ret.CeId());
307cdf0e10cSrcweir     return ret;
308cdf0e10cSrcweir }
309cdf0e10cSrcweir 
310cdf0e10cSrcweir Function &
Store_ServiceConstructor(Ce_id i_nOwner,const String & i_sName)311cdf0e10cSrcweir CeAdmin::Store_ServiceConstructor( Ce_id               i_nOwner,
312cdf0e10cSrcweir 										const String &      i_sName )
313cdf0e10cSrcweir {
314cdf0e10cSrcweir     SglIfcService &
315cdf0e10cSrcweir                 rOwner = ary_cast<SglIfcService>(Storage()[i_nOwner]);
316cdf0e10cSrcweir     Function &  ret = *new Function( i_sName,
317cdf0e10cSrcweir 									 i_nOwner,
318cdf0e10cSrcweir 									 rOwner.NameRoom() );
319cdf0e10cSrcweir     lhf_Put2Storage_and_AssignId(ret);
320cdf0e10cSrcweir     rOwner.Add_Constructor(ret.CeId());
321cdf0e10cSrcweir     return ret;
322cdf0e10cSrcweir }
323cdf0e10cSrcweir 
324cdf0e10cSrcweir StructElement &
Store_StructMember(Ce_id i_nOwner,const String & i_sName,Type_id i_nType)325cdf0e10cSrcweir CeAdmin::Store_StructMember( Ce_id               i_nOwner,
326cdf0e10cSrcweir                                      const String &      i_sName,
327cdf0e10cSrcweir                                      Type_id             i_nType )
328cdf0e10cSrcweir {
329cdf0e10cSrcweir     Struct &
330cdf0e10cSrcweir         rOwner = ary_cast<Struct>(Storage()[i_nOwner]);
331cdf0e10cSrcweir     StructElement & ret = *new StructElement( i_sName,
332cdf0e10cSrcweir                                               i_nOwner,
333cdf0e10cSrcweir                                               rOwner.NameRoom(),
334cdf0e10cSrcweir                                               i_nType );
335cdf0e10cSrcweir     lhf_Put2Storage_and_AssignId(ret);
336cdf0e10cSrcweir     rOwner.Add_Member(ret.CeId());
337cdf0e10cSrcweir     return ret;
338cdf0e10cSrcweir }
339cdf0e10cSrcweir 
340cdf0e10cSrcweir StructElement &
Store_ExceptionMember(Ce_id i_nOwner,const String & i_sName,Type_id i_nType)341cdf0e10cSrcweir CeAdmin::Store_ExceptionMember( Ce_id               i_nOwner,
342cdf0e10cSrcweir                                         const String &      i_sName,
343cdf0e10cSrcweir                                         Type_id             i_nType )
344cdf0e10cSrcweir {
345cdf0e10cSrcweir     Exception &
346cdf0e10cSrcweir         rOwner = ary_cast<Exception>(Storage()[i_nOwner]);
347cdf0e10cSrcweir     StructElement & ret = *new StructElement( i_sName,
348cdf0e10cSrcweir                                               i_nOwner,
349cdf0e10cSrcweir                                               rOwner.NameRoom(),
350cdf0e10cSrcweir                                               i_nType );
351cdf0e10cSrcweir     lhf_Put2Storage_and_AssignId(ret);
352cdf0e10cSrcweir     rOwner.Add_Member(ret.CeId());
353cdf0e10cSrcweir     return ret;
354cdf0e10cSrcweir }
355cdf0e10cSrcweir 
356cdf0e10cSrcweir EnumValue &
Store_EnumValue(Ce_id i_nOwner,const String & i_sName,const String & i_sValue)357cdf0e10cSrcweir CeAdmin::Store_EnumValue( Ce_id               i_nOwner,
358cdf0e10cSrcweir                                   const String &      i_sName,
359cdf0e10cSrcweir                                   const String &      i_sValue )
360cdf0e10cSrcweir {
361cdf0e10cSrcweir     Enum &
362cdf0e10cSrcweir         rOwner = ary_cast<Enum>(Storage()[i_nOwner]);
363cdf0e10cSrcweir     EnumValue & ret = *new EnumValue( i_sName,
364cdf0e10cSrcweir                                       i_nOwner,
365cdf0e10cSrcweir                                       rOwner.NameRoom(),
366cdf0e10cSrcweir                                       i_sValue );
367cdf0e10cSrcweir     lhf_Put2Storage_and_AssignId(ret);
368cdf0e10cSrcweir     rOwner.Add_Value(ret.CeId());
369cdf0e10cSrcweir     return ret;
370cdf0e10cSrcweir }
371cdf0e10cSrcweir 
372cdf0e10cSrcweir Attribute &
Store_Attribute(Ce_id i_nOwner,const String & i_sName,Type_id i_nType,bool i_bReadOnly,bool i_bBound)373cdf0e10cSrcweir CeAdmin::Store_Attribute( Ce_id               i_nOwner,
374cdf0e10cSrcweir                                   const String &      i_sName,
375cdf0e10cSrcweir                                   Type_id             i_nType,
376cdf0e10cSrcweir                                   bool                i_bReadOnly,
377cdf0e10cSrcweir                                   bool                i_bBound )
378cdf0e10cSrcweir {
379cdf0e10cSrcweir     Interface &
380cdf0e10cSrcweir         rOwner = ary_cast<Interface>(Storage()[i_nOwner]);
381cdf0e10cSrcweir 
382cdf0e10cSrcweir     Attribute & ret = *new Attribute ( i_sName,
383cdf0e10cSrcweir                                        i_nOwner,
384cdf0e10cSrcweir                                        rOwner.NameRoom(),
385cdf0e10cSrcweir                                        i_nType,
386cdf0e10cSrcweir                                        i_bReadOnly,
387cdf0e10cSrcweir                                        i_bBound );
388cdf0e10cSrcweir     lhf_Put2Storage_and_AssignId(ret);
389cdf0e10cSrcweir     rOwner.Add_Attribute(ret.CeId());
390cdf0e10cSrcweir     return ret;
391cdf0e10cSrcweir }
392cdf0e10cSrcweir 
393cdf0e10cSrcweir const Module &
GlobalNamespace() const394cdf0e10cSrcweir CeAdmin::GlobalNamespace() const
395cdf0e10cSrcweir {
396cdf0e10cSrcweir     csv_assert(pGlobalNamespace);
397cdf0e10cSrcweir     return *pGlobalNamespace;
398cdf0e10cSrcweir }
399cdf0e10cSrcweir 
400cdf0e10cSrcweir const CodeEntity &
Find_Ce(Ce_id i_nId) const401cdf0e10cSrcweir CeAdmin::Find_Ce( Ce_id i_nId ) const
402cdf0e10cSrcweir {
403cdf0e10cSrcweir     return Storage()[i_nId];
404cdf0e10cSrcweir 
405cdf0e10cSrcweir }
406cdf0e10cSrcweir 
407cdf0e10cSrcweir const Module &
Find_Module(Ce_id i_nId) const408cdf0e10cSrcweir CeAdmin::Find_Module( Ce_id i_nId ) const
409cdf0e10cSrcweir {
410cdf0e10cSrcweir     return ary_cast<Module>(Storage()[i_nId]);
411cdf0e10cSrcweir }
412cdf0e10cSrcweir 
413cdf0e10cSrcweir const Module *
Search_Module(Ce_id i_nId) const414cdf0e10cSrcweir CeAdmin::Search_Module( Ce_id i_nId ) const
415cdf0e10cSrcweir {
416cdf0e10cSrcweir     if (NOT i_nId.IsValid())
417cdf0e10cSrcweir         return 0;
418cdf0e10cSrcweir     return ary_cast<Module>( & Storage()[i_nId] );
419cdf0e10cSrcweir }
420cdf0e10cSrcweir 
421cdf0e10cSrcweir const Function &
Find_Function(Ce_id i_nId) const422cdf0e10cSrcweir CeAdmin::Find_Function( Ce_id i_nId ) const
423cdf0e10cSrcweir {
424cdf0e10cSrcweir     return ary_cast<Function>(Storage()[i_nId]);
425cdf0e10cSrcweir }
426cdf0e10cSrcweir 
427cdf0e10cSrcweir const Property &
Find_Property(Ce_id i_nId) const428cdf0e10cSrcweir CeAdmin::Find_Property( Ce_id i_nId ) const
429cdf0e10cSrcweir {
430cdf0e10cSrcweir     return ary_cast<Property>(Storage()[i_nId]);
431cdf0e10cSrcweir }
432cdf0e10cSrcweir 
433cdf0e10cSrcweir const EnumValue &
Find_EnumValue(Ce_id i_nId) const434cdf0e10cSrcweir CeAdmin::Find_EnumValue( Ce_id i_nId ) const
435cdf0e10cSrcweir {
436cdf0e10cSrcweir     return ary_cast<EnumValue>(Storage()[i_nId]);
437cdf0e10cSrcweir }
438cdf0e10cSrcweir 
439cdf0e10cSrcweir const Constant &
Find_Constant(Ce_id i_nId) const440cdf0e10cSrcweir CeAdmin::Find_Constant( Ce_id i_nId ) const
441cdf0e10cSrcweir {
442cdf0e10cSrcweir     return ary_cast<Constant>(Storage()[i_nId]);
443cdf0e10cSrcweir }
444cdf0e10cSrcweir 
445cdf0e10cSrcweir const StructElement &
Find_StructElement(Ce_id i_nId) const446cdf0e10cSrcweir CeAdmin::Find_StructElement( Ce_id i_nId ) const
447cdf0e10cSrcweir {
448cdf0e10cSrcweir     return ary_cast<StructElement>(Storage()[i_nId]);
449cdf0e10cSrcweir }
450cdf0e10cSrcweir 
451cdf0e10cSrcweir void
Get_Text(StringVector & o_module,String & o_ce,String & o_member,const CodeEntity & i_ce) const452cdf0e10cSrcweir CeAdmin::Get_Text( StringVector &      o_module,
453cdf0e10cSrcweir                             String &            o_ce,
454cdf0e10cSrcweir                             String &            o_member,
455cdf0e10cSrcweir                             const CodeEntity &  i_ce ) const
456cdf0e10cSrcweir {
457cdf0e10cSrcweir     const CodeEntity * pCe = &i_ce;
458cdf0e10cSrcweir     csv::erase_container(o_module);
459cdf0e10cSrcweir     o_ce.clear();
460cdf0e10cSrcweir     o_member.clear();
461cdf0e10cSrcweir 
462cdf0e10cSrcweir     switch ( pCe->SightLevel() )
463cdf0e10cSrcweir     {
464cdf0e10cSrcweir         // Here are intentionally no breaks!
465cdf0e10cSrcweir         case sl_Member:
466cdf0e10cSrcweir                         if ( is_type<Function>(*pCe) )
467cdf0e10cSrcweir                             o_member = StreamLock(200)()
468cdf0e10cSrcweir                                             << pCe->LocalName()
469cdf0e10cSrcweir                                             << "()"
470cdf0e10cSrcweir                                             << c_str;
471cdf0e10cSrcweir                         else
472cdf0e10cSrcweir                             o_member = pCe->LocalName();
473cdf0e10cSrcweir                         pCe = & Storage()[pCe->Owner()];
474cdf0e10cSrcweir         case sl_File:
475cdf0e10cSrcweir                         o_ce = pCe->LocalName();
476cdf0e10cSrcweir                         pCe = & Storage()[pCe->NameRoom()];
477cdf0e10cSrcweir         case sl_Module:
478cdf0e10cSrcweir                         get_ModuleText(o_module,*pCe);
479cdf0e10cSrcweir                         break;
480cdf0e10cSrcweir         default:
481cdf0e10cSrcweir                         csv_assert(false);
482cdf0e10cSrcweir     }   // end switch
483cdf0e10cSrcweir }
484cdf0e10cSrcweir 
485cdf0e10cSrcweir const NameLookup &
NameDictionary() const486cdf0e10cSrcweir CeAdmin::NameDictionary() const
487cdf0e10cSrcweir {
488cdf0e10cSrcweir     return *pNameDictionary;
489cdf0e10cSrcweir }
490cdf0e10cSrcweir 
491cdf0e10cSrcweir 
492cdf0e10cSrcweir void
Get_AlphabeticalIndex(std::vector<Ce_id> & o_rResult,alphabetical_index::E_Letter i_cLetter) const493cdf0e10cSrcweir CeAdmin::Get_AlphabeticalIndex( std::vector<Ce_id> &            o_rResult,
494cdf0e10cSrcweir                                 alphabetical_index::E_Letter    i_cLetter ) const
495cdf0e10cSrcweir {
496cdf0e10cSrcweir     const int C_nLowerUpperDiff = 'a'-'A';
497cdf0e10cSrcweir 
498cdf0e10cSrcweir     // Establishing filter:
499cdf0e10cSrcweir     UINT8 filter[256];
500cdf0e10cSrcweir 
501cdf0e10cSrcweir     UINT8 nLetter = static_cast<UINT8>(i_cLetter);
502cdf0e10cSrcweir     memset(filter, 0, 256);
503cdf0e10cSrcweir     filter[nLetter] = 1;
504cdf0e10cSrcweir     if ( i_cLetter != alphabetical_index::non_alpha )
505cdf0e10cSrcweir         filter[nLetter - C_nLowerUpperDiff] = 1;
506cdf0e10cSrcweir 
507cdf0e10cSrcweir     // Gather entities which start with i_cLetter:
508cdf0e10cSrcweir     o_rResult.reserve(1000);
509cdf0e10cSrcweir     idl::Ce_Storage::c_iter
510cdf0e10cSrcweir         itEnd = Storage().End();
511cdf0e10cSrcweir     for ( idl::Ce_Storage::c_iter it = Storage().BeginUnreserved();
512cdf0e10cSrcweir           it != itEnd;
513cdf0e10cSrcweir           ++it )
514cdf0e10cSrcweir     {
515cdf0e10cSrcweir         if ( filter[ static_cast<UINT8>(*(*it).LocalName().c_str()) ] == 1 )
516cdf0e10cSrcweir             o_rResult.push_back( (*it).CeId() );
517cdf0e10cSrcweir     }
518cdf0e10cSrcweir 
519cdf0e10cSrcweir     std::sort( o_rResult.begin(),
520cdf0e10cSrcweir                o_rResult.end(),
521cdf0e10cSrcweir                IdSorter<Ce_Compare>() );
522cdf0e10cSrcweir }
523cdf0e10cSrcweir 
524cdf0e10cSrcweir 
525cdf0e10cSrcweir Module &
GlobalNamespace()526cdf0e10cSrcweir CeAdmin::GlobalNamespace()
527cdf0e10cSrcweir {
528cdf0e10cSrcweir     csv_assert(pGlobalNamespace);
529cdf0e10cSrcweir     return *pGlobalNamespace;
530cdf0e10cSrcweir }
531cdf0e10cSrcweir 
532cdf0e10cSrcweir CodeEntity &
Find_Ce(Ce_id i_nId)533cdf0e10cSrcweir CeAdmin::Find_Ce( Ce_id i_nId )
534cdf0e10cSrcweir {
535cdf0e10cSrcweir     return Storage()[i_nId];
536cdf0e10cSrcweir }
537cdf0e10cSrcweir 
538cdf0e10cSrcweir void
get_ModuleText(StringVector & o_module,const CodeEntity & i_ce) const539cdf0e10cSrcweir CeAdmin::get_ModuleText( StringVector &      o_module,
540cdf0e10cSrcweir                               const CodeEntity &  i_ce ) const
541cdf0e10cSrcweir {
542cdf0e10cSrcweir     if (i_ce.NameRoom().IsValid())
543cdf0e10cSrcweir     {
544cdf0e10cSrcweir         const CodeEntity &
545cdf0e10cSrcweir             rParent = Storage()[i_ce.NameRoom()];
546cdf0e10cSrcweir         get_ModuleText(o_module, rParent);
547cdf0e10cSrcweir         o_module.push_back(i_ce.LocalName());
548cdf0e10cSrcweir     }
549cdf0e10cSrcweir }
550cdf0e10cSrcweir 
551cdf0e10cSrcweir Struct &
lhf_Store_TplStruct(Ce_id i_nOwner,const String & i_sName,Type_id i_nBase,const String & i_sTemplateParam)552cdf0e10cSrcweir CeAdmin::lhf_Store_TplStruct( Ce_id               i_nOwner,
553cdf0e10cSrcweir 								   const String &      i_sName,
554cdf0e10cSrcweir 								   Type_id             i_nBase,
555cdf0e10cSrcweir 								   const String &      i_sTemplateParam )
556cdf0e10cSrcweir {
557cdf0e10cSrcweir     csv_assert(NOT i_sTemplateParam.empty());
558cdf0e10cSrcweir 
559cdf0e10cSrcweir     TemplateParamType &
560cdf0e10cSrcweir         rTpt = pTypePilot->Store_TemplateParamType(i_sTemplateParam);
561cdf0e10cSrcweir 
562cdf0e10cSrcweir     Struct & ret = *new Struct( i_sName,
563cdf0e10cSrcweir                                 i_nOwner,
564cdf0e10cSrcweir                                 i_nBase,
565cdf0e10cSrcweir                                 i_sTemplateParam,
566cdf0e10cSrcweir                                 rTpt.TypeId() );
567cdf0e10cSrcweir     lhf_Store_NewEntity(ret, i_nOwner);
568cdf0e10cSrcweir     rTpt.Set_StructId(ret.CeId());
569cdf0e10cSrcweir 
570cdf0e10cSrcweir     return ret;
571cdf0e10cSrcweir }
572cdf0e10cSrcweir 
573cdf0e10cSrcweir 
574cdf0e10cSrcweir }   // namespace idl
575cdf0e10cSrcweir }   // namespace ary
576