You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
544 lines
26 KiB
544 lines
26 KiB
/*
|
|
* This file is part of qpOASES.
|
|
*
|
|
* qpOASES -- An Implementation of the Online Active Set Strategy.
|
|
* Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka,
|
|
* Christian Kirches et al. All rights reserved.
|
|
*
|
|
* qpOASES is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* qpOASES is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
* See the GNU Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with qpOASES; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*
|
|
*/
|
|
|
|
|
|
/**
|
|
* \file include/qpOASES_e/MessageHandling.h
|
|
* \author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches (thanks to Leonard Wirsching)
|
|
* \version 3.1embedded
|
|
* \date 2007-2015
|
|
*
|
|
* Declaration of the MessageHandling class including global return values.
|
|
*/
|
|
|
|
|
|
#ifndef QPOASES_MESSAGEHANDLING_H
|
|
#define QPOASES_MESSAGEHANDLING_H
|
|
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <math.h>
|
|
#include <assert.h>
|
|
|
|
#include <qpOASES_e/Constants.h>
|
|
|
|
|
|
BEGIN_NAMESPACE_QPOASES
|
|
|
|
|
|
/** Default file to display messages. */
|
|
#define stdFile stderr
|
|
|
|
|
|
/**
|
|
* \brief Defines all symbols for global return values.
|
|
*
|
|
* The enumeration returnValueType defines all symbols for global return values.
|
|
* Important: All return values are assumed to be nonnegative!
|
|
*
|
|
* \author Hans Joachim Ferreau
|
|
*/
|
|
typedef enum
|
|
{
|
|
TERMINAL_LIST_ELEMENT = -1, /**< Terminal list element, internal usage only! */
|
|
/* miscellaneous */
|
|
SUCCESSFUL_RETURN = 0, /**< Successful return. */
|
|
RET_DIV_BY_ZERO, /**< Division by zero. */
|
|
RET_INDEX_OUT_OF_BOUNDS, /**< Index out of bounds. */
|
|
RET_INVALID_ARGUMENTS, /**< At least one of the arguments is invalid. */
|
|
RET_ERROR_UNDEFINED, /**< Error number undefined. */
|
|
RET_WARNING_UNDEFINED, /**< Warning number undefined. */
|
|
RET_INFO_UNDEFINED, /**< Info number undefined. */
|
|
RET_EWI_UNDEFINED, /**< Error/warning/info number undefined. */
|
|
RET_AVAILABLE_WITH_LINUX_ONLY, /**< This function is available under Linux only. */
|
|
RET_UNKNOWN_BUG, /**< The error occurred is not yet known. */
|
|
RET_PRINTLEVEL_CHANGED, /**< Print level changed. (10) */
|
|
RET_NOT_YET_IMPLEMENTED, /**< Requested function is not yet implemented in this version of qpOASES. */
|
|
/* Indexlist */
|
|
RET_INDEXLIST_MUST_BE_REORDERD, /**< Index list has to be reordered. */
|
|
RET_INDEXLIST_EXCEEDS_MAX_LENGTH, /**< Index list exceeds its maximal physical length. */
|
|
RET_INDEXLIST_CORRUPTED, /**< Index list corrupted. */
|
|
RET_INDEXLIST_OUTOFBOUNDS, /**< Physical index is out of bounds. */
|
|
RET_INDEXLIST_ADD_FAILED, /**< Adding indices from another index set failed. */
|
|
RET_INDEXLIST_INTERSECT_FAILED, /**< Intersection with another index set failed. */
|
|
/* SubjectTo / Bounds / Constraints */
|
|
RET_INDEX_ALREADY_OF_DESIRED_STATUS, /**< Index is already of desired status. (18) */
|
|
RET_ADDINDEX_FAILED, /**< Adding index to index set failed. */
|
|
RET_REMOVEINDEX_FAILED, /**< Removing index from index set failed. (20) */
|
|
RET_SWAPINDEX_FAILED, /**< Cannot swap between different indexsets. */
|
|
RET_NOTHING_TO_DO, /**< Nothing to do. */
|
|
RET_SETUP_BOUND_FAILED, /**< Setting up bound index failed. */
|
|
RET_SETUP_CONSTRAINT_FAILED, /**< Setting up constraint index failed. */
|
|
RET_MOVING_BOUND_FAILED, /**< Moving bound between index sets failed. */
|
|
RET_MOVING_CONSTRAINT_FAILED, /**< Moving constraint between index sets failed. */
|
|
RET_SHIFTING_FAILED, /**< Shifting of bounds/constraints failed. */
|
|
RET_ROTATING_FAILED, /**< Rotating of bounds/constraints failed. */
|
|
/* QProblem */
|
|
RET_QPOBJECT_NOT_SETUP, /**< The QP object has not been setup correctly, use another constructor. */
|
|
RET_QP_ALREADY_INITIALISED, /**< QProblem has already been initialised. (30) */
|
|
RET_NO_INIT_WITH_STANDARD_SOLVER, /**< Initialisation via extern QP solver is not yet implemented. */
|
|
RET_RESET_FAILED, /**< Reset failed. */
|
|
RET_INIT_FAILED, /**< Initialisation failed. */
|
|
RET_INIT_FAILED_TQ, /**< Initialisation failed due to TQ factorisation. */
|
|
RET_INIT_FAILED_CHOLESKY, /**< Initialisation failed due to Cholesky decomposition. */
|
|
RET_INIT_FAILED_HOTSTART, /**< Initialisation failed! QP could not be solved! */
|
|
RET_INIT_FAILED_INFEASIBILITY, /**< Initial QP could not be solved due to infeasibility! */
|
|
RET_INIT_FAILED_UNBOUNDEDNESS, /**< Initial QP could not be solved due to unboundedness! */
|
|
RET_INIT_FAILED_REGULARISATION, /**< Initialisation failed as Hessian matrix could not be regularised. */
|
|
RET_INIT_SUCCESSFUL, /**< Initialisation done. (40) */
|
|
RET_OBTAINING_WORKINGSET_FAILED, /**< Failed to obtain working set for auxiliary QP. */
|
|
RET_SETUP_WORKINGSET_FAILED, /**< Failed to setup working set for auxiliary QP. */
|
|
RET_SETUP_AUXILIARYQP_FAILED, /**< Failed to setup auxiliary QP for initialised homotopy. */
|
|
RET_NO_CHOLESKY_WITH_INITIAL_GUESS, /**< Externally computed Cholesky factor cannot be combined with an initial guess. */
|
|
RET_NO_EXTERN_SOLVER, /**< No extern QP solver available. */
|
|
RET_QP_UNBOUNDED, /**< QP is unbounded. */
|
|
RET_QP_INFEASIBLE, /**< QP is infeasible. */
|
|
RET_QP_NOT_SOLVED, /**< Problems occurred while solving QP with standard solver. */
|
|
RET_QP_SOLVED, /**< QP successfully solved. */
|
|
RET_UNABLE_TO_SOLVE_QP, /**< Problems occurred while solving QP. (50) */
|
|
RET_INITIALISATION_STARTED, /**< Starting problem initialisation... */
|
|
RET_HOTSTART_FAILED, /**< Unable to perform homotopy due to internal error. */
|
|
RET_HOTSTART_FAILED_TO_INIT, /**< Unable to initialise problem. */
|
|
RET_HOTSTART_FAILED_AS_QP_NOT_INITIALISED, /**< Unable to perform homotopy as previous QP is not solved. */
|
|
RET_ITERATION_STARTED, /**< Iteration... */
|
|
RET_SHIFT_DETERMINATION_FAILED, /**< Determination of shift of the QP data failed. */
|
|
RET_STEPDIRECTION_DETERMINATION_FAILED, /**< Determination of step direction failed. */
|
|
RET_STEPLENGTH_DETERMINATION_FAILED, /**< Determination of step direction failed. */
|
|
RET_OPTIMAL_SOLUTION_FOUND, /**< Optimal solution of neighbouring QP found. */
|
|
RET_HOMOTOPY_STEP_FAILED, /**< Unable to perform homotopy step. (60) */
|
|
RET_HOTSTART_STOPPED_INFEASIBILITY, /**< Premature homotopy termination because QP is infeasible. */
|
|
RET_HOTSTART_STOPPED_UNBOUNDEDNESS, /**< Premature homotopy termination because QP is unbounded. */
|
|
RET_WORKINGSET_UPDATE_FAILED, /**< Unable to update working sets according to initial guesses. */
|
|
RET_MAX_NWSR_REACHED, /**< Maximum number of working set recalculations performed. */
|
|
RET_CONSTRAINTS_NOT_SPECIFIED, /**< Problem does comprise constraints! You also have to specify new constraints' bounds. */
|
|
RET_INVALID_FACTORISATION_FLAG, /**< Invalid factorisation flag. */
|
|
RET_UNABLE_TO_SAVE_QPDATA, /**< Unable to save QP data. */
|
|
RET_STEPDIRECTION_FAILED_TQ, /**< Abnormal termination due to TQ factorisation. */
|
|
RET_STEPDIRECTION_FAILED_CHOLESKY, /**< Abnormal termination due to Cholesky factorisation. */
|
|
RET_CYCLING_DETECTED, /**< Cycling detected. (70) */
|
|
RET_CYCLING_NOT_RESOLVED, /**< Cycling cannot be resolved, QP probably infeasible. */
|
|
RET_CYCLING_RESOLVED, /**< Cycling probably resolved. */
|
|
RET_STEPSIZE, /**< For displaying performed stepsize. */
|
|
RET_STEPSIZE_NONPOSITIVE, /**< For displaying non-positive stepsize. */
|
|
RET_SETUPSUBJECTTOTYPE_FAILED, /**< Setup of SubjectToTypes failed. */
|
|
RET_ADDCONSTRAINT_FAILED, /**< Addition of constraint to working set failed. */
|
|
RET_ADDCONSTRAINT_FAILED_INFEASIBILITY, /**< Addition of constraint to working set failed (due to QP infeasibility). */
|
|
RET_ADDBOUND_FAILED, /**< Addition of bound to working set failed. */
|
|
RET_ADDBOUND_FAILED_INFEASIBILITY, /**< Addition of bound to working set failed (due to QP infeasibility). */
|
|
RET_REMOVECONSTRAINT_FAILED, /**< Removal of constraint from working set failed. (80) */
|
|
RET_REMOVEBOUND_FAILED, /**< Removal of bound from working set failed. */
|
|
RET_REMOVE_FROM_ACTIVESET, /**< Removing from active set... */
|
|
RET_ADD_TO_ACTIVESET, /**< Adding to active set... */
|
|
RET_REMOVE_FROM_ACTIVESET_FAILED, /**< Removing from active set failed. */
|
|
RET_ADD_TO_ACTIVESET_FAILED, /**< Adding to active set failed. */
|
|
RET_CONSTRAINT_ALREADY_ACTIVE, /**< Constraint is already active. */
|
|
RET_ALL_CONSTRAINTS_ACTIVE, /**< All constraints are active, no further constraint can be added. */
|
|
RET_LINEARLY_DEPENDENT, /**< New bound/constraint is linearly dependent. */
|
|
RET_LINEARLY_INDEPENDENT, /**< New bound/constraint is linearly independent. */
|
|
RET_LI_RESOLVED, /**< Linear independence of active constraint matrix successfully resolved. (90) */
|
|
RET_ENSURELI_FAILED, /**< Failed to ensure linear independence of active constraint matrix. */
|
|
RET_ENSURELI_FAILED_TQ, /**< Abnormal termination due to TQ factorisation. */
|
|
RET_ENSURELI_FAILED_NOINDEX, /**< QP is infeasible. */
|
|
RET_ENSURELI_FAILED_CYCLING, /**< QP is infeasible. */
|
|
RET_BOUND_ALREADY_ACTIVE, /**< Bound is already active. */
|
|
RET_ALL_BOUNDS_ACTIVE, /**< All bounds are active, no further bound can be added. */
|
|
RET_CONSTRAINT_NOT_ACTIVE, /**< Constraint is not active. */
|
|
RET_BOUND_NOT_ACTIVE, /**< Bound is not active. */
|
|
RET_HESSIAN_NOT_SPD, /**< Projected Hessian matrix not positive definite. */
|
|
RET_HESSIAN_INDEFINITE, /**< Hessian matrix is indefinite. (100) */
|
|
RET_MATRIX_SHIFT_FAILED, /**< Unable to update matrices or to transform vectors. */
|
|
RET_MATRIX_FACTORISATION_FAILED, /**< Unable to calculate new matrix factorisations. */
|
|
RET_PRINT_ITERATION_FAILED, /**< Unable to print information on current iteration. */
|
|
RET_NO_GLOBAL_MESSAGE_OUTPUTFILE, /**< No global message output file initialised. */
|
|
RET_DISABLECONSTRAINTS_FAILED, /**< Unable to disbable constraints. */
|
|
RET_ENABLECONSTRAINTS_FAILED, /**< Unable to enbable constraints. */
|
|
RET_ALREADY_ENABLED, /**< Bound or constraint is already enabled. */
|
|
RET_ALREADY_DISABLED, /**< Bound or constraint is already disabled. */
|
|
RET_NO_HESSIAN_SPECIFIED, /**< No Hessian matrix has been specified. */
|
|
RET_USING_REGULARISATION, /**< Using regularisation as Hessian matrix is not positive definite. (110) */
|
|
RET_EPS_MUST_BE_POSITVE, /**< Eps for regularisation must be sufficiently positive. */
|
|
RET_REGSTEPS_MUST_BE_POSITVE, /**< Maximum number of regularisation steps must be non-negative. */
|
|
RET_HESSIAN_ALREADY_REGULARISED, /**< Hessian has been already regularised. */
|
|
RET_CANNOT_REGULARISE_IDENTITY, /**< Identity Hessian matrix cannot be regularised. */
|
|
RET_CANNOT_REGULARISE_SPARSE, /**< Sparse matrix cannot be regularised as diagonal entry is missing. */
|
|
RET_NO_REGSTEP_NWSR, /**< No additional regularisation step could be performed due to limits. */
|
|
RET_FEWER_REGSTEPS_NWSR, /**< Fewer additional regularisation steps have been performed due to limits. */
|
|
RET_CHOLESKY_OF_ZERO_HESSIAN, /**< Cholesky decomposition of (unregularised) zero Hessian matrix. */
|
|
RET_ZERO_HESSIAN_ASSUMED, /**< Zero Hessian matrix assumed as null pointer passed without specifying hessianType. */
|
|
RET_CONSTRAINTS_ARE_NOT_SCALED, /**< (no longer in use) (120) */
|
|
RET_INITIAL_BOUNDS_STATUS_NYI, /**< (no longer in use) */
|
|
RET_ERROR_IN_CONSTRAINTPRODUCT, /**< Error in user-defined constraint product function. */
|
|
RET_FIX_BOUNDS_FOR_LP, /**< All initial bounds must be fixed when solving an (unregularised) LP. */
|
|
RET_USE_REGULARISATION_FOR_LP, /**< Set options.enableRegularisation=BT_TRUE for solving LPs. */
|
|
/* SQProblem */
|
|
RET_UPDATEMATRICES_FAILED, /**< Unable to update QP matrices. */
|
|
RET_UPDATEMATRICES_FAILED_AS_QP_NOT_SOLVED, /**< Unable to update matrices as previous QP is not solved. */
|
|
/* Utils */
|
|
RET_UNABLE_TO_OPEN_FILE, /**< Unable to open file. */
|
|
RET_UNABLE_TO_WRITE_FILE, /**< Unable to write into file. */
|
|
RET_UNABLE_TO_READ_FILE, /**< Unable to read from file. */
|
|
RET_FILEDATA_INCONSISTENT, /**< File contains inconsistent data. (130) */
|
|
/* Options */
|
|
RET_OPTIONS_ADJUSTED, /**< Options needed to be adjusted for consistency reasons. */
|
|
/* SolutionAnalysis */
|
|
RET_UNABLE_TO_ANALYSE_QPROBLEM, /**< Unable to analyse (S)QProblem(B) object. */
|
|
/* Benchmark */
|
|
RET_NWSR_SET_TO_ONE, /**< Maximum number of working set changes was set to 1. */
|
|
RET_UNABLE_TO_READ_BENCHMARK, /**< Unable to read benchmark data. */
|
|
RET_BENCHMARK_ABORTED, /**< Benchmark aborted. */
|
|
RET_INITIAL_QP_SOLVED, /**< Initial QP solved. */
|
|
RET_QP_SOLUTION_STARTED, /**< Solving QP... */
|
|
RET_BENCHMARK_SUCCESSFUL, /**< Benchmark terminated successfully. */
|
|
/* Sparse matrices */
|
|
RET_NO_DIAGONAL_AVAILABLE, /**< Sparse matrix does not have entries on full diagonal. */
|
|
RET_DIAGONAL_NOT_INITIALISED, /**< Diagonal data of sparse matrix has not been initialised. (140) */
|
|
/* Dropping of infeasible constraints */
|
|
RET_ENSURELI_DROPPED, /**< Linear independence resolved by dropping blocking constraint. */
|
|
/* Simple exitflags */
|
|
RET_SIMPLE_STATUS_P1, /**< QP problem could not be solved within given number of iterations. */
|
|
RET_SIMPLE_STATUS_P0, /**< QP problem solved. */
|
|
RET_SIMPLE_STATUS_M1, /**< QP problem could not be solved due to an internal error. */
|
|
RET_SIMPLE_STATUS_M2, /**< QP problem is infeasible (and thus could not be solved). */
|
|
RET_SIMPLE_STATUS_M3 /**< QP problem is unbounded (and thus could not be solved). (146) */
|
|
} returnValue;
|
|
|
|
|
|
/**
|
|
* \brief Data structure for entries in global message list.
|
|
*
|
|
* Data structure for entries in global message list.
|
|
*
|
|
* \author Hans Joachim Ferreau
|
|
* \version 3.1embedded
|
|
* \date 2007-2015
|
|
*/
|
|
typedef struct
|
|
{
|
|
returnValue key; /**< Global return value. */
|
|
const char* data; /**< Corresponding message. */
|
|
VisibilityStatus globalVisibilityStatus; /**< Determines if message can be printed.
|
|
* If this value is set to VS_HIDDEN, no message is printed! */
|
|
} ReturnValueList;
|
|
|
|
|
|
|
|
/**
|
|
* \brief Handles all kind of error messages, warnings and other information.
|
|
*
|
|
* This class handles all kinds of messages (errors, warnings, infos) initiated
|
|
* by qpOASES modules and stores the corresponding global preferences.
|
|
*
|
|
* \author Hans Joachim Ferreau (thanks to Leonard Wirsching)
|
|
* \version 3.1embedded
|
|
* \date 2007-2015
|
|
*/
|
|
typedef struct
|
|
{
|
|
VisibilityStatus errorVisibility; /**< Error messages visible? */
|
|
VisibilityStatus warningVisibility; /**< Warning messages visible? */
|
|
VisibilityStatus infoVisibility; /**< Info messages visible? */
|
|
|
|
FILE* outputFile; /**< Output file for messages. */
|
|
|
|
int errorCount; /**< Counts number of errors (for nicer output only). */
|
|
} MessageHandling;
|
|
|
|
|
|
|
|
/** Constructor which takes the desired output file and desired visibility states. */
|
|
void MessageHandlingCON( MessageHandling* _THIS,
|
|
FILE* _outputFile, /**< Output file. */
|
|
VisibilityStatus _errorVisibility, /**< Visibility status for error messages. */
|
|
VisibilityStatus _warningVisibility,/**< Visibility status for warning messages. */
|
|
VisibilityStatus _infoVisibility /**< Visibility status for info messages. */
|
|
);
|
|
|
|
void MessageHandlingCPY( MessageHandling* FROM,
|
|
MessageHandling* TO
|
|
);
|
|
|
|
|
|
/** Prints an error message(a simplified macro THROWERROR is also provided). \n
|
|
* Errors are definied as abnormal events which cause an immediate termination of the current (sub) function.
|
|
* Errors of a sub function should be commented by the calling function by means of a warning message
|
|
* (if this error does not cause an error of the calling function, either)!
|
|
* \return Error number returned by sub function call
|
|
*/
|
|
returnValue MessageHandling_throwError( MessageHandling* _THIS,
|
|
returnValue Enumber, /**< Error number returned by sub function call. */
|
|
const char* additionaltext, /**< Additional error text (0, if none). */
|
|
const char* functionname, /**< Name of function which caused the error. */
|
|
const char* filename, /**< Name of file which caused the error. */
|
|
const unsigned long linenumber, /**< Number of line which caused the error.incompatible binary file */
|
|
VisibilityStatus localVisibilityStatus /**< Determines (locally) if error message can be printed to stderr.
|
|
* If GLOBAL visibility status of the message is set to VS_HIDDEN,
|
|
* no message is printed, anyway! */
|
|
);
|
|
|
|
/** Prints a warning message (a simplified macro THROWWARNING is also provided).
|
|
* Warnings are definied as abnormal events which does NOT cause an immediate termination of the current (sub) function.
|
|
* \return Warning number returned by sub function call
|
|
*/
|
|
returnValue MessageHandling_throwWarning( MessageHandling* _THIS,
|
|
returnValue Wnumber, /**< Warning number returned by sub function call. */
|
|
const char* additionaltext, /**< Additional warning text (0, if none). */
|
|
const char* functionname, /**< Name of function which caused the warning. */
|
|
const char* filename, /**< Name of file which caused the warning. */
|
|
const unsigned long linenumber, /**< Number of line which caused the warning. */
|
|
VisibilityStatus localVisibilityStatus /**< Determines (locally) if warning message can be printed to stderr.
|
|
* If GLOBAL visibility status of the message is set to VS_HIDDEN,
|
|
* no message is printed, anyway! */
|
|
);
|
|
|
|
/** Prints a info message (a simplified macro THROWINFO is also provided).
|
|
* \return Info number returned by sub function call
|
|
*/
|
|
returnValue MessageHandling_throwInfo( MessageHandling* _THIS,
|
|
returnValue Inumber, /**< Info number returned by sub function call. */
|
|
const char* additionaltext, /**< Additional warning text (0, if none). */
|
|
const char* functionname, /**< Name of function which submitted the info. */
|
|
const char* filename, /**< Name of file which submitted the info. */
|
|
const unsigned long linenumber, /**< Number of line which submitted the info. */
|
|
VisibilityStatus localVisibilityStatus /**< Determines (locally) if info message can be printed to stderr.
|
|
* If GLOBAL visibility status of the message is set to VS_HIDDEN,
|
|
* no message is printed, anyway! */
|
|
);
|
|
|
|
|
|
/** Resets all preferences to default values.
|
|
* \return SUCCESSFUL_RETURN */
|
|
returnValue MessageHandling_reset( MessageHandling* _THIS );
|
|
|
|
|
|
/** Prints a complete list of all messages to output file.
|
|
* \return SUCCESSFUL_RETURN */
|
|
returnValue MessageHandling_listAllMessages( MessageHandling* _THIS );
|
|
|
|
|
|
/** Returns visibility status for error messages.
|
|
* \return Visibility status for error messages. */
|
|
static inline VisibilityStatus MessageHandling_getErrorVisibilityStatus( MessageHandling* _THIS );
|
|
|
|
/** Returns visibility status for warning messages.
|
|
* \return Visibility status for warning messages. */
|
|
static inline VisibilityStatus MessageHandling_getWarningVisibilityStatus( MessageHandling* _THIS );
|
|
|
|
/** Returns visibility status for info messages.
|
|
* \return Visibility status for info messages. */
|
|
static inline VisibilityStatus MessageHandling_getInfoVisibilityStatus( MessageHandling* _THIS );
|
|
|
|
/** Returns pointer to output file.
|
|
* \return Pointer to output file. */
|
|
static inline FILE* MessageHandling_getOutputFile( MessageHandling* _THIS );
|
|
|
|
/** Returns error count value.
|
|
* \return Error count value. */
|
|
static inline int MessageHandling_getErrorCount( MessageHandling* _THIS );
|
|
|
|
|
|
/** Changes visibility status for error messages. */
|
|
static inline void MessageHandling_setErrorVisibilityStatus( MessageHandling* _THIS,
|
|
VisibilityStatus _errorVisibility /**< New visibility status for error messages. */
|
|
);
|
|
|
|
/** Changes visibility status for warning messages. */
|
|
static inline void MessageHandling_setWarningVisibilityStatus( MessageHandling* _THIS,
|
|
VisibilityStatus _warningVisibility /**< New visibility status for warning messages. */
|
|
);
|
|
|
|
/** Changes visibility status for info messages. */
|
|
static inline void MessageHandling_setInfoVisibilityStatus( MessageHandling* _THIS,
|
|
VisibilityStatus _infoVisibility /**< New visibility status for info messages. */
|
|
);
|
|
|
|
/** Changes output file for messages. */
|
|
static inline void MessageHandling_setOutputFile( MessageHandling* _THIS,
|
|
FILE* _outputFile /**< New output file for messages. */
|
|
);
|
|
|
|
/** Changes error count.
|
|
* \return SUCCESSFUL_RETURN \n
|
|
* RET_INVALID_ARGUMENT */
|
|
static inline returnValue MessageHandling_setErrorCount( MessageHandling* _THIS,
|
|
int _errorCount /**< New error count value. */
|
|
);
|
|
|
|
/** Provides message text corresponding to given \a returnValue.
|
|
* \return String containing message text. */
|
|
const char* MessageHandling_getErrorCodeMessage( MessageHandling* _THIS,
|
|
const returnValue _returnValue
|
|
);
|
|
|
|
|
|
returnValue MessageHandling_throwMessage( MessageHandling* _THIS,
|
|
returnValue RETnumber, /**< Error/warning/info number returned by sub function call. */
|
|
const char* additionaltext, /**< Additional warning text (0, if none). */
|
|
const char* functionname, /**< Name of function which caused the error/warning/info. */
|
|
const char* filename, /**< Name of file which caused the error/warning/info. */
|
|
const unsigned long linenumber, /**< Number of line which caused the error/warning/info. */
|
|
VisibilityStatus localVisibilityStatus, /**< Determines (locally) if info message can be printed to stderr.
|
|
* If GLOBAL visibility status of the message is set to VS_HIDDEN,
|
|
* no message is printed, anyway! */
|
|
const char* RETstring /**< Leading string of error/warning/info message. */
|
|
);
|
|
|
|
|
|
#ifndef __FILE__
|
|
/** Ensures that __FILE__ macro is defined. */
|
|
#define __FILE__ 0
|
|
#endif
|
|
|
|
#ifndef __LINE__
|
|
/** Ensures that __LINE__ macro is defined. */
|
|
#define __LINE__ 0
|
|
#endif
|
|
|
|
/** Define __FUNC__ macro providing current function for debugging. */
|
|
/*#define __FUNC__ 0*/
|
|
#define __FUNC__ ("(no function name provided)")
|
|
/*#define __FUNC__ __func__*/
|
|
/*#define __FUNC__ __FUNCTION__*/
|
|
|
|
|
|
/** Short version of throwError with default values, only returnValue is needed */
|
|
#define THROWERROR(retval) ( MessageHandling_throwError( qpOASES_getGlobalMessageHandler(),(retval),0,__FUNC__,__FILE__,__LINE__,VS_VISIBLE) )
|
|
|
|
/** Short version of throwWarning with default values, only returnValue is needed */
|
|
#define THROWWARNING(retval) ( MessageHandling_throwWarning( qpOASES_getGlobalMessageHandler(),(retval),0,__FUNC__,__FILE__,__LINE__,VS_VISIBLE) )
|
|
|
|
/** Short version of throwInfo with default values, only returnValue is needed */
|
|
#define THROWINFO(retval) ( MessageHandling_throwInfo( qpOASES_getGlobalMessageHandler(),(retval),0,__FUNC__,__FILE__,__LINE__,VS_VISIBLE) )
|
|
|
|
|
|
/** Returns a pointer to global message handler.
|
|
* \return Pointer to global message handler.
|
|
*/
|
|
MessageHandling* qpOASES_getGlobalMessageHandler( );
|
|
|
|
|
|
/*
|
|
* g e t E r r o r V i s i b i l i t y S t a t u s
|
|
*/
|
|
static inline VisibilityStatus MessageHandling_getErrorVisibilityStatus( MessageHandling* _THIS )
|
|
{
|
|
return _THIS->errorVisibility;
|
|
}
|
|
|
|
|
|
/*
|
|
* g e t W a r n i n g V i s i b i l i t y S t a t u s
|
|
*/
|
|
static inline VisibilityStatus MessageHandling_getWarningVisibilityStatus( MessageHandling* _THIS )
|
|
{
|
|
return _THIS->warningVisibility;
|
|
}
|
|
|
|
|
|
/*
|
|
* g e t I n f o V i s i b i l i t y S t a t u s
|
|
*/
|
|
static inline VisibilityStatus MessageHandling_getInfoVisibilityStatus( MessageHandling* _THIS )
|
|
{
|
|
return _THIS->infoVisibility;
|
|
}
|
|
|
|
|
|
/*
|
|
* g e t O u t p u t F i l e
|
|
*/
|
|
static inline FILE* MessageHandling_getOutputFile( MessageHandling* _THIS )
|
|
{
|
|
return _THIS->outputFile;
|
|
}
|
|
|
|
|
|
/*
|
|
* g e t E r r o r C o u n t
|
|
*/
|
|
static inline int MessageHandling_getErrorCount( MessageHandling* _THIS )
|
|
{
|
|
return _THIS->errorCount;
|
|
}
|
|
|
|
|
|
/*
|
|
* s e t E r r o r V i s i b i l i t y S t a t u s
|
|
*/
|
|
static inline void MessageHandling_setErrorVisibilityStatus( MessageHandling* _THIS, VisibilityStatus _errorVisibility )
|
|
{
|
|
_THIS->errorVisibility = _errorVisibility;
|
|
}
|
|
|
|
|
|
/*
|
|
* s e t W a r n i n g V i s i b i l i t y S t a t u s
|
|
*/
|
|
static inline void MessageHandling_setWarningVisibilityStatus( MessageHandling* _THIS, VisibilityStatus _warningVisibility )
|
|
{
|
|
_THIS->warningVisibility = _warningVisibility;
|
|
}
|
|
|
|
|
|
/*
|
|
* s e t I n f o V i s i b i l i t y S t a t u s
|
|
*/
|
|
static inline void MessageHandling_setInfoVisibilityStatus( MessageHandling* _THIS, VisibilityStatus _infoVisibility )
|
|
{
|
|
_THIS->infoVisibility = _infoVisibility;
|
|
}
|
|
|
|
|
|
/*
|
|
* s e t O u t p u t F i l e
|
|
*/
|
|
static inline void MessageHandling_setOutputFile( MessageHandling* _THIS, FILE* _outputFile )
|
|
{
|
|
_THIS->outputFile = _outputFile;
|
|
}
|
|
|
|
|
|
/*
|
|
* s e t E r r o r C o u n t
|
|
*/
|
|
static inline returnValue MessageHandling_setErrorCount( MessageHandling* _THIS, int _errorCount )
|
|
{
|
|
if ( _errorCount >= 0 )
|
|
{
|
|
_THIS->errorCount = _errorCount;
|
|
return SUCCESSFUL_RETURN;
|
|
}
|
|
else
|
|
return RET_INVALID_ARGUMENTS;
|
|
}
|
|
|
|
|
|
END_NAMESPACE_QPOASES
|
|
|
|
|
|
#endif /* QPOASES_MESSAGEHANDLING_H */
|
|
|
|
|
|
/*
|
|
* end of file
|
|
*/
|
|
|