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 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef ARY_IDL_IT_XNAMEROOM_HXX
25*b1cdbd2cSJim Jagielski #define ARY_IDL_IT_XNAMEROOM_HXX
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski // BASE CLASSES
28*b1cdbd2cSJim Jagielski #include <ary/idl/i_type.hxx>
29*b1cdbd2cSJim Jagielski #include <nametreenode.hxx>
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski 
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski namespace ary
35*b1cdbd2cSJim Jagielski {
36*b1cdbd2cSJim Jagielski namespace idl
37*b1cdbd2cSJim Jagielski {
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski /** A namespace for ->Type s, as they are explicitely written in code.
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski     The search/identification string is usually the local name of
43*b1cdbd2cSJim Jagielski     the Type. But for templated structs, the search string has this
44*b1cdbd2cSJim Jagielski     pattern:
45*b1cdbd2cSJim Jagielski                 <LocalName> '<' <StringOfTemplateTypeId>
46*b1cdbd2cSJim Jagielski */
47*b1cdbd2cSJim Jagielski class ExplicitNameRoom : public Type
48*b1cdbd2cSJim Jagielski {
49*b1cdbd2cSJim Jagielski   public:
50*b1cdbd2cSJim Jagielski     enum E_ClassId { class_id = 2204 };
51*b1cdbd2cSJim Jagielski 
52*b1cdbd2cSJim Jagielski     // LIFECYCLE
53*b1cdbd2cSJim Jagielski                         ExplicitNameRoom();
54*b1cdbd2cSJim Jagielski                         ExplicitNameRoom(
55*b1cdbd2cSJim Jagielski                             const String &      i_sName,
56*b1cdbd2cSJim Jagielski                             const ExplicitNameRoom &
57*b1cdbd2cSJim Jagielski                                                 i_rParent );
58*b1cdbd2cSJim Jagielski     virtual             ~ExplicitNameRoom();
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski     // OPERATIONS
61*b1cdbd2cSJim Jagielski     /** @param i_sSearchString
62*b1cdbd2cSJim Jagielski                 A local type name  usually.
63*b1cdbd2cSJim Jagielski                 For templated types see class docu.
64*b1cdbd2cSJim Jagielski         @see ExplicitNameRoom
65*b1cdbd2cSJim Jagielski     */
Add_Name(const String & i_sSearchString,Type_id i_nId)66*b1cdbd2cSJim Jagielski     void                Add_Name(
67*b1cdbd2cSJim Jagielski                             const String &      i_sSearchString,
68*b1cdbd2cSJim Jagielski                             Type_id             i_nId )
69*b1cdbd2cSJim Jagielski                             { aImpl.Add_Name(i_sSearchString,i_nId); }
70*b1cdbd2cSJim Jagielski     // INQUIRY
Name() const71*b1cdbd2cSJim Jagielski     const String &      Name() const            { return aImpl.Name(); }
Depth() const72*b1cdbd2cSJim Jagielski     intt                Depth() const           { return aImpl.Depth(); }
73*b1cdbd2cSJim Jagielski     void                Get_FullName(
74*b1cdbd2cSJim Jagielski                             StringVector &      o_rText,
75*b1cdbd2cSJim Jagielski                             Ce_idList *         o_pRelatedCes,
76*b1cdbd2cSJim Jagielski                             const Gate &        i_rGate ) const;
IsAbsolute() const77*b1cdbd2cSJim Jagielski     bool                IsAbsolute() const      { return Depth() > 0
78*b1cdbd2cSJim Jagielski                                                     ?   (*NameChain_Begin()).empty()
79*b1cdbd2cSJim Jagielski                                                     :   false; }
80*b1cdbd2cSJim Jagielski     /** @param i_sSearchString
81*b1cdbd2cSJim Jagielski                 A local type name  usually.
82*b1cdbd2cSJim Jagielski                 For templated types see class docu.
83*b1cdbd2cSJim Jagielski         @see ExplicitNameRoom
84*b1cdbd2cSJim Jagielski     */
Search_Name(const String & i_sSearchString) const85*b1cdbd2cSJim Jagielski     Type_id             Search_Name(
86*b1cdbd2cSJim Jagielski                             const String &      i_sSearchString ) const
87*b1cdbd2cSJim Jagielski                             { return aImpl.Search_Name(i_sSearchString); }
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski     StringVector::const_iterator
NameChain_Begin() const90*b1cdbd2cSJim Jagielski                         NameChain_Begin() const
91*b1cdbd2cSJim Jagielski                             { return aImpl.NameChain_Begin(); }
92*b1cdbd2cSJim Jagielski     StringVector::const_iterator
NameChain_End() const93*b1cdbd2cSJim Jagielski                         NameChain_End() const
94*b1cdbd2cSJim Jagielski                             { return aImpl.NameChain_End(); }
95*b1cdbd2cSJim Jagielski   private:
96*b1cdbd2cSJim Jagielski     // Interface csv::ConstProcessorClient:
97*b1cdbd2cSJim Jagielski     virtual void        do_Accept(
98*b1cdbd2cSJim Jagielski                             csv::ProcessorIfc & io_processor ) const;
99*b1cdbd2cSJim Jagielski     // Interface Object:
100*b1cdbd2cSJim Jagielski     virtual ClassId     get_AryClass() const;
101*b1cdbd2cSJim Jagielski 
102*b1cdbd2cSJim Jagielski     // Interface Type:
103*b1cdbd2cSJim Jagielski     virtual void        inq_Get_Text(
104*b1cdbd2cSJim Jagielski                             StringVector &      o_module,
105*b1cdbd2cSJim Jagielski                             String &            o_name,
106*b1cdbd2cSJim Jagielski                             Ce_id &             o_nRelatedCe,
107*b1cdbd2cSJim Jagielski                             int &               o_nSequemceCount,
108*b1cdbd2cSJim Jagielski                             const Gate &        i_rGate ) const;
109*b1cdbd2cSJim Jagielski     // DATA
110*b1cdbd2cSJim Jagielski     NameTreeNode<Type_id>
111*b1cdbd2cSJim Jagielski                         aImpl;
112*b1cdbd2cSJim Jagielski };
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski 
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski }   // namespace idl
118*b1cdbd2cSJim Jagielski }   // namespace ary
119*b1cdbd2cSJim Jagielski #endif
120