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_CPP_CA_CE_HXX 25 #define ARY_CPP_CA_CE_HXX 26 27 // USED SERVICES 28 // BASE CLASSES 29 #include <ary/cpp/cp_ce.hxx> 30 // OTHER 31 #include "cs_ce.hxx" 32 33 34 namespace ary 35 { 36 namespace cpp 37 { 38 class Ce_Storage; 39 class RepositoryPartition; 40 } 41 } 42 43 44 45 46 47 namespace ary 48 { 49 namespace cpp 50 { 51 52 53 54 /** Administrates all C++ code entities (types, operations, variables). 55 */ 56 class CeAdmin : public CePilot 57 { 58 public: 59 // LIFECYCLE 60 CeAdmin( 61 RepositoryPartition & 62 io_myReposyPartition ); 63 void Set_Related( 64 const TypePilot & i_types ); 65 virtual ~CeAdmin(); 66 67 // INQUIRY 68 const Ce_Storage & Storage() const; 69 70 // ACCESS 71 Ce_Storage & Storage(); 72 73 // INHERITED 74 // Interface CePilot: 75 virtual Namespace & CheckIn_Namespace( 76 const InputContext & 77 i_context, 78 const String & i_localName ); 79 virtual Class & Store_Class( 80 const InputContext & 81 i_context, 82 const String & i_localName, 83 E_ClassKey i_classKey ); 84 virtual Enum & Store_Enum( 85 const InputContext & 86 i_context, 87 const String & i_localName ); 88 virtual Typedef & Store_Typedef( 89 const InputContext & 90 i_context, 91 const String & i_localName, 92 Type_id i_referredType ); 93 virtual Function * Store_Operation( 94 const InputContext & 95 i_context, 96 const String & i_localName, 97 Type_id i_returnType, 98 const std::vector<S_Parameter> & 99 i_parameters, 100 E_Virtuality i_virtuality, 101 E_ConVol i_conVol, 102 FunctionFlags i_flags, 103 bool i_throwExists, 104 const std::vector<Type_id> & 105 i_exceptions ); 106 virtual Variable & Store_Variable( 107 const InputContext & 108 i_context, 109 const String & i_localName, 110 Type_id i_type, 111 VariableFlags i_flags, 112 const String & i_arraySize, 113 const String & i_initValue ); 114 virtual EnumValue & Store_EnumValue( 115 const InputContext & 116 i_context, 117 const String & i_localName, 118 const String & i_initValue ); 119 virtual const Namespace & 120 GlobalNamespace() const; 121 virtual const CodeEntity & 122 Find_Ce( 123 Ce_id i_id ) const; 124 virtual const CodeEntity * 125 Search_Ce( 126 Ce_id i_id ) const; 127 virtual const CodeEntity * 128 Search_CeAbsolute( 129 const CodeEntity & i_curScope, 130 const QualifiedName & 131 i_absoluteName ) const; 132 virtual const CodeEntity * 133 Search_CeLocal( 134 const String & i_relativeName, 135 bool i_isFunction, 136 const Namespace & i_curNamespace, 137 const Class * i_curClass ) const; 138 virtual void Get_QualifiedName( 139 StreamStr & o_result, 140 const String & i_localName, 141 Ce_id i_owner, 142 const char * i_delimiter = "::" ) const; 143 virtual void Get_SignatureText( 144 StreamStr & o_rOut, 145 const OperationSignature & 146 i_signature, 147 const StringVector * 148 i_sParameterNames = 0 ) const; 149 virtual CesResultList 150 Search_TypeName( 151 const String & i_sName ) const; 152 virtual Namespace & GlobalNamespace(); 153 154 private: 155 // Locals 156 /// @return true, if function is duplicate. 157 enum E_DuplicateFunction 158 { 159 df_no, 160 df_replace, 161 df_discard_new 162 }; 163 164 /** @param o_existentFunction 165 The id of the already existing function, else unset. 166 */ 167 E_DuplicateFunction lhf_CheckAndHandle_DuplicateOperation( 168 Ce_id & o_existentFunction, 169 const InputContext & 170 i_context, 171 const Function & i_newFunction ); 172 Namespace & Create_Namespace( 173 Namespace & o_parent, 174 const String & i_localName ); 175 Ce_id Search_MatchingInstance( 176 CesResultList i_list, 177 Ce_id i_owner ) const; 178 const TypePilot & Types() const; 179 180 // DATA 181 Ce_Storage aStorage; 182 const TypePilot * pTypes; 183 RepositoryPartition * 184 pCppRepositoryPartition; 185 }; 186 187 188 189 190 // IMPLEMENTATION 191 inline const Ce_Storage & 192 CeAdmin::Storage() const 193 { 194 return aStorage; 195 } 196 197 inline Ce_Storage & 198 CeAdmin::Storage() 199 { 200 return aStorage; 201 } 202 203 204 205 206 207 } // namespace cpp 208 } // namespace ary 209 #endif 210