1*1c78a5d6SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*1c78a5d6SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*1c78a5d6SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*1c78a5d6SAndrew Rist * distributed with this work for additional information
6*1c78a5d6SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*1c78a5d6SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*1c78a5d6SAndrew Rist * "License"); you may not use this file except in compliance
9*1c78a5d6SAndrew Rist * with the License. You may obtain a copy of the License at
10*1c78a5d6SAndrew Rist *
11*1c78a5d6SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*1c78a5d6SAndrew Rist *
13*1c78a5d6SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*1c78a5d6SAndrew Rist * software distributed under the License is distributed on an
15*1c78a5d6SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*1c78a5d6SAndrew Rist * KIND, either express or implied. See the License for the
17*1c78a5d6SAndrew Rist * specific language governing permissions and limitations
18*1c78a5d6SAndrew Rist * under the License.
19*1c78a5d6SAndrew Rist *
20*1c78a5d6SAndrew Rist *************************************************************/
21*1c78a5d6SAndrew Rist
22*1c78a5d6SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir #ifndef ARY_IDL_I_FUNCTION_HXX
25cdf0e10cSrcweir #define ARY_IDL_I_FUNCTION_HXX
26cdf0e10cSrcweir
27cdf0e10cSrcweir // BASE CLASSES
28cdf0e10cSrcweir #include <ary/idl/i_ce.hxx>
29cdf0e10cSrcweir
30cdf0e10cSrcweir // USED SERVICES
31cdf0e10cSrcweir #include <ary/idl/i_param.hxx>
32cdf0e10cSrcweir #include <ary/idl/ik_function.hxx>
33cdf0e10cSrcweir #include <ary/stdconstiter.hxx>
34cdf0e10cSrcweir
35cdf0e10cSrcweir
36cdf0e10cSrcweir
37cdf0e10cSrcweir
38cdf0e10cSrcweir namespace ary
39cdf0e10cSrcweir {
40cdf0e10cSrcweir namespace idl
41cdf0e10cSrcweir {
42cdf0e10cSrcweir
43cdf0e10cSrcweir
44cdf0e10cSrcweir /** Represents an IDL function.
45cdf0e10cSrcweir
46cdf0e10cSrcweir Special case constructor:
47cdf0e10cSrcweir Constructors have return type "0".
48cdf0e10cSrcweir */
49cdf0e10cSrcweir class Function : public CodeEntity
50cdf0e10cSrcweir {
51cdf0e10cSrcweir public:
52cdf0e10cSrcweir enum E_ClassId { class_id = 2002 };
53cdf0e10cSrcweir
54cdf0e10cSrcweir typedef std::vector< Parameter > ParamList;
55cdf0e10cSrcweir typedef std::vector< Type_id > ExceptionList;
56cdf0e10cSrcweir
57cdf0e10cSrcweir // LIFECYCLE
58cdf0e10cSrcweir /// Normal function
59cdf0e10cSrcweir Function(
60cdf0e10cSrcweir const String & i_sName,
61cdf0e10cSrcweir Ce_id i_nOwner,
62cdf0e10cSrcweir Ce_id i_nNameRoom,
63cdf0e10cSrcweir Type_id i_nReturnType,
64cdf0e10cSrcweir bool i_bOneWay );
65cdf0e10cSrcweir /// Constructor
66cdf0e10cSrcweir Function(
67cdf0e10cSrcweir const String & i_sName,
68cdf0e10cSrcweir Ce_id i_nOwner,
69cdf0e10cSrcweir Ce_id i_nNameRoom );
70cdf0e10cSrcweir ~Function();
71cdf0e10cSrcweir
72cdf0e10cSrcweir // OPERATIONS
73cdf0e10cSrcweir void Add_Parameter(
74cdf0e10cSrcweir const String & i_sName,
75cdf0e10cSrcweir Type_id i_nType,
76cdf0e10cSrcweir E_ParameterDirection
77cdf0e10cSrcweir i_eDirection );
78cdf0e10cSrcweir /// The function's parameter list ends with the ellipse "..." .
79cdf0e10cSrcweir void Set_Ellipse();
80cdf0e10cSrcweir void Add_Exception(
81cdf0e10cSrcweir Type_id i_nException );
82cdf0e10cSrcweir
83cdf0e10cSrcweir // INQUIRY
84cdf0e10cSrcweir Type_id ReturnType() const;
Parameters() const85cdf0e10cSrcweir const ParamList & Parameters() const { return aParameters; }
86cdf0e10cSrcweir const ExceptionList &
Exceptions() const87cdf0e10cSrcweir Exceptions() const { return aExceptions; }
88cdf0e10cSrcweir bool IsOneway() const;
HasEllipse() const89cdf0e10cSrcweir bool HasEllipse() const { return bEllipse; }
90cdf0e10cSrcweir
91cdf0e10cSrcweir private:
92cdf0e10cSrcweir // Interface csv::ConstProcessorClient:
93cdf0e10cSrcweir virtual void do_Accept(
94cdf0e10cSrcweir csv::ProcessorIfc & io_processor ) const;
95cdf0e10cSrcweir // Interface ary::Object:
96cdf0e10cSrcweir virtual ClassId get_AryClass() const;
97cdf0e10cSrcweir
98cdf0e10cSrcweir // Interface CodeEntity
99cdf0e10cSrcweir virtual const String & inq_LocalName() const;
100cdf0e10cSrcweir virtual Ce_id inq_NameRoom() const;
101cdf0e10cSrcweir virtual Ce_id inq_Owner() const;
102cdf0e10cSrcweir virtual E_SightLevel inq_SightLevel() const;
103cdf0e10cSrcweir
104cdf0e10cSrcweir // Locals
105cdf0e10cSrcweir friend struct ifc_function::attr;
106cdf0e10cSrcweir
107cdf0e10cSrcweir // DATA
108cdf0e10cSrcweir String sName;
109cdf0e10cSrcweir Ce_id nOwner;
110cdf0e10cSrcweir Ce_id nNameRoom;
111cdf0e10cSrcweir
112cdf0e10cSrcweir Type_id nReturnType;
113cdf0e10cSrcweir ParamList aParameters;
114cdf0e10cSrcweir ExceptionList aExceptions;
115cdf0e10cSrcweir bool bOneWay;
116cdf0e10cSrcweir bool bEllipse;
117cdf0e10cSrcweir };
118cdf0e10cSrcweir
119cdf0e10cSrcweir
120cdf0e10cSrcweir
121cdf0e10cSrcweir
122cdf0e10cSrcweir // IMPLEMENTATION
123cdf0e10cSrcweir inline void
Add_Parameter(const String & i_sName,Type_id i_nType,E_ParameterDirection i_eDirection)124cdf0e10cSrcweir Function::Add_Parameter( const String & i_sName,
125cdf0e10cSrcweir Type_id i_nType,
126cdf0e10cSrcweir E_ParameterDirection i_eDirection )
127cdf0e10cSrcweir {
128cdf0e10cSrcweir aParameters.push_back( Parameter(i_sName,i_nType,i_eDirection) );
129cdf0e10cSrcweir }
130cdf0e10cSrcweir
131cdf0e10cSrcweir inline void
Set_Ellipse()132cdf0e10cSrcweir Function::Set_Ellipse()
133cdf0e10cSrcweir {
134cdf0e10cSrcweir bEllipse = true;
135cdf0e10cSrcweir }
136cdf0e10cSrcweir
137cdf0e10cSrcweir inline void
Add_Exception(Type_id i_nException)138cdf0e10cSrcweir Function::Add_Exception( Type_id i_nException )
139cdf0e10cSrcweir {
140cdf0e10cSrcweir aExceptions.push_back(i_nException);
141cdf0e10cSrcweir }
142cdf0e10cSrcweir
143cdf0e10cSrcweir inline Type_id
ReturnType() const144cdf0e10cSrcweir Function::ReturnType() const
145cdf0e10cSrcweir { return nReturnType; }
146cdf0e10cSrcweir
147cdf0e10cSrcweir inline bool
IsOneway() const148cdf0e10cSrcweir Function::IsOneway() const
149cdf0e10cSrcweir { return bOneWay; }
150cdf0e10cSrcweir
151cdf0e10cSrcweir
152cdf0e10cSrcweir
153cdf0e10cSrcweir
154cdf0e10cSrcweir } // namespace idl
155cdf0e10cSrcweir } // namespace ary
156cdf0e10cSrcweir #endif
157