qpOASES
3.0.1
|
00001 /* 00002 * This file is part of qpOASES. 00003 * 00004 * qpOASES -- An Implementation of the Online Active Set Strategy. 00005 * Copyright (C) 2007-2014 by Hans Joachim Ferreau, Andreas Potschka, 00006 * Christian Kirches et al. All rights reserved. 00007 * 00008 * qpOASES is free software; you can redistribute it and/or 00009 * modify it under the terms of the GNU Lesser General Public 00010 * License as published by the Free Software Foundation; either 00011 * version 2.1 of the License, or (at your option) any later version. 00012 * 00013 * qpOASES is distributed in the hope that it will be useful, 00014 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00016 * See the GNU Lesser General Public License for more details. 00017 * 00018 * You should have received a copy of the GNU Lesser General Public 00019 * License along with qpOASES; if not, write to the Free Software 00020 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00021 * 00022 */ 00023 00024 00035 #ifndef QPOASES_MESSAGEHANDLING_HPP 00036 #define QPOASES_MESSAGEHANDLING_HPP 00037 00038 00039 #include <stdio.h> 00040 #include <string.h> 00041 00042 #ifdef __DEBUG__ 00043 #include <assert.h> 00044 #endif 00045 00046 #include <qpOASES/Constants.hpp> 00047 00048 00049 BEGIN_NAMESPACE_QPOASES 00050 00051 00053 static FILE* stdFile = stdout; 00054 00055 00064 enum returnValue 00065 { 00066 TERMINAL_LIST_ELEMENT = -1, 00067 /* miscellaneous */ 00068 SUCCESSFUL_RETURN = 0, 00069 RET_DIV_BY_ZERO, 00070 RET_INDEX_OUT_OF_BOUNDS, 00071 RET_INVALID_ARGUMENTS, 00072 RET_ERROR_UNDEFINED, 00073 RET_WARNING_UNDEFINED, 00074 RET_INFO_UNDEFINED, 00075 RET_EWI_UNDEFINED, 00076 RET_AVAILABLE_WITH_LINUX_ONLY, 00077 RET_UNKNOWN_BUG, 00078 RET_PRINTLEVEL_CHANGED, 00079 RET_NOT_YET_IMPLEMENTED, 00080 /* Indexlist */ 00081 RET_INDEXLIST_MUST_BE_REORDERD, 00082 RET_INDEXLIST_EXCEEDS_MAX_LENGTH, 00083 RET_INDEXLIST_CORRUPTED, 00084 RET_INDEXLIST_OUTOFBOUNDS, 00085 RET_INDEXLIST_ADD_FAILED, 00086 RET_INDEXLIST_INTERSECT_FAILED, 00087 /* SubjectTo / Bounds / Constraints */ 00088 RET_INDEX_ALREADY_OF_DESIRED_STATUS, 00089 RET_ADDINDEX_FAILED, 00090 RET_REMOVEINDEX_FAILED, 00091 RET_SWAPINDEX_FAILED, 00092 RET_NOTHING_TO_DO, 00093 RET_SETUP_BOUND_FAILED, 00094 RET_SETUP_CONSTRAINT_FAILED, 00095 RET_MOVING_BOUND_FAILED, 00096 RET_MOVING_CONSTRAINT_FAILED, 00097 RET_SHIFTING_FAILED, 00098 RET_ROTATING_FAILED, 00099 /* QProblem */ 00100 RET_QPOBJECT_NOT_SETUP, 00101 RET_QP_ALREADY_INITIALISED, 00102 RET_NO_INIT_WITH_STANDARD_SOLVER, 00103 RET_RESET_FAILED, 00104 RET_INIT_FAILED, 00105 RET_INIT_FAILED_TQ, 00106 RET_INIT_FAILED_CHOLESKY, 00107 RET_INIT_FAILED_HOTSTART, 00108 RET_INIT_FAILED_INFEASIBILITY, 00109 RET_INIT_FAILED_UNBOUNDEDNESS, 00110 RET_INIT_FAILED_REGULARISATION, 00111 RET_INIT_SUCCESSFUL, 00112 RET_OBTAINING_WORKINGSET_FAILED, 00113 RET_SETUP_WORKINGSET_FAILED, 00114 RET_SETUP_AUXILIARYQP_FAILED, 00115 RET_NO_EXTERN_SOLVER, 00116 RET_QP_UNBOUNDED, 00117 RET_QP_INFEASIBLE, 00118 RET_QP_NOT_SOLVED, 00119 RET_QP_SOLVED, 00120 RET_UNABLE_TO_SOLVE_QP, 00121 RET_INITIALISATION_STARTED, 00122 RET_HOTSTART_FAILED, 00123 RET_HOTSTART_FAILED_TO_INIT, 00124 RET_HOTSTART_FAILED_AS_QP_NOT_INITIALISED, 00125 RET_ITERATION_STARTED, 00126 RET_SHIFT_DETERMINATION_FAILED, 00127 RET_STEPDIRECTION_DETERMINATION_FAILED, 00128 RET_STEPLENGTH_DETERMINATION_FAILED, 00129 RET_OPTIMAL_SOLUTION_FOUND, 00130 RET_HOMOTOPY_STEP_FAILED, 00131 RET_HOTSTART_STOPPED_INFEASIBILITY, 00132 RET_HOTSTART_STOPPED_UNBOUNDEDNESS, 00133 RET_WORKINGSET_UPDATE_FAILED, 00134 RET_MAX_NWSR_REACHED, 00135 RET_CONSTRAINTS_NOT_SPECIFIED, 00136 RET_INVALID_FACTORISATION_FLAG, 00137 RET_UNABLE_TO_SAVE_QPDATA, 00138 RET_STEPDIRECTION_FAILED_TQ, 00139 RET_STEPDIRECTION_FAILED_CHOLESKY, 00140 RET_CYCLING_DETECTED, 00141 RET_CYCLING_NOT_RESOLVED, 00142 RET_CYCLING_RESOLVED, 00143 RET_STEPSIZE, 00144 RET_STEPSIZE_NONPOSITIVE, 00145 RET_SETUPSUBJECTTOTYPE_FAILED, 00146 RET_ADDCONSTRAINT_FAILED, 00147 RET_ADDCONSTRAINT_FAILED_INFEASIBILITY, 00148 RET_ADDBOUND_FAILED, 00149 RET_ADDBOUND_FAILED_INFEASIBILITY, 00150 RET_REMOVECONSTRAINT_FAILED, 00151 RET_REMOVEBOUND_FAILED, 00152 RET_REMOVE_FROM_ACTIVESET, 00153 RET_ADD_TO_ACTIVESET, 00154 RET_REMOVE_FROM_ACTIVESET_FAILED, 00155 RET_ADD_TO_ACTIVESET_FAILED, 00156 RET_CONSTRAINT_ALREADY_ACTIVE, 00157 RET_ALL_CONSTRAINTS_ACTIVE, 00158 RET_LINEARLY_DEPENDENT, 00159 RET_LINEARLY_INDEPENDENT, 00160 RET_LI_RESOLVED, 00161 RET_ENSURELI_FAILED, 00162 RET_ENSURELI_FAILED_TQ, 00163 RET_ENSURELI_FAILED_NOINDEX, 00164 RET_ENSURELI_FAILED_CYCLING, 00165 RET_BOUND_ALREADY_ACTIVE, 00166 RET_ALL_BOUNDS_ACTIVE, 00167 RET_CONSTRAINT_NOT_ACTIVE, 00168 RET_BOUND_NOT_ACTIVE, 00169 RET_HESSIAN_NOT_SPD, 00170 RET_HESSIAN_INDEFINITE, 00171 RET_MATRIX_SHIFT_FAILED, 00172 RET_MATRIX_FACTORISATION_FAILED, 00173 RET_PRINT_ITERATION_FAILED, 00174 RET_NO_GLOBAL_MESSAGE_OUTPUTFILE, 00175 RET_DISABLECONSTRAINTS_FAILED, 00176 RET_ENABLECONSTRAINTS_FAILED, 00177 RET_ALREADY_ENABLED, 00178 RET_ALREADY_DISABLED, 00179 RET_NO_HESSIAN_SPECIFIED, 00180 RET_USING_REGULARISATION, 00181 RET_EPS_MUST_BE_POSITVE, 00182 RET_REGSTEPS_MUST_BE_POSITVE, 00183 RET_HESSIAN_ALREADY_REGULARISED, 00184 RET_CANNOT_REGULARISE_IDENTITY, 00185 RET_CANNOT_REGULARISE_SPARSE, 00186 RET_NO_REGSTEP_NWSR, 00187 RET_FEWER_REGSTEPS_NWSR, 00188 RET_CHOLESKY_OF_ZERO_HESSIAN, 00189 RET_CONSTRAINTS_ARE_NOT_SCALED, 00190 RET_INITIAL_BOUNDS_STATUS_NYI, 00191 RET_ERROR_IN_CONSTRAINTPRODUCT, 00192 RET_FIX_BOUNDS_FOR_LP, 00193 RET_USE_REGULARISATION_FOR_LP, 00194 /* SQProblem */ 00195 RET_UPDATEMATRICES_FAILED, 00196 RET_UPDATEMATRICES_FAILED_AS_QP_NOT_SOLVED, 00197 /* Utils */ 00198 RET_UNABLE_TO_OPEN_FILE, 00199 RET_UNABLE_TO_WRITE_FILE, 00200 RET_UNABLE_TO_READ_FILE, 00201 RET_FILEDATA_INCONSISTENT, 00202 /* Options */ 00203 RET_OPTIONS_ADJUSTED, 00204 /* SolutionAnalysis */ 00205 RET_UNABLE_TO_ANALYSE_QPROBLEM, 00206 /* Benchmark */ 00207 RET_NWSR_SET_TO_ONE, 00208 RET_UNABLE_TO_READ_BENCHMARK, 00209 RET_BENCHMARK_ABORTED, 00210 RET_INITIAL_QP_SOLVED, 00211 RET_QP_SOLUTION_STARTED, 00212 RET_BENCHMARK_SUCCESSFUL, 00213 /* Sparse matrices */ 00214 RET_NO_DIAGONAL_AVAILABLE, 00215 RET_DIAGONAL_NOT_INITIALISED, 00216 /* Dropping of infeasible constraints */ 00217 RET_ENSURELI_DROPPED, 00218 /* Simple exitflags */ 00219 RET_SIMPLE_STATUS_P1, 00220 RET_SIMPLE_STATUS_P0, 00221 RET_SIMPLE_STATUS_M1, 00222 RET_SIMPLE_STATUS_M2, 00223 RET_SIMPLE_STATUS_M3 00224 }; 00225 00226 00237 class MessageHandling 00238 { 00239 /* 00240 * INTERNAL DATA STRUCTURES 00241 */ 00242 public: 00250 typedef struct { 00251 returnValue key; 00252 const char* data; 00253 VisibilityStatus globalVisibilityStatus; 00255 } ReturnValueList; 00256 00257 00258 /* 00259 * PUBLIC MEMBER FUNCTIONS 00260 */ 00261 public: 00263 MessageHandling( ); 00264 00266 MessageHandling( FILE* _outputFile 00267 ); 00268 00270 MessageHandling( VisibilityStatus _errorVisibility, 00271 VisibilityStatus _warningVisibility, 00272 VisibilityStatus _infoVisibility 00273 ); 00274 00276 MessageHandling( FILE* _outputFile, 00277 VisibilityStatus _errorVisibility, 00278 VisibilityStatus _warningVisibility, 00279 VisibilityStatus _infoVisibility 00280 ); 00281 00283 MessageHandling( const MessageHandling& rhs 00284 ); 00285 00287 ~MessageHandling( ); 00288 00290 MessageHandling& operator=( const MessageHandling& rhs 00291 ); 00292 00293 00300 returnValue throwError( returnValue Enumber, 00301 const char* additionaltext, 00302 const char* functionname, 00303 const char* filename, 00304 const unsigned long linenumber, 00305 VisibilityStatus localVisibilityStatus 00308 ); 00309 00314 returnValue throwWarning( returnValue Wnumber, 00315 const char* additionaltext, 00316 const char* functionname, 00317 const char* filename, 00318 const unsigned long linenumber, 00319 VisibilityStatus localVisibilityStatus 00322 ); 00323 00327 returnValue throwInfo( returnValue Inumber, 00328 const char* additionaltext, 00329 const char* functionname, 00330 const char* filename, 00331 const unsigned long linenumber, 00332 VisibilityStatus localVisibilityStatus 00335 ); 00336 00337 00340 returnValue reset( ); 00341 00342 00345 returnValue listAllMessages( ); 00346 00347 00350 inline VisibilityStatus getErrorVisibilityStatus( ) const; 00351 00354 inline VisibilityStatus getWarningVisibilityStatus( ) const; 00355 00358 inline VisibilityStatus getInfoVisibilityStatus( ) const; 00359 00362 inline FILE* getOutputFile( ) const; 00363 00366 inline int getErrorCount( ) const; 00367 00368 00370 inline void setErrorVisibilityStatus( VisibilityStatus _errorVisibility 00371 ); 00372 00374 inline void setWarningVisibilityStatus( VisibilityStatus _warningVisibility 00375 ); 00376 00378 inline void setInfoVisibilityStatus( VisibilityStatus _infoVisibility 00379 ); 00380 00382 inline void setOutputFile( FILE* _outputFile 00383 ); 00384 00388 inline returnValue setErrorCount( int _errorCount 00389 ); 00390 00393 static const char* getErrorCodeMessage( const returnValue _returnValue 00394 ); 00395 00396 00397 /* 00398 * PROTECTED MEMBER FUNCTIONS 00399 */ 00400 protected: 00404 returnValue throwMessage( 00405 returnValue RETnumber, 00406 const char* additionaltext, 00407 const char* functionname, 00408 const char* filename, 00409 const unsigned long linenumber, 00410 VisibilityStatus localVisibilityStatus, 00413 const char* RETstring 00414 ); 00415 00416 00417 /* 00418 * PROTECTED MEMBER VARIABLES 00419 */ 00420 protected: 00421 VisibilityStatus errorVisibility; 00422 VisibilityStatus warningVisibility; 00423 VisibilityStatus infoVisibility; 00425 FILE* outputFile; 00427 int errorCount; 00428 }; 00429 00430 00431 #ifndef __FUNCTION__ 00432 00433 #define __FUNCTION__ 0 00434 #endif 00435 00436 #ifndef __FILE__ 00437 00438 #define __FILE__ 0 00439 #endif 00440 00441 #ifndef __LINE__ 00442 00443 #define __LINE__ 0 00444 #endif 00445 00446 00448 #define THROWERROR(retval) ( getGlobalMessageHandler( )->throwError((retval),0,__FUNCTION__,__FILE__,__LINE__,VS_VISIBLE) ) 00449 00451 #define THROWWARNING(retval) ( getGlobalMessageHandler( )->throwWarning((retval),0,__FUNCTION__,__FILE__,__LINE__,VS_VISIBLE) ) 00452 00454 #define THROWINFO(retval) ( getGlobalMessageHandler( )->throwInfo((retval),0,__FUNCTION__,__FILE__,__LINE__,VS_VISIBLE) ) 00455 00456 00460 MessageHandling* getGlobalMessageHandler( ); 00461 00462 00463 END_NAMESPACE_QPOASES 00464 00465 #include <qpOASES/MessageHandling.ipp> 00466 00467 #endif /* QPOASES_MESSAGEHANDLING_HPP */ 00468 00469 00470 /* 00471 * end of file 00472 */