1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski #include <precomp.h>
23*b1cdbd2cSJim Jagielski #include "i2s_calculator.hxx"
24*b1cdbd2cSJim Jagielski
25*b1cdbd2cSJim Jagielski
26*b1cdbd2cSJim Jagielski // NOT FULLY DEFINED SERVICES
27*b1cdbd2cSJim Jagielski #include <algorithm>
28*b1cdbd2cSJim Jagielski #include <string.h>
29*b1cdbd2cSJim Jagielski #include <cosv/file.hxx>
30*b1cdbd2cSJim Jagielski //#include <adc_manager.hxx>
31*b1cdbd2cSJim Jagielski //#include <adc_options.hxx>
32*b1cdbd2cSJim Jagielski #include <ary/qualiname.hxx>
33*b1cdbd2cSJim Jagielski #include <ary/idl/i_enum.hxx>
34*b1cdbd2cSJim Jagielski #include <ary/idl/i_exception.hxx>
35*b1cdbd2cSJim Jagielski #include <ary/idl/i_function.hxx>
36*b1cdbd2cSJim Jagielski #include <ary/idl/i_gate.hxx>
37*b1cdbd2cSJim Jagielski #include <ary/idl/i_interface.hxx>
38*b1cdbd2cSJim Jagielski #include <ary/idl/ik_interface.hxx>
39*b1cdbd2cSJim Jagielski #include <ary/idl/i_module.hxx>
40*b1cdbd2cSJim Jagielski #include <ary/idl/i_property.hxx>
41*b1cdbd2cSJim Jagielski #include <ary/idl/i_service.hxx>
42*b1cdbd2cSJim Jagielski #include <ary/idl/i_singleton.hxx>
43*b1cdbd2cSJim Jagielski #include <ary/idl/i_siservice.hxx>
44*b1cdbd2cSJim Jagielski #include <ary/idl/i_sisingleton.hxx>
45*b1cdbd2cSJim Jagielski #include <ary/idl/i_struct.hxx>
46*b1cdbd2cSJim Jagielski #include <ary/idl/i_structelem.hxx>
47*b1cdbd2cSJim Jagielski #include <ary/idl/i_typedef.hxx>
48*b1cdbd2cSJim Jagielski #include <ary/idl/ip_ce.hxx>
49*b1cdbd2cSJim Jagielski #include <ary/idl/ip_type.hxx>
50*b1cdbd2cSJim Jagielski #include <ary/namesort.hxx>
51*b1cdbd2cSJim Jagielski #include <nametreenode.hxx>
52*b1cdbd2cSJim Jagielski #include "i_nnfinder.hxx"
53*b1cdbd2cSJim Jagielski #include "ia_ce.hxx"
54*b1cdbd2cSJim Jagielski #include "ia_type.hxx"
55*b1cdbd2cSJim Jagielski #include "is_ce.hxx"
56*b1cdbd2cSJim Jagielski #include "is_type.hxx"
57*b1cdbd2cSJim Jagielski #include "it_ce.hxx"
58*b1cdbd2cSJim Jagielski #include "it_explicit.hxx"
59*b1cdbd2cSJim Jagielski #include "it_sequence.hxx"
60*b1cdbd2cSJim Jagielski #include "it_xnameroom.hxx"
61*b1cdbd2cSJim Jagielski
62*b1cdbd2cSJim Jagielski
63*b1cdbd2cSJim Jagielski
64*b1cdbd2cSJim Jagielski namespace ary
65*b1cdbd2cSJim Jagielski {
66*b1cdbd2cSJim Jagielski namespace idl
67*b1cdbd2cSJim Jagielski {
68*b1cdbd2cSJim Jagielski
69*b1cdbd2cSJim Jagielski template <class DEST>
70*b1cdbd2cSJim Jagielski DEST *
SearchCe4Type(Type_id i_type)71*b1cdbd2cSJim Jagielski SecondariesCalculator::SearchCe4Type(Type_id i_type)
72*b1cdbd2cSJim Jagielski {
73*b1cdbd2cSJim Jagielski Ce_id
74*b1cdbd2cSJim Jagielski ce = lhf_Search_CeFromTypeId(i_type);
75*b1cdbd2cSJim Jagielski if (ce.IsValid())
76*b1cdbd2cSJim Jagielski return ary_cast<DEST>(& my_CeStorage()[ce]);
77*b1cdbd2cSJim Jagielski return 0;
78*b1cdbd2cSJim Jagielski }
79*b1cdbd2cSJim Jagielski
80*b1cdbd2cSJim Jagielski
81*b1cdbd2cSJim Jagielski typedef stg::const_iterator<CodeEntity> stg_citerator;
82*b1cdbd2cSJim Jagielski typedef stg::iterator<CodeEntity> stg_iterator;
83*b1cdbd2cSJim Jagielski
84*b1cdbd2cSJim Jagielski typedef stg::filter_iterator<CodeEntity,Interface>
85*b1cdbd2cSJim Jagielski interface_iterator;
86*b1cdbd2cSJim Jagielski
87*b1cdbd2cSJim Jagielski typedef stg::filter_iterator<Type,ExplicitType>
88*b1cdbd2cSJim Jagielski explicittype_iterator;
89*b1cdbd2cSJim Jagielski
90*b1cdbd2cSJim Jagielski typedef ary::stg::const_filter_iterator<CodeEntity,Typedef>
91*b1cdbd2cSJim Jagielski typedef_citerator;
92*b1cdbd2cSJim Jagielski
93*b1cdbd2cSJim Jagielski
94*b1cdbd2cSJim Jagielski inline Service *
lhf_SearchService(Type_id i_nType)95*b1cdbd2cSJim Jagielski SecondariesCalculator::lhf_SearchService( Type_id i_nType )
96*b1cdbd2cSJim Jagielski {
97*b1cdbd2cSJim Jagielski return SearchCe4Type<Service>(i_nType);
98*b1cdbd2cSJim Jagielski }
99*b1cdbd2cSJim Jagielski
100*b1cdbd2cSJim Jagielski inline Interface *
lhf_SearchInterface(Type_id i_nType)101*b1cdbd2cSJim Jagielski SecondariesCalculator::lhf_SearchInterface( Type_id i_nType )
102*b1cdbd2cSJim Jagielski {
103*b1cdbd2cSJim Jagielski return SearchCe4Type<Interface>(i_nType);
104*b1cdbd2cSJim Jagielski }
105*b1cdbd2cSJim Jagielski
106*b1cdbd2cSJim Jagielski inline Struct *
lhf_SearchStruct(Type_id i_nType)107*b1cdbd2cSJim Jagielski SecondariesCalculator::lhf_SearchStruct( Type_id i_nType )
108*b1cdbd2cSJim Jagielski {
109*b1cdbd2cSJim Jagielski return SearchCe4Type<Struct>(i_nType);
110*b1cdbd2cSJim Jagielski }
111*b1cdbd2cSJim Jagielski
112*b1cdbd2cSJim Jagielski inline Exception *
lhf_SearchException(Type_id i_nType)113*b1cdbd2cSJim Jagielski SecondariesCalculator::lhf_SearchException( Type_id i_nType )
114*b1cdbd2cSJim Jagielski {
115*b1cdbd2cSJim Jagielski return SearchCe4Type<Exception>(i_nType);
116*b1cdbd2cSJim Jagielski }
117*b1cdbd2cSJim Jagielski
118*b1cdbd2cSJim Jagielski inline const Ce_Storage &
my_CeStorage() const119*b1cdbd2cSJim Jagielski SecondariesCalculator::my_CeStorage() const
120*b1cdbd2cSJim Jagielski {
121*b1cdbd2cSJim Jagielski csv_assert(pCes != 0);
122*b1cdbd2cSJim Jagielski return pCes->Storage();
123*b1cdbd2cSJim Jagielski }
124*b1cdbd2cSJim Jagielski
125*b1cdbd2cSJim Jagielski inline const Type_Storage &
my_TypeStorage() const126*b1cdbd2cSJim Jagielski SecondariesCalculator::my_TypeStorage() const
127*b1cdbd2cSJim Jagielski {
128*b1cdbd2cSJim Jagielski csv_assert(pTypes != 0);
129*b1cdbd2cSJim Jagielski return pTypes->Storage();
130*b1cdbd2cSJim Jagielski }
131*b1cdbd2cSJim Jagielski
132*b1cdbd2cSJim Jagielski inline Ce_Storage &
my_CeStorage()133*b1cdbd2cSJim Jagielski SecondariesCalculator::my_CeStorage()
134*b1cdbd2cSJim Jagielski {
135*b1cdbd2cSJim Jagielski csv_assert(pCes != 0);
136*b1cdbd2cSJim Jagielski return pCes->Storage();
137*b1cdbd2cSJim Jagielski }
138*b1cdbd2cSJim Jagielski
139*b1cdbd2cSJim Jagielski inline Type_Storage &
my_TypeStorage()140*b1cdbd2cSJim Jagielski SecondariesCalculator::my_TypeStorage()
141*b1cdbd2cSJim Jagielski {
142*b1cdbd2cSJim Jagielski csv_assert(pTypes != 0);
143*b1cdbd2cSJim Jagielski return pTypes->Storage();
144*b1cdbd2cSJim Jagielski }
145*b1cdbd2cSJim Jagielski
146*b1cdbd2cSJim Jagielski inline void
insert_into2sList(CodeEntity & o_out,int i_listIndex,Ce_id i_nCe)147*b1cdbd2cSJim Jagielski SecondariesCalculator::insert_into2sList( CodeEntity & o_out,
148*b1cdbd2cSJim Jagielski int i_listIndex,
149*b1cdbd2cSJim Jagielski Ce_id i_nCe )
150*b1cdbd2cSJim Jagielski { o_out.Secondaries().Access_List(i_listIndex).push_back(i_nCe); }
151*b1cdbd2cSJim Jagielski
152*b1cdbd2cSJim Jagielski
SecondariesCalculator(CeAdmin & i_ces,TypeAdmin & i_types)153*b1cdbd2cSJim Jagielski SecondariesCalculator::SecondariesCalculator( CeAdmin & i_ces,
154*b1cdbd2cSJim Jagielski TypeAdmin & i_types )
155*b1cdbd2cSJim Jagielski : pCes(&i_ces),
156*b1cdbd2cSJim Jagielski pTypes(&i_types)
157*b1cdbd2cSJim Jagielski {
158*b1cdbd2cSJim Jagielski }
159*b1cdbd2cSJim Jagielski
~SecondariesCalculator()160*b1cdbd2cSJim Jagielski SecondariesCalculator::~SecondariesCalculator()
161*b1cdbd2cSJim Jagielski {
162*b1cdbd2cSJim Jagielski }
163*b1cdbd2cSJim Jagielski
164*b1cdbd2cSJim Jagielski
165*b1cdbd2cSJim Jagielski void
CheckAllInterfaceBases()166*b1cdbd2cSJim Jagielski SecondariesCalculator::CheckAllInterfaceBases()
167*b1cdbd2cSJim Jagielski {
168*b1cdbd2cSJim Jagielski Module &
169*b1cdbd2cSJim Jagielski rGlobalNamespace = pCes->GlobalNamespace();
170*b1cdbd2cSJim Jagielski QualifiedName
171*b1cdbd2cSJim Jagielski aXInterface("::com::sun::star::uno::XInterface","::");
172*b1cdbd2cSJim Jagielski
173*b1cdbd2cSJim Jagielski const Type &
174*b1cdbd2cSJim Jagielski rType = pTypes->CheckIn_Type( aXInterface,
175*b1cdbd2cSJim Jagielski 0,
176*b1cdbd2cSJim Jagielski rGlobalNamespace.CeId(),
177*b1cdbd2cSJim Jagielski 0 );
178*b1cdbd2cSJim Jagielski Type_id
179*b1cdbd2cSJim Jagielski nTypeXInterface = rType.TypeId();
180*b1cdbd2cSJim Jagielski const ExplicitType &
181*b1cdbd2cSJim Jagielski rExplType = ary_cast<ExplicitType>(rType);
182*b1cdbd2cSJim Jagielski Ce_id
183*b1cdbd2cSJim Jagielski nCeXInterface = lhf_Search_CeForType(rExplType);
184*b1cdbd2cSJim Jagielski
185*b1cdbd2cSJim Jagielski interface_iterator itEnd( my_CeStorage().End() );
186*b1cdbd2cSJim Jagielski for ( interface_iterator it( my_CeStorage().BeginUnreserved() );
187*b1cdbd2cSJim Jagielski it != itEnd;
188*b1cdbd2cSJim Jagielski ++it )
189*b1cdbd2cSJim Jagielski {
190*b1cdbd2cSJim Jagielski if (NOT it.IsValid())
191*b1cdbd2cSJim Jagielski continue;
192*b1cdbd2cSJim Jagielski
193*b1cdbd2cSJim Jagielski Interface &
194*b1cdbd2cSJim Jagielski rInterface = *it;
195*b1cdbd2cSJim Jagielski if ( NOT rInterface.HasBase() // According to UNO IDL syntax, an interface without base has com::sun::star::uno::XInterface as base.
196*b1cdbd2cSJim Jagielski AND rInterface.CeId() != nCeXInterface ) // XInterface must not be base of itself.
197*b1cdbd2cSJim Jagielski {
198*b1cdbd2cSJim Jagielski rInterface.Add_Base(nTypeXInterface, 0);
199*b1cdbd2cSJim Jagielski }
200*b1cdbd2cSJim Jagielski } // end for
201*b1cdbd2cSJim Jagielski }
202*b1cdbd2cSJim Jagielski
203*b1cdbd2cSJim Jagielski void
Connect_Types2Ces()204*b1cdbd2cSJim Jagielski SecondariesCalculator::Connect_Types2Ces()
205*b1cdbd2cSJim Jagielski {
206*b1cdbd2cSJim Jagielski explicittype_iterator itEnd( my_TypeStorage().End() );
207*b1cdbd2cSJim Jagielski for ( explicittype_iterator it( my_TypeStorage().BeginUnreserved() );
208*b1cdbd2cSJim Jagielski it != itEnd;
209*b1cdbd2cSJim Jagielski ++it )
210*b1cdbd2cSJim Jagielski {
211*b1cdbd2cSJim Jagielski if (NOT it.IsValid())
212*b1cdbd2cSJim Jagielski continue;
213*b1cdbd2cSJim Jagielski
214*b1cdbd2cSJim Jagielski ExplicitType &
215*b1cdbd2cSJim Jagielski rType = ary_cast<ExplicitType>(*it);
216*b1cdbd2cSJim Jagielski Ce_id
217*b1cdbd2cSJim Jagielski nRelatedCe = lhf_Search_CeForType(rType);
218*b1cdbd2cSJim Jagielski if (nRelatedCe.IsValid())
219*b1cdbd2cSJim Jagielski {
220*b1cdbd2cSJim Jagielski Ce_Type *
221*b1cdbd2cSJim Jagielski pNew = new Ce_Type(nRelatedCe, rType.TemplateParameters());
222*b1cdbd2cSJim Jagielski my_TypeStorage().Replace_Entity( rType.TypeId(),
223*b1cdbd2cSJim Jagielski *pNew );
224*b1cdbd2cSJim Jagielski }
225*b1cdbd2cSJim Jagielski } // end for
226*b1cdbd2cSJim Jagielski }
227*b1cdbd2cSJim Jagielski
228*b1cdbd2cSJim Jagielski void
Gather_CrossReferences()229*b1cdbd2cSJim Jagielski SecondariesCalculator::Gather_CrossReferences()
230*b1cdbd2cSJim Jagielski {
231*b1cdbd2cSJim Jagielski gather_Synonyms();
232*b1cdbd2cSJim Jagielski
233*b1cdbd2cSJim Jagielski for ( stg_iterator it = my_CeStorage().Begin();
234*b1cdbd2cSJim Jagielski it != my_CeStorage().End();
235*b1cdbd2cSJim Jagielski ++it )
236*b1cdbd2cSJim Jagielski {
237*b1cdbd2cSJim Jagielski (*it).Accept( static_cast< SPInst_asHost& >(*this) );
238*b1cdbd2cSJim Jagielski
239*b1cdbd2cSJim Jagielski } // end for
240*b1cdbd2cSJim Jagielski
241*b1cdbd2cSJim Jagielski sort_All2s();
242*b1cdbd2cSJim Jagielski }
243*b1cdbd2cSJim Jagielski
244*b1cdbd2cSJim Jagielski void
Make_Links2DeveloperManual(const String & i_devman_reffilepath)245*b1cdbd2cSJim Jagielski SecondariesCalculator::Make_Links2DeveloperManual(
246*b1cdbd2cSJim Jagielski const String & i_devman_reffilepath )
247*b1cdbd2cSJim Jagielski {
248*b1cdbd2cSJim Jagielski // const autodoc::Options &
249*b1cdbd2cSJim Jagielski // rOptions = TheAutodocManager().TheOptions();
250*b1cdbd2cSJim Jagielski //
251*b1cdbd2cSJim Jagielski // const String &
252*b1cdbd2cSJim Jagielski // rDeveloperManual_URL
253*b1cdbd2cSJim Jagielski // = rOptions.Get_Extra(autodoc::OPT_developer_guide);
254*b1cdbd2cSJim Jagielski // const String
255*b1cdbd2cSJim Jagielski // rDeveloperManual_ReferenceFile
256*b1cdbd2cSJim Jagielski // = rOptions.Get_Extra(autodoc::OPT_developer_guide_refs_file);
257*b1cdbd2cSJim Jagielski
258*b1cdbd2cSJim Jagielski // if ( rDeveloperManual_URL.length() == 0
259*b1cdbd2cSJim Jagielski // OR
260*b1cdbd2cSJim Jagielski // rDeveloperManual_ReferenceFile.length() == 0 )
261*b1cdbd2cSJim Jagielski // {
262*b1cdbd2cSJim Jagielski // return;
263*b1cdbd2cSJim Jagielski // }
264*b1cdbd2cSJim Jagielski
265*b1cdbd2cSJim Jagielski csv::File
266*b1cdbd2cSJim Jagielski aFile(i_devman_reffilepath, csv::CFM_READ);
267*b1cdbd2cSJim Jagielski csv::OpenCloseGuard
268*b1cdbd2cSJim Jagielski aFileOpener(aFile);
269*b1cdbd2cSJim Jagielski if (aFileOpener)
270*b1cdbd2cSJim Jagielski {
271*b1cdbd2cSJim Jagielski Read_Links2DevManual(aFile);
272*b1cdbd2cSJim Jagielski }
273*b1cdbd2cSJim Jagielski }
274*b1cdbd2cSJim Jagielski
275*b1cdbd2cSJim Jagielski namespace
276*b1cdbd2cSJim Jagielski {
277*b1cdbd2cSJim Jagielski
278*b1cdbd2cSJim Jagielski enum E_LinkMode
279*b1cdbd2cSJim Jagielski {
280*b1cdbd2cSJim Jagielski link2descr,
281*b1cdbd2cSJim Jagielski link2ref
282*b1cdbd2cSJim Jagielski };
283*b1cdbd2cSJim Jagielski
284*b1cdbd2cSJim Jagielski struct OrderCeIdsByName
285*b1cdbd2cSJim Jagielski {
OrderCeIdsByNameary::idl::__anon87b15bf80111::OrderCeIdsByName286*b1cdbd2cSJim Jagielski OrderCeIdsByName(
287*b1cdbd2cSJim Jagielski const Ce_Storage & i_storage )
288*b1cdbd2cSJim Jagielski : rStorage(i_storage),
289*b1cdbd2cSJim Jagielski aNameComparison() {}
operator ()ary::idl::__anon87b15bf80111::OrderCeIdsByName290*b1cdbd2cSJim Jagielski bool operator()(
291*b1cdbd2cSJim Jagielski Ce_id i_ce1,
292*b1cdbd2cSJim Jagielski Ce_id i_ce2 ) const
293*b1cdbd2cSJim Jagielski {
294*b1cdbd2cSJim Jagielski return aNameComparison( rStorage[i_ce1].LocalName(),
295*b1cdbd2cSJim Jagielski rStorage[i_ce2].LocalName() );
296*b1cdbd2cSJim Jagielski }
297*b1cdbd2cSJim Jagielski
298*b1cdbd2cSJim Jagielski private:
299*b1cdbd2cSJim Jagielski const Ce_Storage & rStorage;
300*b1cdbd2cSJim Jagielski LesserName aNameComparison;
301*b1cdbd2cSJim Jagielski };
302*b1cdbd2cSJim Jagielski
303*b1cdbd2cSJim Jagielski
304*b1cdbd2cSJim Jagielski }
305*b1cdbd2cSJim Jagielski
306*b1cdbd2cSJim Jagielski
307*b1cdbd2cSJim Jagielski
308*b1cdbd2cSJim Jagielski void
do_Process(const Service & i_rData)309*b1cdbd2cSJim Jagielski SecondariesCalculator::do_Process( const Service & i_rData )
310*b1cdbd2cSJim Jagielski {
311*b1cdbd2cSJim Jagielski const Service &
312*b1cdbd2cSJim Jagielski rService = ary_cast<Service>(i_rData);
313*b1cdbd2cSJim Jagielski
314*b1cdbd2cSJim Jagielski // Interfaces:
315*b1cdbd2cSJim Jagielski assignImplementation_toAServicesInterfaces( rService.CeId(),
316*b1cdbd2cSJim Jagielski rService.CeId(),
317*b1cdbd2cSJim Jagielski interface_2s_ExportingServices );
318*b1cdbd2cSJim Jagielski // Services and their interfaces:
319*b1cdbd2cSJim Jagielski recursive_AssignIncludingService(rService.CeId(), rService);
320*b1cdbd2cSJim Jagielski }
321*b1cdbd2cSJim Jagielski
322*b1cdbd2cSJim Jagielski void
do_Process(const Interface & i_rData)323*b1cdbd2cSJim Jagielski SecondariesCalculator::do_Process( const Interface & i_rData )
324*b1cdbd2cSJim Jagielski {
325*b1cdbd2cSJim Jagielski assign_AsDerivedInterface( ary_cast<Interface>(i_rData) );
326*b1cdbd2cSJim Jagielski }
327*b1cdbd2cSJim Jagielski
328*b1cdbd2cSJim Jagielski void
do_Process(const Struct & i_rData)329*b1cdbd2cSJim Jagielski SecondariesCalculator::do_Process( const Struct & i_rData )
330*b1cdbd2cSJim Jagielski {
331*b1cdbd2cSJim Jagielski assign_AsDerivedStruct( ary_cast<Struct>(i_rData) );
332*b1cdbd2cSJim Jagielski }
333*b1cdbd2cSJim Jagielski
334*b1cdbd2cSJim Jagielski void
do_Process(const Exception & i_rData)335*b1cdbd2cSJim Jagielski SecondariesCalculator::do_Process( const Exception & i_rData )
336*b1cdbd2cSJim Jagielski {
337*b1cdbd2cSJim Jagielski assign_AsDerivedException( ary_cast<Exception>(i_rData) );
338*b1cdbd2cSJim Jagielski }
339*b1cdbd2cSJim Jagielski
340*b1cdbd2cSJim Jagielski void
do_Process(const Typedef &)341*b1cdbd2cSJim Jagielski SecondariesCalculator::do_Process( const Typedef & )
342*b1cdbd2cSJim Jagielski {
343*b1cdbd2cSJim Jagielski // KORR_FUTURE
344*b1cdbd2cSJim Jagielski // Find out what was meant here ???
345*b1cdbd2cSJim Jagielski
346*b1cdbd2cSJim Jagielski // const Typedef &
347*b1cdbd2cSJim Jagielski // rTypedef = ary_cast<Typedef>(i_rData);
348*b1cdbd2cSJim Jagielski }
349*b1cdbd2cSJim Jagielski
350*b1cdbd2cSJim Jagielski void
do_Process(const Singleton & i_rData)351*b1cdbd2cSJim Jagielski SecondariesCalculator::do_Process( const Singleton & i_rData )
352*b1cdbd2cSJim Jagielski {
353*b1cdbd2cSJim Jagielski const Singleton &
354*b1cdbd2cSJim Jagielski rSingleton = ary_cast<Singleton>(i_rData);
355*b1cdbd2cSJim Jagielski
356*b1cdbd2cSJim Jagielski Service *
357*b1cdbd2cSJim Jagielski pServ = lhf_SearchService(rSingleton.AssociatedService());
358*b1cdbd2cSJim Jagielski if (pServ != 0)
359*b1cdbd2cSJim Jagielski {
360*b1cdbd2cSJim Jagielski insert_into2sUnique( *pServ,
361*b1cdbd2cSJim Jagielski service_2s_InstantiatingSingletons,
362*b1cdbd2cSJim Jagielski rSingleton.CeId() );
363*b1cdbd2cSJim Jagielski }
364*b1cdbd2cSJim Jagielski
365*b1cdbd2cSJim Jagielski // Interfaces:
366*b1cdbd2cSJim Jagielski assignImplementation_toAServicesInterfaces( rSingleton.CeId(),
367*b1cdbd2cSJim Jagielski lhf_Search_CeFromTypeId(rSingleton.AssociatedService()),
368*b1cdbd2cSJim Jagielski interface_2s_ExportingSingletons );
369*b1cdbd2cSJim Jagielski }
370*b1cdbd2cSJim Jagielski
371*b1cdbd2cSJim Jagielski void
do_Process(const SglIfcService & i_rData)372*b1cdbd2cSJim Jagielski SecondariesCalculator::do_Process( const SglIfcService & i_rData )
373*b1cdbd2cSJim Jagielski {
374*b1cdbd2cSJim Jagielski const SglIfcService &
375*b1cdbd2cSJim Jagielski rSglIfcService = ary_cast<SglIfcService>(i_rData);
376*b1cdbd2cSJim Jagielski
377*b1cdbd2cSJim Jagielski assignImplementation_toAServicesInterfaces( rSglIfcService.CeId(),
378*b1cdbd2cSJim Jagielski rSglIfcService.CeId(),
379*b1cdbd2cSJim Jagielski interface_2s_ExportingServices );
380*b1cdbd2cSJim Jagielski }
381*b1cdbd2cSJim Jagielski
382*b1cdbd2cSJim Jagielski void
do_Process(const SglIfcSingleton & i_rData)383*b1cdbd2cSJim Jagielski SecondariesCalculator::do_Process( const SglIfcSingleton & i_rData )
384*b1cdbd2cSJim Jagielski {
385*b1cdbd2cSJim Jagielski const SglIfcSingleton &
386*b1cdbd2cSJim Jagielski rSglIfcSingleton = ary_cast<SglIfcSingleton>(i_rData);
387*b1cdbd2cSJim Jagielski
388*b1cdbd2cSJim Jagielski Type_id nBase = rSglIfcSingleton.BaseInterface();
389*b1cdbd2cSJim Jagielski recursive_AssignImplementation_toExportedInterface( rSglIfcSingleton.CeId(),
390*b1cdbd2cSJim Jagielski nBase,
391*b1cdbd2cSJim Jagielski interface_2s_ExportingSingletons );
392*b1cdbd2cSJim Jagielski }
393*b1cdbd2cSJim Jagielski
394*b1cdbd2cSJim Jagielski void
do_Process(const Function & i_rData)395*b1cdbd2cSJim Jagielski SecondariesCalculator::do_Process( const Function & i_rData )
396*b1cdbd2cSJim Jagielski {
397*b1cdbd2cSJim Jagielski const Function &
398*b1cdbd2cSJim Jagielski rFunction = ary_cast<Function>(i_rData);
399*b1cdbd2cSJim Jagielski
400*b1cdbd2cSJim Jagielski recursive_AssignFunction_toCeAsReturn(rFunction.CeId(), rFunction.ReturnType());
401*b1cdbd2cSJim Jagielski
402*b1cdbd2cSJim Jagielski for ( Function::ParamList::const_iterator itp = rFunction.Parameters().begin();
403*b1cdbd2cSJim Jagielski itp != rFunction.Parameters().end();
404*b1cdbd2cSJim Jagielski ++itp )
405*b1cdbd2cSJim Jagielski {
406*b1cdbd2cSJim Jagielski recursive_AssignFunction_toCeAsParameter(rFunction.CeId(), (*itp).Type());
407*b1cdbd2cSJim Jagielski } // end for (itp)
408*b1cdbd2cSJim Jagielski
409*b1cdbd2cSJim Jagielski for ( Function::ExceptionList::const_iterator itx = rFunction.Exceptions().begin();
410*b1cdbd2cSJim Jagielski itx != rFunction.Exceptions().end();
411*b1cdbd2cSJim Jagielski ++itx )
412*b1cdbd2cSJim Jagielski {
413*b1cdbd2cSJim Jagielski Exception *
414*b1cdbd2cSJim Jagielski pX = lhf_SearchException(*itx);
415*b1cdbd2cSJim Jagielski if (pX != 0)
416*b1cdbd2cSJim Jagielski {
417*b1cdbd2cSJim Jagielski insert_into2sUnique(*pX, exception_2s_RaisingFunctions, rFunction.CeId());
418*b1cdbd2cSJim Jagielski }
419*b1cdbd2cSJim Jagielski } // end for (itx)
420*b1cdbd2cSJim Jagielski }
421*b1cdbd2cSJim Jagielski
422*b1cdbd2cSJim Jagielski void
do_Process(const StructElement & i_rData)423*b1cdbd2cSJim Jagielski SecondariesCalculator::do_Process( const StructElement & i_rData )
424*b1cdbd2cSJim Jagielski {
425*b1cdbd2cSJim Jagielski const StructElement &
426*b1cdbd2cSJim Jagielski rStructElement = ary_cast<StructElement>(i_rData);
427*b1cdbd2cSJim Jagielski
428*b1cdbd2cSJim Jagielski recursive_AssignStructElement_toCeAsDataType(rStructElement.CeId(), rStructElement.Type());
429*b1cdbd2cSJim Jagielski }
430*b1cdbd2cSJim Jagielski
431*b1cdbd2cSJim Jagielski void
do_Process(const Property & i_rData)432*b1cdbd2cSJim Jagielski SecondariesCalculator::do_Process( const Property & i_rData )
433*b1cdbd2cSJim Jagielski {
434*b1cdbd2cSJim Jagielski const Property &
435*b1cdbd2cSJim Jagielski rProperty = ary_cast<Property>(i_rData);
436*b1cdbd2cSJim Jagielski
437*b1cdbd2cSJim Jagielski recursive_AssignStructElement_toCeAsDataType(rProperty.CeId(), rProperty.Type());
438*b1cdbd2cSJim Jagielski }
439*b1cdbd2cSJim Jagielski
440*b1cdbd2cSJim Jagielski Ce_id
lhf_Search_CeForType(const ExplicitType & i_rType) const441*b1cdbd2cSJim Jagielski SecondariesCalculator::lhf_Search_CeForType( const ExplicitType & i_rType ) const
442*b1cdbd2cSJim Jagielski {
443*b1cdbd2cSJim Jagielski const ExplicitNameRoom &
444*b1cdbd2cSJim Jagielski rExplicitNameRoom = ary_cast<ExplicitNameRoom>(
445*b1cdbd2cSJim Jagielski my_TypeStorage()[i_rType.NameRoom()] );
446*b1cdbd2cSJim Jagielski Find_ModuleNode
447*b1cdbd2cSJim Jagielski rNodeFinder( my_CeStorage(),
448*b1cdbd2cSJim Jagielski rExplicitNameRoom.NameChain_Begin(),
449*b1cdbd2cSJim Jagielski rExplicitNameRoom.NameChain_End(),
450*b1cdbd2cSJim Jagielski i_rType.Name() );
451*b1cdbd2cSJim Jagielski
452*b1cdbd2cSJim Jagielski if ( rExplicitNameRoom.IsAbsolute() )
453*b1cdbd2cSJim Jagielski {
454*b1cdbd2cSJim Jagielski const Module &
455*b1cdbd2cSJim Jagielski rGlobalNamespace = ary_cast<Module>(
456*b1cdbd2cSJim Jagielski my_CeStorage()[predefined::ce_GlobalNamespace]);
457*b1cdbd2cSJim Jagielski return Search_SubTree( rGlobalNamespace,
458*b1cdbd2cSJim Jagielski rNodeFinder );
459*b1cdbd2cSJim Jagielski }
460*b1cdbd2cSJim Jagielski else
461*b1cdbd2cSJim Jagielski {
462*b1cdbd2cSJim Jagielski const Module &
463*b1cdbd2cSJim Jagielski rStartModule = ary_cast<Module>(
464*b1cdbd2cSJim Jagielski my_CeStorage()[i_rType.ModuleOfOccurrence()]);
465*b1cdbd2cSJim Jagielski Ce_id ret = Search_SubTree_UpTillRoot( rStartModule,
466*b1cdbd2cSJim Jagielski rNodeFinder );
467*b1cdbd2cSJim Jagielski return ret;
468*b1cdbd2cSJim Jagielski } // endif (rExplicitNameRoom.IsAbsolute()) else
469*b1cdbd2cSJim Jagielski }
470*b1cdbd2cSJim Jagielski
471*b1cdbd2cSJim Jagielski Ce_id
lhf_Search_CeFromTypeId(Type_id i_nType) const472*b1cdbd2cSJim Jagielski SecondariesCalculator::lhf_Search_CeFromTypeId( Type_id i_nType ) const
473*b1cdbd2cSJim Jagielski {
474*b1cdbd2cSJim Jagielski if (NOT i_nType.IsValid())
475*b1cdbd2cSJim Jagielski return Ce_id(0);
476*b1cdbd2cSJim Jagielski const Ce_Type *
477*b1cdbd2cSJim Jagielski pType = ary_cast<Ce_Type>( & my_TypeStorage()[i_nType] );
478*b1cdbd2cSJim Jagielski return pType != 0
479*b1cdbd2cSJim Jagielski ? pType->RelatedCe()
480*b1cdbd2cSJim Jagielski : Ce_id_Null();
481*b1cdbd2cSJim Jagielski }
482*b1cdbd2cSJim Jagielski
483*b1cdbd2cSJim Jagielski void
assign_CurLink(char * i_text,const String & i_link,const String & i_linkUI,bool i_isDescr,int i_lineCount)484*b1cdbd2cSJim Jagielski SecondariesCalculator::assign_CurLink( char * i_text,
485*b1cdbd2cSJim Jagielski const String & i_link,
486*b1cdbd2cSJim Jagielski const String & i_linkUI,
487*b1cdbd2cSJim Jagielski bool i_isDescr,
488*b1cdbd2cSJim Jagielski int i_lineCount )
489*b1cdbd2cSJim Jagielski {
490*b1cdbd2cSJim Jagielski csv_assert(i_text != 0);
491*b1cdbd2cSJim Jagielski
492*b1cdbd2cSJim Jagielski const ary::idl::Module *
493*b1cdbd2cSJim Jagielski pModule = & ary_cast<Module>(
494*b1cdbd2cSJim Jagielski my_CeStorage()[predefined::ce_GlobalNamespace]);
495*b1cdbd2cSJim Jagielski
496*b1cdbd2cSJim Jagielski char * pPastNext = 0;
497*b1cdbd2cSJim Jagielski char * pNext = i_text;
498*b1cdbd2cSJim Jagielski for ( ;
499*b1cdbd2cSJim Jagielski (pPastNext = strstr(pNext,".")) != 0;
500*b1cdbd2cSJim Jagielski pNext = pPastNext + 1 )
501*b1cdbd2cSJim Jagielski {
502*b1cdbd2cSJim Jagielski String sNext(pNext, pPastNext-pNext);
503*b1cdbd2cSJim Jagielski Ce_id nModule = pModule->Search_Name(sNext);
504*b1cdbd2cSJim Jagielski if (nModule.IsValid())
505*b1cdbd2cSJim Jagielski {
506*b1cdbd2cSJim Jagielski pModule = ary_cast<Module>( & my_CeStorage()[nModule] );
507*b1cdbd2cSJim Jagielski }
508*b1cdbd2cSJim Jagielski else
509*b1cdbd2cSJim Jagielski {
510*b1cdbd2cSJim Jagielski pModule = 0;
511*b1cdbd2cSJim Jagielski }
512*b1cdbd2cSJim Jagielski
513*b1cdbd2cSJim Jagielski if (pModule == 0)
514*b1cdbd2cSJim Jagielski {
515*b1cdbd2cSJim Jagielski Cerr() << "Warning: Invalid line nr. "
516*b1cdbd2cSJim Jagielski << i_lineCount
517*b1cdbd2cSJim Jagielski << " in DevelopersGuide reference file:\n"
518*b1cdbd2cSJim Jagielski << reinterpret_cast< const char* >(i_text)
519*b1cdbd2cSJim Jagielski << "\n"
520*b1cdbd2cSJim Jagielski << Endl();
521*b1cdbd2cSJim Jagielski return;
522*b1cdbd2cSJim Jagielski }
523*b1cdbd2cSJim Jagielski } // end for
524*b1cdbd2cSJim Jagielski
525*b1cdbd2cSJim Jagielski pPastNext = strchr(pNext,':');
526*b1cdbd2cSJim Jagielski bool bMember = pPastNext != 0;
527*b1cdbd2cSJim Jagielski String sCe( pNext, (bMember ? csv::str::size(pPastNext-pNext) : csv::str::maxsize) );
528*b1cdbd2cSJim Jagielski
529*b1cdbd2cSJim Jagielski // KORR_FUTURE
530*b1cdbd2cSJim Jagielski // String sMember(bMember ? pPastNext+1, "");
531*b1cdbd2cSJim Jagielski
532*b1cdbd2cSJim Jagielski Ce_id nCe = pModule->Search_Name(sCe);
533*b1cdbd2cSJim Jagielski if (NOT nCe.IsValid())
534*b1cdbd2cSJim Jagielski {
535*b1cdbd2cSJim Jagielski Cerr() << "Warning: Invalid line nr. "
536*b1cdbd2cSJim Jagielski << i_lineCount
537*b1cdbd2cSJim Jagielski << " in DevelopersGuide reference file:\n"
538*b1cdbd2cSJim Jagielski << reinterpret_cast< const char* >(i_text)
539*b1cdbd2cSJim Jagielski << "\n"
540*b1cdbd2cSJim Jagielski << Endl();
541*b1cdbd2cSJim Jagielski return;
542*b1cdbd2cSJim Jagielski }
543*b1cdbd2cSJim Jagielski
544*b1cdbd2cSJim Jagielski CodeEntity &
545*b1cdbd2cSJim Jagielski rCe = my_CeStorage()[nCe];
546*b1cdbd2cSJim Jagielski if (NOT bMember)
547*b1cdbd2cSJim Jagielski {
548*b1cdbd2cSJim Jagielski if (i_isDescr)
549*b1cdbd2cSJim Jagielski rCe.Secondaries().Add_Link2DescriptionInManual(i_link, i_linkUI);
550*b1cdbd2cSJim Jagielski else
551*b1cdbd2cSJim Jagielski rCe.Secondaries().Add_Link2RefInManual(i_link, i_linkUI);
552*b1cdbd2cSJim Jagielski return;
553*b1cdbd2cSJim Jagielski }
554*b1cdbd2cSJim Jagielski else
555*b1cdbd2cSJim Jagielski {
556*b1cdbd2cSJim Jagielski // KORR_FUTURE
557*b1cdbd2cSJim Jagielski // Provisorial just doing nothing (or may be
558*b1cdbd2cSJim Jagielski // adding a link at main Ces lists).
559*b1cdbd2cSJim Jagielski // if (i_isDescr)
560*b1cdbd2cSJim Jagielski // rCe.Secondaries().Add_Link2DescriptionInManual(i_link);
561*b1cdbd2cSJim Jagielski // else
562*b1cdbd2cSJim Jagielski // rCe.Secondaries().Add_Link2RefInManual(i_link);
563*b1cdbd2cSJim Jagielski }
564*b1cdbd2cSJim Jagielski }
565*b1cdbd2cSJim Jagielski
566*b1cdbd2cSJim Jagielski void
gather_Synonyms()567*b1cdbd2cSJim Jagielski SecondariesCalculator::gather_Synonyms()
568*b1cdbd2cSJim Jagielski {
569*b1cdbd2cSJim Jagielski const Ce_Storage &
570*b1cdbd2cSJim Jagielski cstrg = my_CeStorage();
571*b1cdbd2cSJim Jagielski typedef_citerator itEnd(cstrg.End());
572*b1cdbd2cSJim Jagielski for ( typedef_citerator it(cstrg.Begin());
573*b1cdbd2cSJim Jagielski it != itEnd;
574*b1cdbd2cSJim Jagielski ++it )
575*b1cdbd2cSJim Jagielski {
576*b1cdbd2cSJim Jagielski if (NOT it.IsValid())
577*b1cdbd2cSJim Jagielski continue;
578*b1cdbd2cSJim Jagielski
579*b1cdbd2cSJim Jagielski const Typedef &
580*b1cdbd2cSJim Jagielski rTypedef = *it;
581*b1cdbd2cSJim Jagielski recursive_AssignAsSynonym(rTypedef.CeId(), rTypedef);
582*b1cdbd2cSJim Jagielski } // end for (itTd)
583*b1cdbd2cSJim Jagielski }
584*b1cdbd2cSJim Jagielski
585*b1cdbd2cSJim Jagielski void
recursive_AssignAsSynonym(Ce_id i_synonymousTypedefsId,const Typedef & i_TypedefToCheck)586*b1cdbd2cSJim Jagielski SecondariesCalculator::recursive_AssignAsSynonym( Ce_id i_synonymousTypedefsId,
587*b1cdbd2cSJim Jagielski const Typedef & i_TypedefToCheck )
588*b1cdbd2cSJim Jagielski {
589*b1cdbd2cSJim Jagielski Ce_id
590*b1cdbd2cSJim Jagielski nCe = lhf_Search_CeFromTypeId(i_TypedefToCheck.DefiningType());
591*b1cdbd2cSJim Jagielski if (NOT nCe.IsValid())
592*b1cdbd2cSJim Jagielski return;
593*b1cdbd2cSJim Jagielski CodeEntity &
594*b1cdbd2cSJim Jagielski rCe = my_CeStorage()[nCe];
595*b1cdbd2cSJim Jagielski
596*b1cdbd2cSJim Jagielski switch (rCe.AryClass()) // KORR_FUTURE: make this faster, remove switch.
597*b1cdbd2cSJim Jagielski {
598*b1cdbd2cSJim Jagielski case Interface::class_id:
599*b1cdbd2cSJim Jagielski insert_into2sList( rCe,
600*b1cdbd2cSJim Jagielski interface_2s_SynonymTypedefs,
601*b1cdbd2cSJim Jagielski i_synonymousTypedefsId );
602*b1cdbd2cSJim Jagielski break;
603*b1cdbd2cSJim Jagielski case Struct::class_id:
604*b1cdbd2cSJim Jagielski insert_into2sList( rCe,
605*b1cdbd2cSJim Jagielski struct_2s_SynonymTypedefs,
606*b1cdbd2cSJim Jagielski i_synonymousTypedefsId );
607*b1cdbd2cSJim Jagielski break;
608*b1cdbd2cSJim Jagielski case Enum::class_id:
609*b1cdbd2cSJim Jagielski insert_into2sList( rCe,
610*b1cdbd2cSJim Jagielski enum_2s_SynonymTypedefs,
611*b1cdbd2cSJim Jagielski i_synonymousTypedefsId );
612*b1cdbd2cSJim Jagielski break;
613*b1cdbd2cSJim Jagielski case Typedef::class_id:
614*b1cdbd2cSJim Jagielski insert_into2sList( rCe,
615*b1cdbd2cSJim Jagielski typedef_2s_SynonymTypedefs,
616*b1cdbd2cSJim Jagielski i_synonymousTypedefsId );
617*b1cdbd2cSJim Jagielski recursive_AssignAsSynonym( i_synonymousTypedefsId,
618*b1cdbd2cSJim Jagielski static_cast< Typedef& >(rCe) );
619*b1cdbd2cSJim Jagielski break;
620*b1cdbd2cSJim Jagielski // default: do nothing.
621*b1cdbd2cSJim Jagielski }
622*b1cdbd2cSJim Jagielski }
623*b1cdbd2cSJim Jagielski
624*b1cdbd2cSJim Jagielski void
recursive_AssignIncludingService(Ce_id i_includingServicesId,const Service & i_ServiceToCheckItsIncludes)625*b1cdbd2cSJim Jagielski SecondariesCalculator::recursive_AssignIncludingService( Ce_id i_includingServicesId,
626*b1cdbd2cSJim Jagielski const Service & i_ServiceToCheckItsIncludes )
627*b1cdbd2cSJim Jagielski {
628*b1cdbd2cSJim Jagielski Dyn_StdConstIterator<CommentedRelation>
629*b1cdbd2cSJim Jagielski pIncludedServices;
630*b1cdbd2cSJim Jagielski i_ServiceToCheckItsIncludes.Get_IncludedServices(pIncludedServices);
631*b1cdbd2cSJim Jagielski
632*b1cdbd2cSJim Jagielski for ( StdConstIterator<CommentedRelation> &
633*b1cdbd2cSJim Jagielski itServ = *pIncludedServices;
634*b1cdbd2cSJim Jagielski itServ;
635*b1cdbd2cSJim Jagielski ++itServ )
636*b1cdbd2cSJim Jagielski {
637*b1cdbd2cSJim Jagielski Service *
638*b1cdbd2cSJim Jagielski pServ = lhf_SearchService((*itServ).Type());
639*b1cdbd2cSJim Jagielski if (pServ != 0)
640*b1cdbd2cSJim Jagielski {
641*b1cdbd2cSJim Jagielski insert_into2sUnique( *pServ,
642*b1cdbd2cSJim Jagielski service_2s_IncludingServices,
643*b1cdbd2cSJim Jagielski i_includingServicesId
644*b1cdbd2cSJim Jagielski );
645*b1cdbd2cSJim Jagielski recursive_AssignIncludingService(i_includingServicesId, *pServ);
646*b1cdbd2cSJim Jagielski
647*b1cdbd2cSJim Jagielski } // end if
648*b1cdbd2cSJim Jagielski
649*b1cdbd2cSJim Jagielski assignImplementation_toAServicesInterfaces( i_includingServicesId,
650*b1cdbd2cSJim Jagielski lhf_Search_CeFromTypeId( (*itServ).Type() ),
651*b1cdbd2cSJim Jagielski interface_2s_ExportingServices );
652*b1cdbd2cSJim Jagielski } // end for
653*b1cdbd2cSJim Jagielski }
654*b1cdbd2cSJim Jagielski
655*b1cdbd2cSJim Jagielski void
assign_AsDerivedInterface(const Interface & i_rDerived)656*b1cdbd2cSJim Jagielski SecondariesCalculator::assign_AsDerivedInterface( const Interface & i_rDerived )
657*b1cdbd2cSJim Jagielski {
658*b1cdbd2cSJim Jagielski ary::Dyn_StdConstIterator<ary::idl::CommentedRelation>
659*b1cdbd2cSJim Jagielski pHelp;
660*b1cdbd2cSJim Jagielski ary::idl::ifc_interface::attr::Get_Bases(pHelp, i_rDerived);
661*b1cdbd2cSJim Jagielski
662*b1cdbd2cSJim Jagielski for ( ary::StdConstIterator<ary::idl::CommentedRelation> & it = *pHelp;
663*b1cdbd2cSJim Jagielski it.operator bool();
664*b1cdbd2cSJim Jagielski ++it )
665*b1cdbd2cSJim Jagielski {
666*b1cdbd2cSJim Jagielski Interface *
667*b1cdbd2cSJim Jagielski pIfc = lhf_SearchInterface( (*it).Type() );
668*b1cdbd2cSJim Jagielski if (pIfc == 0)
669*b1cdbd2cSJim Jagielski continue;
670*b1cdbd2cSJim Jagielski
671*b1cdbd2cSJim Jagielski insert_into2sList( *pIfc,
672*b1cdbd2cSJim Jagielski interface_2s_Derivations,
673*b1cdbd2cSJim Jagielski i_rDerived.CeId() );
674*b1cdbd2cSJim Jagielski } // end for
675*b1cdbd2cSJim Jagielski }
676*b1cdbd2cSJim Jagielski
677*b1cdbd2cSJim Jagielski void
assign_AsDerivedStruct(const Struct & i_rDerived)678*b1cdbd2cSJim Jagielski SecondariesCalculator::assign_AsDerivedStruct( const Struct & i_rDerived )
679*b1cdbd2cSJim Jagielski {
680*b1cdbd2cSJim Jagielski Type_id
681*b1cdbd2cSJim Jagielski nBase = i_rDerived.Base();
682*b1cdbd2cSJim Jagielski if (nBase.IsValid())
683*b1cdbd2cSJim Jagielski {
684*b1cdbd2cSJim Jagielski Struct *
685*b1cdbd2cSJim Jagielski pParent = lhf_SearchStruct(nBase);
686*b1cdbd2cSJim Jagielski if (pParent != 0)
687*b1cdbd2cSJim Jagielski {
688*b1cdbd2cSJim Jagielski insert_into2sList( *pParent,
689*b1cdbd2cSJim Jagielski struct_2s_Derivations,
690*b1cdbd2cSJim Jagielski i_rDerived.CeId() );
691*b1cdbd2cSJim Jagielski }
692*b1cdbd2cSJim Jagielski }
693*b1cdbd2cSJim Jagielski }
694*b1cdbd2cSJim Jagielski
695*b1cdbd2cSJim Jagielski void
assign_AsDerivedException(const Exception & i_rDerived)696*b1cdbd2cSJim Jagielski SecondariesCalculator::assign_AsDerivedException( const Exception & i_rDerived )
697*b1cdbd2cSJim Jagielski {
698*b1cdbd2cSJim Jagielski Type_id
699*b1cdbd2cSJim Jagielski nBase = i_rDerived.Base();
700*b1cdbd2cSJim Jagielski if (nBase.IsValid())
701*b1cdbd2cSJim Jagielski {
702*b1cdbd2cSJim Jagielski Exception *
703*b1cdbd2cSJim Jagielski pParent = lhf_SearchException(nBase);
704*b1cdbd2cSJim Jagielski if (pParent != 0)
705*b1cdbd2cSJim Jagielski {
706*b1cdbd2cSJim Jagielski insert_into2sList( *pParent,
707*b1cdbd2cSJim Jagielski exception_2s_Derivations,
708*b1cdbd2cSJim Jagielski i_rDerived.CeId() );
709*b1cdbd2cSJim Jagielski } // end if
710*b1cdbd2cSJim Jagielski } // end if
711*b1cdbd2cSJim Jagielski }
712*b1cdbd2cSJim Jagielski
713*b1cdbd2cSJim Jagielski void
assignImplementation_toAServicesInterfaces(Ce_id i_nImpl,Ce_id i_nService,E_2s_of_Interface i_eList)714*b1cdbd2cSJim Jagielski SecondariesCalculator::assignImplementation_toAServicesInterfaces(
715*b1cdbd2cSJim Jagielski Ce_id i_nImpl,
716*b1cdbd2cSJim Jagielski Ce_id i_nService,
717*b1cdbd2cSJim Jagielski E_2s_of_Interface i_eList )
718*b1cdbd2cSJim Jagielski {
719*b1cdbd2cSJim Jagielski if (NOT i_nService.IsValid())
720*b1cdbd2cSJim Jagielski return;
721*b1cdbd2cSJim Jagielski Service *
722*b1cdbd2cSJim Jagielski pService = ary_cast<Service>( & my_CeStorage()[i_nService] );
723*b1cdbd2cSJim Jagielski SglIfcService *
724*b1cdbd2cSJim Jagielski pSglIfcService = ary_cast<SglIfcService>( & my_CeStorage()[i_nService] );
725*b1cdbd2cSJim Jagielski
726*b1cdbd2cSJim Jagielski if (pService != 0)
727*b1cdbd2cSJim Jagielski {
728*b1cdbd2cSJim Jagielski Dyn_StdConstIterator<CommentedRelation>
729*b1cdbd2cSJim Jagielski pSupportedInterfaces;
730*b1cdbd2cSJim Jagielski pService->Get_SupportedInterfaces(pSupportedInterfaces);
731*b1cdbd2cSJim Jagielski
732*b1cdbd2cSJim Jagielski for ( StdConstIterator<CommentedRelation> &
733*b1cdbd2cSJim Jagielski itInfc = *pSupportedInterfaces;
734*b1cdbd2cSJim Jagielski itInfc.operator bool();
735*b1cdbd2cSJim Jagielski ++itInfc )
736*b1cdbd2cSJim Jagielski {
737*b1cdbd2cSJim Jagielski recursive_AssignImplementation_toExportedInterface( i_nImpl,
738*b1cdbd2cSJim Jagielski (*itInfc).Type(),
739*b1cdbd2cSJim Jagielski i_eList );
740*b1cdbd2cSJim Jagielski } // end for
741*b1cdbd2cSJim Jagielski }
742*b1cdbd2cSJim Jagielski else if (pSglIfcService != 0)
743*b1cdbd2cSJim Jagielski {
744*b1cdbd2cSJim Jagielski Type_id nBase = pSglIfcService->BaseInterface();
745*b1cdbd2cSJim Jagielski recursive_AssignImplementation_toExportedInterface( i_nImpl,
746*b1cdbd2cSJim Jagielski nBase,
747*b1cdbd2cSJim Jagielski i_eList );
748*b1cdbd2cSJim Jagielski } // end if
749*b1cdbd2cSJim Jagielski }
750*b1cdbd2cSJim Jagielski
751*b1cdbd2cSJim Jagielski void
recursive_AssignImplementation_toExportedInterface(Ce_id i_nService,Type_id i_nExportedInterface,E_2s_of_Interface i_eList)752*b1cdbd2cSJim Jagielski SecondariesCalculator::recursive_AssignImplementation_toExportedInterface(
753*b1cdbd2cSJim Jagielski Ce_id i_nService,
754*b1cdbd2cSJim Jagielski Type_id i_nExportedInterface,
755*b1cdbd2cSJim Jagielski E_2s_of_Interface i_eList )
756*b1cdbd2cSJim Jagielski {
757*b1cdbd2cSJim Jagielski Interface *
758*b1cdbd2cSJim Jagielski pIfc = lhf_SearchInterface(i_nExportedInterface);
759*b1cdbd2cSJim Jagielski if (pIfc == 0)
760*b1cdbd2cSJim Jagielski return;
761*b1cdbd2cSJim Jagielski
762*b1cdbd2cSJim Jagielski insert_into2sUnique( *pIfc,
763*b1cdbd2cSJim Jagielski i_eList,
764*b1cdbd2cSJim Jagielski i_nService );
765*b1cdbd2cSJim Jagielski Dyn_StdConstIterator<CommentedRelation>
766*b1cdbd2cSJim Jagielski pBases;
767*b1cdbd2cSJim Jagielski ary::idl::ifc_interface::attr::Get_Bases(pBases, *pIfc);
768*b1cdbd2cSJim Jagielski for ( StdConstIterator<CommentedRelation> & it = *pBases;
769*b1cdbd2cSJim Jagielski it.operator bool();
770*b1cdbd2cSJim Jagielski ++it )
771*b1cdbd2cSJim Jagielski {
772*b1cdbd2cSJim Jagielski recursive_AssignImplementation_toExportedInterface(i_nService, (*it).Type(), i_eList);
773*b1cdbd2cSJim Jagielski }
774*b1cdbd2cSJim Jagielski }
775*b1cdbd2cSJim Jagielski
776*b1cdbd2cSJim Jagielski void
recursive_AssignFunction_toCeAsReturn(Ce_id i_nFunction,Type_id i_nReturnType)777*b1cdbd2cSJim Jagielski SecondariesCalculator::recursive_AssignFunction_toCeAsReturn( Ce_id i_nFunction,
778*b1cdbd2cSJim Jagielski Type_id i_nReturnType )
779*b1cdbd2cSJim Jagielski {
780*b1cdbd2cSJim Jagielski Ce_id
781*b1cdbd2cSJim Jagielski nCe = lhf_Search_CeFromTypeId(i_nReturnType);
782*b1cdbd2cSJim Jagielski if (NOT nCe.IsValid())
783*b1cdbd2cSJim Jagielski return;
784*b1cdbd2cSJim Jagielski
785*b1cdbd2cSJim Jagielski CodeEntity &
786*b1cdbd2cSJim Jagielski rCe = my_CeStorage()[nCe];
787*b1cdbd2cSJim Jagielski switch (rCe.AryClass()) // KORR_FUTURE: make this faster, remove switch.
788*b1cdbd2cSJim Jagielski {
789*b1cdbd2cSJim Jagielski case Interface::class_id:
790*b1cdbd2cSJim Jagielski insert_into2sList( rCe,
791*b1cdbd2cSJim Jagielski interface_2s_AsReturns,
792*b1cdbd2cSJim Jagielski i_nFunction );
793*b1cdbd2cSJim Jagielski break;
794*b1cdbd2cSJim Jagielski case Struct::class_id:
795*b1cdbd2cSJim Jagielski insert_into2sList( rCe,
796*b1cdbd2cSJim Jagielski struct_2s_AsReturns,
797*b1cdbd2cSJim Jagielski i_nFunction );
798*b1cdbd2cSJim Jagielski break;
799*b1cdbd2cSJim Jagielski case Enum::class_id:
800*b1cdbd2cSJim Jagielski insert_into2sList( rCe,
801*b1cdbd2cSJim Jagielski enum_2s_AsReturns,
802*b1cdbd2cSJim Jagielski i_nFunction );
803*b1cdbd2cSJim Jagielski break;
804*b1cdbd2cSJim Jagielski case Typedef::class_id:
805*b1cdbd2cSJim Jagielski insert_into2sList( rCe,
806*b1cdbd2cSJim Jagielski typedef_2s_AsReturns,
807*b1cdbd2cSJim Jagielski i_nFunction );
808*b1cdbd2cSJim Jagielski recursive_AssignFunction_toCeAsReturn( i_nFunction,
809*b1cdbd2cSJim Jagielski static_cast< Typedef& >(rCe).DefiningType() );
810*b1cdbd2cSJim Jagielski break;
811*b1cdbd2cSJim Jagielski // default: do nothing.
812*b1cdbd2cSJim Jagielski }
813*b1cdbd2cSJim Jagielski }
814*b1cdbd2cSJim Jagielski
815*b1cdbd2cSJim Jagielski void
recursive_AssignFunction_toCeAsParameter(Ce_id i_nFunction,Type_id i_nParameterType)816*b1cdbd2cSJim Jagielski SecondariesCalculator::recursive_AssignFunction_toCeAsParameter( Ce_id i_nFunction,
817*b1cdbd2cSJim Jagielski Type_id i_nParameterType )
818*b1cdbd2cSJim Jagielski {
819*b1cdbd2cSJim Jagielski Ce_id
820*b1cdbd2cSJim Jagielski nCe = lhf_Search_CeFromTypeId(i_nParameterType);
821*b1cdbd2cSJim Jagielski if (NOT nCe.IsValid())
822*b1cdbd2cSJim Jagielski return;
823*b1cdbd2cSJim Jagielski
824*b1cdbd2cSJim Jagielski CodeEntity &
825*b1cdbd2cSJim Jagielski rCe = my_CeStorage()[nCe];
826*b1cdbd2cSJim Jagielski switch (rCe.AryClass()) // KORR_FUTURE: make this faster, remove switch.
827*b1cdbd2cSJim Jagielski {
828*b1cdbd2cSJim Jagielski case Interface::class_id:
829*b1cdbd2cSJim Jagielski insert_into2sList( rCe,
830*b1cdbd2cSJim Jagielski interface_2s_AsParameters,
831*b1cdbd2cSJim Jagielski i_nFunction );
832*b1cdbd2cSJim Jagielski break;
833*b1cdbd2cSJim Jagielski case Struct::class_id:
834*b1cdbd2cSJim Jagielski insert_into2sList( rCe,
835*b1cdbd2cSJim Jagielski struct_2s_AsParameters,
836*b1cdbd2cSJim Jagielski i_nFunction );
837*b1cdbd2cSJim Jagielski break;
838*b1cdbd2cSJim Jagielski case Enum::class_id:
839*b1cdbd2cSJim Jagielski insert_into2sList( rCe,
840*b1cdbd2cSJim Jagielski enum_2s_AsParameters,
841*b1cdbd2cSJim Jagielski i_nFunction );
842*b1cdbd2cSJim Jagielski break;
843*b1cdbd2cSJim Jagielski case Typedef::class_id:
844*b1cdbd2cSJim Jagielski insert_into2sList( rCe,
845*b1cdbd2cSJim Jagielski typedef_2s_AsParameters,
846*b1cdbd2cSJim Jagielski i_nFunction );
847*b1cdbd2cSJim Jagielski recursive_AssignFunction_toCeAsParameter( i_nFunction,
848*b1cdbd2cSJim Jagielski static_cast< Typedef& >(rCe).DefiningType() );
849*b1cdbd2cSJim Jagielski break;
850*b1cdbd2cSJim Jagielski // default: do nothing.
851*b1cdbd2cSJim Jagielski }
852*b1cdbd2cSJim Jagielski }
853*b1cdbd2cSJim Jagielski
854*b1cdbd2cSJim Jagielski void
recursive_AssignStructElement_toCeAsDataType(Ce_id i_nDataElement,Type_id i_nDataType)855*b1cdbd2cSJim Jagielski SecondariesCalculator::recursive_AssignStructElement_toCeAsDataType( Ce_id i_nDataElement,
856*b1cdbd2cSJim Jagielski Type_id i_nDataType )
857*b1cdbd2cSJim Jagielski {
858*b1cdbd2cSJim Jagielski Ce_id
859*b1cdbd2cSJim Jagielski nCe = lhf_Search_CeFromTypeId(i_nDataType);
860*b1cdbd2cSJim Jagielski if (NOT nCe.IsValid())
861*b1cdbd2cSJim Jagielski return;
862*b1cdbd2cSJim Jagielski
863*b1cdbd2cSJim Jagielski CodeEntity &
864*b1cdbd2cSJim Jagielski rCe = my_CeStorage()[nCe];
865*b1cdbd2cSJim Jagielski switch (rCe.AryClass()) // KORR_FUTURE: make this faster, remove switch.
866*b1cdbd2cSJim Jagielski {
867*b1cdbd2cSJim Jagielski case Interface::class_id:
868*b1cdbd2cSJim Jagielski insert_into2sList( rCe,
869*b1cdbd2cSJim Jagielski interface_2s_AsDataTypes,
870*b1cdbd2cSJim Jagielski i_nDataElement );
871*b1cdbd2cSJim Jagielski break;
872*b1cdbd2cSJim Jagielski case Struct::class_id:
873*b1cdbd2cSJim Jagielski insert_into2sList( rCe,
874*b1cdbd2cSJim Jagielski struct_2s_AsDataTypes,
875*b1cdbd2cSJim Jagielski i_nDataElement );
876*b1cdbd2cSJim Jagielski break;
877*b1cdbd2cSJim Jagielski case Enum::class_id:
878*b1cdbd2cSJim Jagielski insert_into2sList( rCe,
879*b1cdbd2cSJim Jagielski enum_2s_AsDataTypes,
880*b1cdbd2cSJim Jagielski i_nDataElement );
881*b1cdbd2cSJim Jagielski break;
882*b1cdbd2cSJim Jagielski case Typedef::class_id:
883*b1cdbd2cSJim Jagielski insert_into2sList( rCe,
884*b1cdbd2cSJim Jagielski typedef_2s_AsDataTypes,
885*b1cdbd2cSJim Jagielski i_nDataElement );
886*b1cdbd2cSJim Jagielski recursive_AssignFunction_toCeAsParameter( i_nDataElement,
887*b1cdbd2cSJim Jagielski static_cast< Typedef& >(rCe).DefiningType() );
888*b1cdbd2cSJim Jagielski break;
889*b1cdbd2cSJim Jagielski // default: do nothing.
890*b1cdbd2cSJim Jagielski } // end switch
891*b1cdbd2cSJim Jagielski }
892*b1cdbd2cSJim Jagielski
893*b1cdbd2cSJim Jagielski void
insert_into2sUnique(CodeEntity & o_out,int i_listIndex,Ce_id i_nCe)894*b1cdbd2cSJim Jagielski SecondariesCalculator::insert_into2sUnique( CodeEntity & o_out,
895*b1cdbd2cSJim Jagielski int i_listIndex,
896*b1cdbd2cSJim Jagielski Ce_id i_nCe )
897*b1cdbd2cSJim Jagielski {
898*b1cdbd2cSJim Jagielski std::vector<Ce_id> &
899*b1cdbd2cSJim Jagielski rOut = o_out.Secondaries().Access_List(i_listIndex);
900*b1cdbd2cSJim Jagielski if (std::find(rOut.begin(),rOut.end(),i_nCe) != rOut.end())
901*b1cdbd2cSJim Jagielski return;
902*b1cdbd2cSJim Jagielski rOut.push_back(i_nCe);
903*b1cdbd2cSJim Jagielski }
904*b1cdbd2cSJim Jagielski
905*b1cdbd2cSJim Jagielski void
sort_All2s()906*b1cdbd2cSJim Jagielski SecondariesCalculator::sort_All2s()
907*b1cdbd2cSJim Jagielski {
908*b1cdbd2cSJim Jagielski OrderCeIdsByName
909*b1cdbd2cSJim Jagielski aIdOrdering(my_CeStorage());
910*b1cdbd2cSJim Jagielski
911*b1cdbd2cSJim Jagielski for ( stg_iterator it = my_CeStorage().Begin();
912*b1cdbd2cSJim Jagielski it != my_CeStorage().End();
913*b1cdbd2cSJim Jagielski ++it )
914*b1cdbd2cSJim Jagielski {
915*b1cdbd2cSJim Jagielski Ce_2s &
916*b1cdbd2cSJim Jagielski r2s = (*it).Secondaries();
917*b1cdbd2cSJim Jagielski int iCount = r2s.CountXrefLists();
918*b1cdbd2cSJim Jagielski for (int i = 0; i < iCount; ++i)
919*b1cdbd2cSJim Jagielski {
920*b1cdbd2cSJim Jagielski std::sort( r2s.Access_List(i).begin(),
921*b1cdbd2cSJim Jagielski r2s.Access_List(i).end(),
922*b1cdbd2cSJim Jagielski aIdOrdering );
923*b1cdbd2cSJim Jagielski } // end for (i)
924*b1cdbd2cSJim Jagielski } // end for (it)
925*b1cdbd2cSJim Jagielski }
926*b1cdbd2cSJim Jagielski
927*b1cdbd2cSJim Jagielski void
Read_Links2DevManual(csv::bstream & i_file)928*b1cdbd2cSJim Jagielski SecondariesCalculator::Read_Links2DevManual( csv::bstream & i_file )
929*b1cdbd2cSJim Jagielski {
930*b1cdbd2cSJim Jagielski StreamLock aLine(300);
931*b1cdbd2cSJim Jagielski StreamStr & rLine = aLine();
932*b1cdbd2cSJim Jagielski
933*b1cdbd2cSJim Jagielski
934*b1cdbd2cSJim Jagielski String sCurLink;
935*b1cdbd2cSJim Jagielski String sCurLinkUI;
936*b1cdbd2cSJim Jagielski E_LinkMode eCurMode = link2ref;
937*b1cdbd2cSJim Jagielski
938*b1cdbd2cSJim Jagielski int lineCount = 0;
939*b1cdbd2cSJim Jagielski const char * sLink = "LINK:";
940*b1cdbd2cSJim Jagielski const char * sDescr = "DESCR:";
941*b1cdbd2cSJim Jagielski const char * sTopic = "TOPIC:";
942*b1cdbd2cSJim Jagielski const char * sRef = "REF:";
943*b1cdbd2cSJim Jagielski const UINT8 cMaxASCIINumWhiteSpace = 32;
944*b1cdbd2cSJim Jagielski
945*b1cdbd2cSJim Jagielski while (NOT i_file.eod())
946*b1cdbd2cSJim Jagielski {
947*b1cdbd2cSJim Jagielski ++lineCount;
948*b1cdbd2cSJim Jagielski
949*b1cdbd2cSJim Jagielski rLine.reset();
950*b1cdbd2cSJim Jagielski rLine.operator_read_line(i_file);
951*b1cdbd2cSJim Jagielski
952*b1cdbd2cSJim Jagielski if ( *rLine.c_str() >= 'a' )
953*b1cdbd2cSJim Jagielski {
954*b1cdbd2cSJim Jagielski assign_CurLink(rLine.begin(), sCurLink, sCurLinkUI, eCurMode == link2descr, lineCount);
955*b1cdbd2cSJim Jagielski }
956*b1cdbd2cSJim Jagielski else if ( strncmp(rLine.c_str(), sLink, strlen(sLink)) == 0 )
957*b1cdbd2cSJim Jagielski {
958*b1cdbd2cSJim Jagielski sCurLink = rLine.c_str()+5;
959*b1cdbd2cSJim Jagielski sCurLinkUI.clear();
960*b1cdbd2cSJim Jagielski }
961*b1cdbd2cSJim Jagielski else if ( strncmp(rLine.c_str(), sDescr, strlen(sDescr)) == 0 )
962*b1cdbd2cSJim Jagielski {
963*b1cdbd2cSJim Jagielski sCurLinkUI = rLine.c_str()+6;
964*b1cdbd2cSJim Jagielski }
965*b1cdbd2cSJim Jagielski else if ( strncmp(rLine.c_str(), sTopic, strlen(sTopic)) == 0 )
966*b1cdbd2cSJim Jagielski {
967*b1cdbd2cSJim Jagielski eCurMode = link2descr;
968*b1cdbd2cSJim Jagielski }
969*b1cdbd2cSJim Jagielski else if ( strncmp(rLine.c_str(), sRef, strlen(sRef)) == 0 )
970*b1cdbd2cSJim Jagielski {
971*b1cdbd2cSJim Jagielski eCurMode = link2ref;
972*b1cdbd2cSJim Jagielski }
973*b1cdbd2cSJim Jagielski else if (static_cast<UINT8>(*rLine.c_str()) > cMaxASCIINumWhiteSpace)
974*b1cdbd2cSJim Jagielski {
975*b1cdbd2cSJim Jagielski assign_CurLink(rLine.begin(), sCurLink, sCurLinkUI, eCurMode == link2descr, lineCount);
976*b1cdbd2cSJim Jagielski }
977*b1cdbd2cSJim Jagielski // else
978*b1cdbd2cSJim Jagielski // Ignore empty line.
979*b1cdbd2cSJim Jagielski
980*b1cdbd2cSJim Jagielski } // end while
981*b1cdbd2cSJim Jagielski }
982*b1cdbd2cSJim Jagielski
983*b1cdbd2cSJim Jagielski
984*b1cdbd2cSJim Jagielski
985*b1cdbd2cSJim Jagielski } // namespace idl
986*b1cdbd2cSJim Jagielski } // namespace ary
987