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_I_FUNCTION_HXX 25 #define ARY_IDL_I_FUNCTION_HXX 26 27 // BASE CLASSES 28 #include <ary/idl/i_ce.hxx> 29 30 // USED SERVICES 31 #include <ary/idl/i_param.hxx> 32 #include <ary/idl/ik_function.hxx> 33 #include <ary/stdconstiter.hxx> 34 35 36 37 38 namespace ary 39 { 40 namespace idl 41 { 42 43 44 /** Represents an IDL function. 45 46 Special case constructor: 47 Constructors have return type "0". 48 */ 49 class Function : public CodeEntity 50 { 51 public: 52 enum E_ClassId { class_id = 2002 }; 53 54 typedef std::vector< Parameter > ParamList; 55 typedef std::vector< Type_id > ExceptionList; 56 57 // LIFECYCLE 58 /// Normal function 59 Function( 60 const String & i_sName, 61 Ce_id i_nOwner, 62 Ce_id i_nNameRoom, 63 Type_id i_nReturnType, 64 bool i_bOneWay ); 65 /// Constructor 66 Function( 67 const String & i_sName, 68 Ce_id i_nOwner, 69 Ce_id i_nNameRoom ); 70 ~Function(); 71 72 // OPERATIONS 73 void Add_Parameter( 74 const String & i_sName, 75 Type_id i_nType, 76 E_ParameterDirection 77 i_eDirection ); 78 /// The function's parameter list ends with the ellipse "..." . 79 void Set_Ellipse(); 80 void Add_Exception( 81 Type_id i_nException ); 82 83 // INQUIRY 84 Type_id ReturnType() const; 85 const ParamList & Parameters() const { return aParameters; } 86 const ExceptionList & 87 Exceptions() const { return aExceptions; } 88 bool IsOneway() const; 89 bool HasEllipse() const { return bEllipse; } 90 91 private: 92 // Interface csv::ConstProcessorClient: 93 virtual void do_Accept( 94 csv::ProcessorIfc & io_processor ) const; 95 // Interface ary::Object: 96 virtual ClassId get_AryClass() const; 97 98 // Interface CodeEntity 99 virtual const String & inq_LocalName() const; 100 virtual Ce_id inq_NameRoom() const; 101 virtual Ce_id inq_Owner() const; 102 virtual E_SightLevel inq_SightLevel() const; 103 104 // Locals 105 friend struct ifc_function::attr; 106 107 // DATA 108 String sName; 109 Ce_id nOwner; 110 Ce_id nNameRoom; 111 112 Type_id nReturnType; 113 ParamList aParameters; 114 ExceptionList aExceptions; 115 bool bOneWay; 116 bool bEllipse; 117 }; 118 119 120 121 122 // IMPLEMENTATION 123 inline void 124 Function::Add_Parameter( const String & i_sName, 125 Type_id i_nType, 126 E_ParameterDirection i_eDirection ) 127 { 128 aParameters.push_back( Parameter(i_sName,i_nType,i_eDirection) ); 129 } 130 131 inline void 132 Function::Set_Ellipse() 133 { 134 bEllipse = true; 135 } 136 137 inline void 138 Function::Add_Exception( Type_id i_nException ) 139 { 140 aExceptions.push_back(i_nException); 141 } 142 143 inline Type_id 144 Function::ReturnType() const 145 { return nReturnType; } 146 147 inline bool 148 Function::IsOneway() const 149 { return bOneWay; } 150 151 152 153 154 } // namespace idl 155 } // namespace ary 156 #endif 157