1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef ARY_IDL_IT_XNAMEROOM_HXX
25 #define ARY_IDL_IT_XNAMEROOM_HXX
26 
27 // BASE CLASSES
28 #include <ary/idl/i_type.hxx>
29 #include <nametreenode.hxx>
30 
31 
32 
33 
34 namespace ary
35 {
36 namespace idl
37 {
38 
39 
40 /** A namespace for ->Type s, as they are explicitely written in code.
41 
42     The search/identification string is usually the local name of
43     the Type. But for templated structs, the search string has this
44     pattern:
45                 <LocalName> '<' <StringOfTemplateTypeId>
46 */
47 class ExplicitNameRoom : public Type
48 {
49   public:
50     enum E_ClassId { class_id = 2204 };
51 
52     // LIFECYCLE
53                         ExplicitNameRoom();
54                         ExplicitNameRoom(
55                             const String &      i_sName,
56                             const ExplicitNameRoom &
57                                                 i_rParent );
58     virtual             ~ExplicitNameRoom();
59 
60     // OPERATIONS
61     /** @param i_sSearchString
62                 A local type name  usually.
63                 For templated types see class docu.
64         @see ExplicitNameRoom
65     */
66     void                Add_Name(
67                             const String &      i_sSearchString,
68                             Type_id             i_nId )
69                             { aImpl.Add_Name(i_sSearchString,i_nId); }
70     // INQUIRY
71     const String &      Name() const            { return aImpl.Name(); }
72     intt                Depth() const           { return aImpl.Depth(); }
73     void                Get_FullName(
74                             StringVector &      o_rText,
75                             Ce_idList *         o_pRelatedCes,
76                             const Gate &        i_rGate ) const;
77     bool                IsAbsolute() const      { return Depth() > 0
78                                                     ?   (*NameChain_Begin()).empty()
79                                                     :   false; }
80     /** @param i_sSearchString
81                 A local type name  usually.
82                 For templated types see class docu.
83         @see ExplicitNameRoom
84     */
85     Type_id             Search_Name(
86                             const String &      i_sSearchString ) const
87                             { return aImpl.Search_Name(i_sSearchString); }
88 
89     StringVector::const_iterator
90                         NameChain_Begin() const
91                             { return aImpl.NameChain_Begin(); }
92     StringVector::const_iterator
93                         NameChain_End() const
94                             { return aImpl.NameChain_End(); }
95   private:
96     // Interface csv::ConstProcessorClient:
97     virtual void        do_Accept(
98                             csv::ProcessorIfc & io_processor ) const;
99     // Interface Object:
100     virtual ClassId     get_AryClass() const;
101 
102     // Interface Type:
103     virtual void        inq_Get_Text(
104                             StringVector &      o_module,
105                             String &            o_name,
106                             Ce_id &             o_nRelatedCe,
107                             int &               o_nSequemceCount,
108                             const Gate &        i_rGate ) const;
109     // DATA
110     NameTreeNode<Type_id>
111                         aImpl;
112 };
113 
114 
115 
116 
117 }   // namespace idl
118 }   // namespace ary
119 #endif
120