xref: /aoo41x/main/autodoc/source/ary/cpp/namechain.cxx (revision a0d53b35)
1d291ea28SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3d291ea28SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4d291ea28SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5d291ea28SAndrew Rist  * distributed with this work for additional information
6d291ea28SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7d291ea28SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8d291ea28SAndrew Rist  * "License"); you may not use this file except in compliance
9d291ea28SAndrew Rist  * with the License.  You may obtain a copy of the License at
10d291ea28SAndrew Rist  *
11d291ea28SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12d291ea28SAndrew Rist  *
13d291ea28SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14d291ea28SAndrew Rist  * software distributed under the License is distributed on an
15d291ea28SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16d291ea28SAndrew Rist  * KIND, either express or implied.  See the License for the
17d291ea28SAndrew Rist  * specific language governing permissions and limitations
18d291ea28SAndrew Rist  * under the License.
19d291ea28SAndrew Rist  *
20d291ea28SAndrew Rist  *************************************************************/
21cdf0e10cSrcweir 
22cdf0e10cSrcweir #include <precomp.h>
23cdf0e10cSrcweir #include <ary/cpp/namechain.hxx>
24cdf0e10cSrcweir 
25cdf0e10cSrcweir 
26cdf0e10cSrcweir // NOT FULLY DEFINED SERVICES
27cdf0e10cSrcweir #include <ary/cpp/usedtype.hxx>
28cdf0e10cSrcweir #include <ary/cpp/c_gate.hxx>
29cdf0e10cSrcweir #include "tplparam.hxx"
30cdf0e10cSrcweir 
31cdf0e10cSrcweir 
32cdf0e10cSrcweir 
33cdf0e10cSrcweir namespace ary
34cdf0e10cSrcweir {
35cdf0e10cSrcweir namespace cpp
36cdf0e10cSrcweir {
37cdf0e10cSrcweir namespace ut
38cdf0e10cSrcweir {
39cdf0e10cSrcweir 
40cdf0e10cSrcweir 
41cdf0e10cSrcweir //*********************		NameSegment		******************//
42cdf0e10cSrcweir 
NameSegment(const char * i_sName)43cdf0e10cSrcweir NameSegment::NameSegment( const char * i_sName )
44cdf0e10cSrcweir 	:	sName( i_sName )
45cdf0e10cSrcweir 		// pTemplate
46cdf0e10cSrcweir {
47cdf0e10cSrcweir }
48cdf0e10cSrcweir 
NameSegment(const NameSegment & i_rSeg)49cdf0e10cSrcweir NameSegment::NameSegment( const NameSegment & i_rSeg )
50cdf0e10cSrcweir 	:	sName(i_rSeg.sName)
51cdf0e10cSrcweir 		// pTemplate
52cdf0e10cSrcweir {
53cdf0e10cSrcweir     // KORR_FUTURE :   Handling of copying of templates.
54cdf0e10cSrcweir //	csv_assert( NOT i_rSeg.pTemplate );
55cdf0e10cSrcweir }
56cdf0e10cSrcweir 
operator =(const NameSegment & i_rSeg)57cdf0e10cSrcweir NameSegment& NameSegment::operator=(const NameSegment & i_rSeg)
58cdf0e10cSrcweir {
59cdf0e10cSrcweir 	sName = i_rSeg.sName;
60cdf0e10cSrcweir 	return *this;
61cdf0e10cSrcweir }
62cdf0e10cSrcweir 
~NameSegment()63cdf0e10cSrcweir NameSegment::~NameSegment()
64cdf0e10cSrcweir {
65cdf0e10cSrcweir }
66cdf0e10cSrcweir 
67cdf0e10cSrcweir List_TplParameter &
AddTemplate()68cdf0e10cSrcweir NameSegment::AddTemplate()
69cdf0e10cSrcweir {
70cdf0e10cSrcweir 	return * (pTemplate = new List_TplParameter);
71cdf0e10cSrcweir }
72cdf0e10cSrcweir 
73cdf0e10cSrcweir intt
Compare(const NameSegment & i_rOther) const74cdf0e10cSrcweir NameSegment::Compare( const NameSegment & i_rOther ) const
75cdf0e10cSrcweir {
76cdf0e10cSrcweir 	intt nResult = strcmp( sName.c_str(), i_rOther.sName.c_str() );
77cdf0e10cSrcweir 	if (nResult != 0)
78cdf0e10cSrcweir 		return nResult;
79cdf0e10cSrcweir 	if ( bool(pTemplate) != bool(i_rOther.pTemplate) )
80cdf0e10cSrcweir 	{
81cdf0e10cSrcweir 		if ( NOT pTemplate )
82cdf0e10cSrcweir 			return -1;
83cdf0e10cSrcweir 		else
84cdf0e10cSrcweir 			return +1;
85cdf0e10cSrcweir 	}
86cdf0e10cSrcweir 	else if ( NOT pTemplate )
87cdf0e10cSrcweir 		return 0;
88cdf0e10cSrcweir 	else
89cdf0e10cSrcweir 		return pTemplate->Compare( *i_rOther.pTemplate );
90cdf0e10cSrcweir }
91cdf0e10cSrcweir 
92cdf0e10cSrcweir void
Get_Text_AsScope(StreamStr & o_rOut,const Gate & i_rGate) const93cdf0e10cSrcweir NameSegment::Get_Text_AsScope( StreamStr &   o_rOut,
94cdf0e10cSrcweir 						       const Gate &  i_rGate ) const
95cdf0e10cSrcweir {
96cdf0e10cSrcweir 	o_rOut << sName;
97cdf0e10cSrcweir 	if ( pTemplate )
98cdf0e10cSrcweir 		pTemplate->Get_Text( o_rOut, i_rGate );
99cdf0e10cSrcweir }
100cdf0e10cSrcweir 
101cdf0e10cSrcweir void
Get_Text_AsMainType(StreamStr & o_rName,StreamStr & o_rPostName,const Gate & i_rGate) const102cdf0e10cSrcweir NameSegment::Get_Text_AsMainType( StreamStr &   o_rName,
103cdf0e10cSrcweir 						          StreamStr &   o_rPostName,
104cdf0e10cSrcweir 						          const Gate &  i_rGate ) const
105cdf0e10cSrcweir {
106cdf0e10cSrcweir 	o_rName << sName;
107cdf0e10cSrcweir 	if ( pTemplate )
108cdf0e10cSrcweir 		pTemplate->Get_Text( o_rPostName, i_rGate );
109cdf0e10cSrcweir }
110cdf0e10cSrcweir 
111cdf0e10cSrcweir 
112cdf0e10cSrcweir //*********************		NameChain     ******************//
113cdf0e10cSrcweir 
NameChain()114cdf0e10cSrcweir NameChain::NameChain()
115cdf0e10cSrcweir //  :   aSegments
116cdf0e10cSrcweir {
117cdf0e10cSrcweir }
118cdf0e10cSrcweir 
~NameChain()119cdf0e10cSrcweir NameChain::~NameChain()
120cdf0e10cSrcweir {
121cdf0e10cSrcweir }
122cdf0e10cSrcweir 
123cdf0e10cSrcweir void
Add_Segment(const char * i_sSeg)124cdf0e10cSrcweir NameChain::Add_Segment( const char * i_sSeg )
125cdf0e10cSrcweir {
126cdf0e10cSrcweir 	aSegments.push_back( NameSegment(i_sSeg) );
127cdf0e10cSrcweir }
128cdf0e10cSrcweir 
129cdf0e10cSrcweir List_TplParameter &
Templatize_LastSegment()130cdf0e10cSrcweir NameChain::Templatize_LastSegment()
131cdf0e10cSrcweir {
132*a0d53b35SJürgen Schmidt 	csv_assert( ! aSegments.empty() );
133cdf0e10cSrcweir 
134cdf0e10cSrcweir 	return aSegments.back().AddTemplate();
135cdf0e10cSrcweir }
136cdf0e10cSrcweir 
137cdf0e10cSrcweir intt
Compare(const NameChain & i_rChain) const138cdf0e10cSrcweir NameChain::Compare( const NameChain & i_rChain ) const
139cdf0e10cSrcweir {
140cdf0e10cSrcweir 	intt nResult = intt(aSegments.size()) - intt(i_rChain.aSegments.size());
141cdf0e10cSrcweir 	if (nResult != 0)
142cdf0e10cSrcweir 		return nResult;
143cdf0e10cSrcweir 
144cdf0e10cSrcweir 	std::vector< NameSegment >::const_iterator it1 = aSegments.begin();
145cdf0e10cSrcweir 	std::vector< NameSegment >::const_iterator it1End = aSegments.end();
146cdf0e10cSrcweir 	std::vector< NameSegment >::const_iterator it2 = i_rChain.aSegments.begin();
147cdf0e10cSrcweir 
148cdf0e10cSrcweir 	for ( ; it1 != it1End; ++it1, ++it2 )
149cdf0e10cSrcweir 	{
150cdf0e10cSrcweir 		nResult = (*it1).Compare(*it2);
151cdf0e10cSrcweir 		if (nResult != 0)
152cdf0e10cSrcweir 			return nResult;
153cdf0e10cSrcweir 	}
154cdf0e10cSrcweir 
155cdf0e10cSrcweir 	return 0;
156cdf0e10cSrcweir }
157cdf0e10cSrcweir 
158cdf0e10cSrcweir const String  &
LastSegment() const159cdf0e10cSrcweir NameChain::LastSegment() const
160cdf0e10cSrcweir {
161*a0d53b35SJürgen Schmidt 	if ( ! aSegments.empty() )
162cdf0e10cSrcweir 		return aSegments.back().Name();
163cdf0e10cSrcweir 	return String::Null_();
164cdf0e10cSrcweir }
165cdf0e10cSrcweir 
166cdf0e10cSrcweir void
Get_Text(StreamStr & o_rPreName,StreamStr & o_rName,StreamStr & o_rPostName,const Gate & i_rGate) const167cdf0e10cSrcweir NameChain::Get_Text( StreamStr &    o_rPreName,
168cdf0e10cSrcweir 					 StreamStr &    o_rName,
169cdf0e10cSrcweir 					 StreamStr &    o_rPostName,
170cdf0e10cSrcweir 					 const Gate &   i_rGate ) const
171cdf0e10cSrcweir {
172cdf0e10cSrcweir 	std::vector< NameSegment >::const_iterator it = aSegments.begin();
173cdf0e10cSrcweir 	std::vector< NameSegment >::const_iterator itEnd = aSegments.end();
174cdf0e10cSrcweir 
175cdf0e10cSrcweir 	if ( it == itEnd )
176cdf0e10cSrcweir 		return;
177cdf0e10cSrcweir 
178cdf0e10cSrcweir 	for ( --itEnd; it != itEnd; ++it )
179cdf0e10cSrcweir 	{
180cdf0e10cSrcweir 		(*it).Get_Text_AsScope( o_rPreName, i_rGate );
181cdf0e10cSrcweir 		o_rPreName << "::";
182cdf0e10cSrcweir 	}
183cdf0e10cSrcweir 	(*it).Get_Text_AsMainType( o_rName, o_rPostName, i_rGate );
184cdf0e10cSrcweir }
185cdf0e10cSrcweir 
186cdf0e10cSrcweir 
187cdf0e10cSrcweir 
188cdf0e10cSrcweir }   // namespace ut
189cdf0e10cSrcweir }   // namespace cpp
190cdf0e10cSrcweir }   // namespace ary
191