GME
13
|
00001 //############################################################################################################################################### 00002 // 00003 // Object Constraint Language Generic Manager 00004 // OCLException.h 00005 // 00006 //############################################################################################################################################### 00007 00008 #ifndef OCLException_h 00009 #define OCLException_h 00010 00011 #include "OCLCommon.h" 00012 00013 //############################################################################################################################################### 00014 // 00015 // P R E D E F I N E D C O D E S 00016 // 00017 //############################################################################################################################################### 00018 00019 #define EX_TYPE_DOESNT_EXIST 100 00020 #define EX_TYPE_AMBIGUOUS 101 00021 #define EX_BASETYPE_DOESNT_EXIST 102 00022 #define EX_OPERATOR_AMBIGUOUS 103 00023 #define EX_OPERATOR_DOESNT_EXIST 104 00024 #define EX_FUNCTION_AMBIGUOUS 105 00025 #define EX_FUNCTION_DOESNT_EXIST 106 00026 #define EX_ATTRIBUTE_AMBIGUOUS 107 00027 #define EX_ATTRIBUTE_DOESNT_EXIST 108 00028 #define EX_ASSOCIATION_AMBIGUOUS 109 00029 #define EX_ASSOCIATION_DOESNT_EXIST 110 00030 #define EX_METHOD_AMBIGUOUS 111 00031 #define EX_METHOD_DOESNT_EXIST 112 00032 #define EX_ITERATOR_AMBIGUOUS 113 00033 #define EX_ITERATOR_DOESNT_EXIST 114 00034 #define EX_INVALID_TYPE 115 00035 #define EX_TYPE_ISNT_COMPOUND 116 00036 #define EX_VARIABLE_ALREADY_EXISTS 117 00037 #define EX_BOOLEAN_REQUIRED 118 00038 #define EX_IF_TYPE_MISMATCH 119 00039 #define EX_TYPE_ISNT_A 120 00040 #define EX_OPERATOR_NOT_IMPLEMENTED 121 00041 #define EX_INVALID_CALL 122 00042 #define EX_ITERATOR_NOT_IMPLEMENTED 123 00043 #define EX_OBJECT_CALL_PROHIBITED 124 00044 #define EX_METHOD_ITERATOR_AMBIGUOUS 125 00045 #define EX_METHOD_NOT_IMPLEMENTED 126 00046 #define EX_FUNCTION_NOT_IMPLEMENTED 127 00047 #define EX_ASSOCIATION_NOT_IMPLEMENTED 128 00048 #define EX_ATTRIBUTE_NOT_IMPLEMENTED 129 00049 #define EX_ATTRIBUTE_ASSOCIATION_AMBIGUOUS 130 00050 #define EX_VARIABLE_DOESNT_EXIST 131 00051 #define EX_CANNOT_CREATE_OBJECT 132 00052 #define EX_CANNOT_CREATE_COLLECTION 133 00053 #define EX_ATTRIBUTE_INNERATTRIBUTE_AMBIGUOUS 134 00054 #define EX_TYPE_NOT_COMPOUND_ITERATOR 135 00055 #define EX_TYPE_COMPOUND_ASSOCIATION 136 00056 #define EX_ITERATOR_ONE_ARGUMENT 137 00057 #define EX_CONSTRAINT_DEF_RETURN_MISSING 138 00058 #define EX_CONSTRAINT_DEF_RETURN_MISMATCH 139 00059 #define EX_CONSTRAINT_DEF_FAILED 140 00060 #define EX_ASSIGNMENT_TYPE_MISMATCH 141 00061 #define EX_CAST_TYPE_MISMATCH 142 00062 #define EX_IMPL_ITER_DOESNT_EXIST 143 00063 #define EX_FUNC_IMPL_METH_ITER_DOESNT_EXIST 144 00064 #define EX_IMPL_ASSOC_DOESNT_EXIST 145 00065 #define EX_VAR_IMPL_ATTRIB_ASSOC_DOESNT_EXIST 146 00066 #define EX_STOP_EVALUATION 147 00067 00068 //############################################################################################################################################### 00069 // 00070 // M A C R O S 00071 // 00072 //############################################################################################################################################### 00073 00074 #define THROWOCL0( type, code_or_message ) \ 00075 throw OclCommon::Exception( OclCommon::Exception:: type, code_or_message ) 00076 00077 #define THROWOCL1( type, code_or_message, param1 ) \ 00078 throw OclCommon::Exception( OclCommon::Exception:: type, code_or_message, param1 ) 00079 00080 #define THROWOCL2( type, code_or_message, param1, param2 ) \ 00081 throw OclCommon::Exception( OclCommon::Exception:: type, code_or_message, param1, param2 ) 00082 00083 #define THROWOCL3( type, code_or_message, param1, param2, param3 ) \ 00084 throw OclCommon::Exception( OclCommon::Exception:: type, code_or_message, param1, param2, param3 ) 00085 00086 namespace OclCommon 00087 { 00088 //class Exception; 00089 class ExceptionPool; 00090 00091 //############################################################################################################################################### 00092 // 00093 // C L A S S : Exception 00094 // 00095 //=============================================================================================================================================== 00096 // 00097 // D E S C R I P T I O N : 00098 // 00099 //############################################################################################################################################### 00100 00101 class Exception 00102 { 00103 public : 00104 enum ExceptionType { ET_SYNTACTIC = 0, ET_SEMANTIC = 1, ET_RUNTIME = 2, ET_WARNING = 3 }; 00105 00106 private : 00107 int m_iCode; 00108 std::string m_strMessage; 00109 ExceptionType m_eType; 00110 StringVector m_vecParameters; 00111 int m_iLine; 00112 int m_iColumn; 00113 00114 public : 00115 Exception() 00116 : m_iCode( -1 ), m_iLine( -1 ), m_iColumn( -1 ), m_strMessage( "" ), m_eType( ET_SEMANTIC ) 00117 { 00118 } 00119 00120 Exception( ExceptionType eType, int iCode, int iLine = -1, int iColumn = -1 ) 00121 : m_iCode( iCode ), m_iLine( iLine ), m_iColumn( iColumn ), m_strMessage( "" ), m_eType( eType ) 00122 { 00123 } 00124 00125 Exception( ExceptionType eType, int iCode, const std::string& param, int iLine = -1, int iColumn = -1 ) 00126 : m_iCode( iCode ), m_strMessage( "" ), m_iLine( iLine ), m_iColumn( iColumn ), m_eType( eType ) 00127 { 00128 m_vecParameters.push_back( param ); 00129 } 00130 00131 Exception( ExceptionType eType, int iCode, const std::string& param1, const std::string& param2, int iLine = -1, int iColumn = -1 ) 00132 : m_iCode( iCode ), m_strMessage( "" ), m_iLine( iLine ), m_iColumn( iColumn ), m_eType( eType ) 00133 { 00134 m_vecParameters.push_back( param1 ); 00135 m_vecParameters.push_back( param2 ); 00136 } 00137 00138 Exception( ExceptionType eType, int iCode, const std::string& param1, const std::string& param2, const std::string& param3, int iLine = -1, int iColumn = -1 ) 00139 : m_iCode( iCode ), m_strMessage( "" ), m_iLine( iLine ), m_iColumn( iColumn ), m_eType( eType ) 00140 { 00141 m_vecParameters.push_back( param1 ); 00142 m_vecParameters.push_back( param2 ); 00143 m_vecParameters.push_back( param3 ); 00144 } 00145 00146 Exception( ExceptionType eType, int iCode, const StringVector& vecParameters, int iLine = -1, int iColumn = -1 ) 00147 : m_iCode( iCode ), m_vecParameters( vecParameters ), m_strMessage( "" ), m_iLine( iLine ), m_iColumn( iColumn ), m_eType( eType ) 00148 { 00149 } 00150 00151 Exception( ExceptionType eType, const std::string& strMessage, int iLine = -1, int iColumn = -1 ) 00152 : m_iCode( -1 ), m_strMessage( strMessage ), m_iLine( iLine ), m_iColumn( iColumn ), m_eType( eType ) 00153 { 00154 } 00155 00156 Exception( ExceptionType eType, const std::string& strMessage, const std::string& param, int iLine = -1, int iColumn = -1 ) 00157 : m_iCode( -1 ), m_strMessage( strMessage ), m_iLine( iLine ), m_iColumn( iColumn ), m_eType( eType ) 00158 { 00159 m_vecParameters.push_back( param ); 00160 } 00161 00162 Exception( ExceptionType eType, const std::string& strMessage, const std::string& param1, const std::string& param2, int iLine = -1, int iColumn = -1 ) 00163 : m_iCode( -1 ), m_strMessage( strMessage ), m_iLine( iLine ), m_iColumn( iColumn ), m_eType( eType ) 00164 { 00165 m_vecParameters.push_back( param1 ); 00166 m_vecParameters.push_back( param2 ); 00167 } 00168 00169 Exception( ExceptionType eType, const std::string& strMessage, const std::string& param1, const std::string& param2, const std::string& param3, int iLine = -1, int iColumn = -1 ) 00170 : m_iCode( -1 ), m_strMessage( strMessage ), m_iLine( iLine ), m_iColumn( iColumn ), m_eType( eType ) 00171 { 00172 m_vecParameters.push_back( param1 ); 00173 m_vecParameters.push_back( param2 ); 00174 m_vecParameters.push_back( param3 ); 00175 } 00176 00177 00178 Exception( ExceptionType eType, const std::string& strMessage, const StringVector& vecParameters, int iLine = -1, int iColumn = -1 ) 00179 : m_iCode( -1 ), m_vecParameters( vecParameters ), m_strMessage( strMessage ), m_iLine( iLine ), m_iColumn( iColumn ), m_eType( eType ) 00180 { 00181 } 00182 00183 Exception( ExceptionType eType, const Exception& e ) 00184 : m_iCode( e.m_iCode ), m_vecParameters( e.m_vecParameters ), m_iLine( e.m_iLine ), m_iColumn( e.m_iColumn ), m_strMessage( e.m_strMessage ), m_eType( e.m_eType ) 00185 { 00186 } 00187 00188 Exception& operator=( const Exception& e ) 00189 { 00190 if ( this != &e ) { 00191 m_iCode = e.m_iCode; 00192 m_vecParameters = e.m_vecParameters; 00193 m_iLine = e.m_iLine; 00194 m_strMessage = e.m_strMessage; 00195 m_eType = e.m_eType; 00196 } 00197 return *this; 00198 } 00199 00200 int GetLine() 00201 { 00202 return m_iLine; 00203 } 00204 00205 int GetColumn() 00206 { 00207 return m_iColumn; 00208 } 00209 00210 void SetLine( int iLine ) 00211 { 00212 m_iLine = iLine; 00213 } 00214 00215 void SetColumn( int iColumn ) 00216 { 00217 m_iColumn = iColumn; 00218 } 00219 00220 std::string GGetMessage();//z! 00221 00222 int GetCode() 00223 { 00224 return m_iCode; 00225 } 00226 00227 ExceptionType GetType() 00228 { 00229 return m_eType; 00230 } 00231 }; 00232 00233 //############################################################################################################################################## 00234 // 00235 // C L A S S : ExceptionPool 00236 // 00237 //============================================================================================================================================== 00238 // 00239 // D E S C R I P T I O N : 00240 // 00241 //############################################################################################################################################## 00242 00243 class ExceptionPool 00244 { 00245 private : 00246 typedef std::vector< Exception > ExceptionVector; 00247 00248 ExceptionVector m_vecExceptions; 00249 bool m_bHasError; 00250 00251 public : 00252 ExceptionPool() 00253 : m_bHasError( false ) 00254 { 00255 } 00256 00257 ExceptionPool( const ExceptionPool& object ) 00258 : m_vecExceptions( object.m_vecExceptions ), m_bHasError( object.m_bHasError ) 00259 { 00260 } 00261 00262 ExceptionPool& operator=( const ExceptionPool& object ) 00263 { 00264 if ( this != &object ) { 00265 m_vecExceptions = object.m_vecExceptions; 00266 m_bHasError = object.m_bHasError; 00267 } 00268 return *this; 00269 } 00270 00271 void Add( Exception& e ) 00272 { 00273 m_vecExceptions.push_back( e ); 00274 if ( e.GetType() != Exception::ET_WARNING ) 00275 m_bHasError = true; 00276 } 00277 00278 void Add( ExceptionPool& ePool ) 00279 { 00280 for ( unsigned int i = 0 ; i < ePool.m_vecExceptions.size() ; i++ ) 00281 Add( ePool.m_vecExceptions[ i ] ); 00282 } 00283 00284 int Size() const 00285 { 00286 return m_vecExceptions.size(); 00287 } 00288 00289 Exception& GetAt( int iPos ) const 00290 { 00291 return ((ExceptionPool*)this)->m_vecExceptions[ iPos ]; 00292 } 00293 00294 bool IsEmpty() 00295 { 00296 return m_vecExceptions.empty(); 00297 } 00298 00299 void Clear( int from = -1, int to = -1 ) 00300 { 00301 if ( m_vecExceptions.empty() ) 00302 return; 00303 if ( from < 0 ) 00304 from = 0; 00305 if ( from > (int) m_vecExceptions.size() ) 00306 return; 00307 if ( to < 0 || to >= (int) m_vecExceptions.size() ) 00308 to = m_vecExceptions.size() - 1; 00309 if ( from == 0 && to == (int) m_vecExceptions.size() - 1 ) 00310 m_vecExceptions.clear(); 00311 else { 00312 ExceptionVector vecTemp( m_vecExceptions ); 00313 m_vecExceptions.clear(); 00314 int i; 00315 for ( i = 0 ; i < from ; i++ ) 00316 m_vecExceptions.push_back( vecTemp[ i ] ); 00317 for ( i = to ; i < (int) vecTemp.size() ; i++ ) 00318 m_vecExceptions.push_back( vecTemp[ i ] ); 00319 } 00320 m_bHasError = false; 00321 for ( unsigned int i = 0 ; i < m_vecExceptions.size() ; i++ ) 00322 if ( m_vecExceptions[ i ].GetType() != Exception::ET_WARNING ) { 00323 m_bHasError = true; 00324 break; 00325 } 00326 } 00327 00328 bool HasError() const 00329 { 00330 return m_bHasError; 00331 } 00332 00333 void SetLine( int iLine ) 00334 { 00335 for ( unsigned int i = 0 ; i < m_vecExceptions.size() ; i++ ) 00336 m_vecExceptions[ i ].SetLine( iLine ); 00337 } 00338 00339 void SetColumn( int iColumn ) 00340 { 00341 for ( unsigned int i = 0 ; i < m_vecExceptions.size() ; i++ ) 00342 m_vecExceptions[ i ].SetColumn( iColumn ); 00343 } 00344 }; 00345 00346 }; // namespace OclCommon 00347 00348 #endif // OCLException_h 00349 00350