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.
		
		
		
		
			
				
					536 lines
				
				15 KiB
			
		
		
			
		
	
	
					536 lines
				
				15 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	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/Constraints.h
							 | 
						||
| 
								 | 
							
								 *	\author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches
							 | 
						||
| 
								 | 
							
								 *	\version 3.1embedded
							 | 
						||
| 
								 | 
							
								 *	\date 2007-2015
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *	Declaration of the Constraints class designed to manage working sets of
							 | 
						||
| 
								 | 
							
								 *	constraints within a QProblem.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef QPOASES_CONSTRAINTS_H
							 | 
						||
| 
								 | 
							
								#define QPOASES_CONSTRAINTS_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <qpOASES_e/Indexlist.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								BEGIN_NAMESPACE_QPOASES
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 *	\brief Manages working sets of constraints.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *	This class manages working sets of constraints by storing
							 | 
						||
| 
								 | 
							
								 *	index sets and other status information.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *	\author Hans Joachim Ferreau
							 | 
						||
| 
								 | 
							
								 *	\version 3.1embedded
							 | 
						||
| 
								 | 
							
								 *	\date 2007-2015
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								typedef struct
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									Indexlist *active;					/**< Index list of active constraints. */
							 | 
						||
| 
								 | 
							
									Indexlist *inactive;				/**< Index list of inactive constraints. */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									Indexlist *shiftedActive;			/**< Memory for shifting active constraints. */
							 | 
						||
| 
								 | 
							
									Indexlist *shiftedInactive;			/**< Memory for shifting inactive constraints. */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									Indexlist *rotatedActive;			/**< Memory for rotating active constraints. */
							 | 
						||
| 
								 | 
							
									Indexlist *rotatedInactive;			/**< Memory for rotating inactive constraints. */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									SubjectToType   *type; 				/**< Type of constraints. */
							 | 
						||
| 
								 | 
							
									SubjectToStatus *status;			/**< Status of constraints. */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									SubjectToType   *typeTmp;			/**< Temp memory for type of constraints. */
							 | 
						||
| 
								 | 
							
									SubjectToStatus *statusTmp;			/**< Temp memory for status of constraints. */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									BooleanType noLower;			 	/**< This flag indicates if there is no lower bound on any variable. */
							 | 
						||
| 
								 | 
							
									BooleanType noUpper;	 			/**< This flag indicates if there is no upper bound on any variable. */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									int n;								/**< Total number of constraints. */
							 | 
						||
| 
								 | 
							
								} Constraints;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int Constraints_calculateMemorySize( int n);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								char *Constraints_assignMemory(int n, Constraints **mem, void *raw_memory);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Constraints *Constraints_createMemory( int n );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Constructor which takes the number of constraints. */
							 | 
						||
| 
								 | 
							
								void ConstraintsCON(	Constraints* _THIS,
							 | 
						||
| 
								 | 
							
														int _n							/**< Number of constraints. */
							 | 
						||
| 
								 | 
							
														);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Copies all members from given rhs object.
							 | 
						||
| 
								 | 
							
								 *  \return SUCCESSFUL_RETURN */
							 | 
						||
| 
								 | 
							
								void ConstraintsCPY(	Constraints* FROM,
							 | 
						||
| 
								 | 
							
														Constraints* TO
							 | 
						||
| 
								 | 
							
														);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Initialises object with given number of constraints.
							 | 
						||
| 
								 | 
							
								 *	\return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 			RET_INVALID_ARGUMENTS */
							 | 
						||
| 
								 | 
							
								returnValue Constraints_init(	Constraints* _THIS,
							 | 
						||
| 
								 | 
							
																int _n					/**< Number of constraints. */
							 | 
						||
| 
								 | 
							
																);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Initially adds number of a new (i.e. not yet in the list) constraint to
							 | 
						||
| 
								 | 
							
								 *  a given index set.
							 | 
						||
| 
								 | 
							
								 *	\return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 			RET_SETUP_CONSTRAINT_FAILED \n
							 | 
						||
| 
								 | 
							
											RET_INDEX_OUT_OF_BOUNDS \n
							 | 
						||
| 
								 | 
							
											RET_INVALID_ARGUMENTS */
							 | 
						||
| 
								 | 
							
								returnValue Constraints_setupConstraint(	Constraints* _THIS,
							 | 
						||
| 
								 | 
							
																			int number,				/**< Number of new constraint. */
							 | 
						||
| 
								 | 
							
																			SubjectToStatus _status	/**< Status of new constraint. */
							 | 
						||
| 
								 | 
							
																			);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Initially adds all enabled numbers of new (i.e. not yet in the list) constraints to
							 | 
						||
| 
								 | 
							
								 *  to the index set of inactive constraints; the order depends on the SujectToType
							 | 
						||
| 
								 | 
							
								 *  of each index. Only disabled constraints are added to index set of disabled constraints!
							 | 
						||
| 
								 | 
							
								 *	\return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 			RET_SETUP_CONSTRAINT_FAILED */
							 | 
						||
| 
								 | 
							
								returnValue Constraints_setupAllInactive(	Constraints* _THIS
							 | 
						||
| 
								 | 
							
																			);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Initially adds all enabled numbers of new (i.e. not yet in the list) constraints to
							 | 
						||
| 
								 | 
							
								 *  to the index set of active constraints (on their lower bounds); the order depends on the SujectToType
							 | 
						||
| 
								 | 
							
								 *  of each index. Only disabled constraints are added to index set of disabled constraints!
							 | 
						||
| 
								 | 
							
								 *	\return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 			RET_SETUP_CONSTRAINT_FAILED */
							 | 
						||
| 
								 | 
							
								returnValue Constraints_setupAllLower(	Constraints* _THIS
							 | 
						||
| 
								 | 
							
																		);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Initially adds all enabled numbers of new (i.e. not yet in the list) constraints to
							 | 
						||
| 
								 | 
							
								 *  to the index set of active constraints (on their upper bounds); the order depends on the SujectToType
							 | 
						||
| 
								 | 
							
								 *  of each index. Only disabled constraints are added to index set of disabled constraints!
							 | 
						||
| 
								 | 
							
								 *	\return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 			RET_SETUP_CONSTRAINT_FAILED */
							 | 
						||
| 
								 | 
							
								returnValue Constraints_setupAllUpper(	Constraints* _THIS
							 | 
						||
| 
								 | 
							
																		);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Moves index of a constraint from index list of active to that of inactive constraints.
							 | 
						||
| 
								 | 
							
								 *	\return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 			RET_MOVING_CONSTRAINT_FAILED */
							 | 
						||
| 
								 | 
							
								returnValue Constraints_moveActiveToInactive(	Constraints* _THIS,
							 | 
						||
| 
								 | 
							
																				int number				/**< Number of constraint to become inactive. */
							 | 
						||
| 
								 | 
							
																				);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Moves index of a constraint from index list of inactive to that of active constraints.
							 | 
						||
| 
								 | 
							
								 *	\return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 			RET_MOVING_CONSTRAINT_FAILED */
							 | 
						||
| 
								 | 
							
								returnValue Constraints_moveInactiveToActive(	Constraints* _THIS,
							 | 
						||
| 
								 | 
							
																				int number,				/**< Number of constraint to become active. */
							 | 
						||
| 
								 | 
							
																				SubjectToStatus _status	/**< Status of constraint to become active. */
							 | 
						||
| 
								 | 
							
																				);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Flip fixed constraint.
							 | 
						||
| 
								 | 
							
								 *	\return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 			RET_MOVING_CONSTRAINT_FAILED \n
							 | 
						||
| 
								 | 
							
											RET_INDEX_OUT_OF_BOUNDS */
							 | 
						||
| 
								 | 
							
								returnValue Constraints_flipFixed(	Constraints* _THIS,
							 | 
						||
| 
								 | 
							
																	int number
							 | 
						||
| 
								 | 
							
																	);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Returns the number of constraints.
							 | 
						||
| 
								 | 
							
								 *	\return Number of constraints. */
							 | 
						||
| 
								 | 
							
								static inline int Constraints_getNC(	Constraints* _THIS
							 | 
						||
| 
								 | 
							
																		);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Returns the number of implicit equality constraints.
							 | 
						||
| 
								 | 
							
								 *	\return Number of implicit equality constraints. */
							 | 
						||
| 
								 | 
							
								static inline int Constraints_getNEC(	Constraints* _THIS
							 | 
						||
| 
								 | 
							
																		);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Returns the number of "real" inequality constraints.
							 | 
						||
| 
								 | 
							
								 *	\return Number of "real" inequality constraints. */
							 | 
						||
| 
								 | 
							
								static inline int Constraints_getNIC(	Constraints* _THIS
							 | 
						||
| 
								 | 
							
																		);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Returns the number of unbounded constraints (i.e. without any bounds).
							 | 
						||
| 
								 | 
							
								 *	\return Number of unbounded constraints (i.e. without any bounds). */
							 | 
						||
| 
								 | 
							
								static inline int Constraints_getNUC(	Constraints* _THIS
							 | 
						||
| 
								 | 
							
																		);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Returns the number of active constraints.
							 | 
						||
| 
								 | 
							
								 *	\return Number of active constraints. */
							 | 
						||
| 
								 | 
							
								static inline int Constraints_getNAC(	Constraints* _THIS
							 | 
						||
| 
								 | 
							
																		);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Returns the number of inactive constraints.
							 | 
						||
| 
								 | 
							
								 *	\return Number of inactive constraints. */
							 | 
						||
| 
								 | 
							
								static inline int Constraints_getNIAC(	Constraints* _THIS
							 | 
						||
| 
								 | 
							
																		);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Returns a pointer to active constraints index list.
							 | 
						||
| 
								 | 
							
								 *	\return Pointer to active constraints index list. */
							 | 
						||
| 
								 | 
							
								static inline Indexlist* Constraints_getActive(	Constraints* _THIS
							 | 
						||
| 
								 | 
							
																				);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Returns a pointer to inactive constraints index list.
							 | 
						||
| 
								 | 
							
								 *	\return Pointer to inactive constraints index list. */
							 | 
						||
| 
								 | 
							
								static inline Indexlist* Constraints_getInactive(	Constraints* _THIS
							 | 
						||
| 
								 | 
							
																					);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Returns number of constraints with given SubjectTo type.
							 | 
						||
| 
								 | 
							
								 *	\return Number of constraints with given type. */
							 | 
						||
| 
								 | 
							
								static inline int Constraints_getNumberOfType(	Constraints* _THIS,
							 | 
						||
| 
								 | 
							
																				SubjectToType _type	/**< Type of constraints' bound. */
							 | 
						||
| 
								 | 
							
																				);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Returns type of constraints' bound.
							 | 
						||
| 
								 | 
							
								 *	\return Type of constraints' bound \n
							 | 
						||
| 
								 | 
							
								 			RET_INDEX_OUT_OF_BOUNDS */
							 | 
						||
| 
								 | 
							
								static inline SubjectToType Constraints_getType(	Constraints* _THIS,
							 | 
						||
| 
								 | 
							
																					int i			/**< Number of constraints' bound. */
							 | 
						||
| 
								 | 
							
																					);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Returns status of constraints' bound.
							 | 
						||
| 
								 | 
							
								 *	\return Status of constraints' bound \n
							 | 
						||
| 
								 | 
							
								 			ST_UNDEFINED */
							 | 
						||
| 
								 | 
							
								static inline SubjectToStatus Constraints_getStatus(	Constraints* _THIS,
							 | 
						||
| 
								 | 
							
																						int i		/**< Number of constraints' bound. */
							 | 
						||
| 
								 | 
							
																						);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Sets type of constraints' bound.
							 | 
						||
| 
								 | 
							
								 *	\return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 			RET_INDEX_OUT_OF_BOUNDS */
							 | 
						||
| 
								 | 
							
								static inline returnValue Constraints_setType(	Constraints* _THIS,
							 | 
						||
| 
								 | 
							
																				int i,				/**< Number of constraints' bound. */
							 | 
						||
| 
								 | 
							
																				SubjectToType value	/**< Type of constraints' bound. */
							 | 
						||
| 
								 | 
							
																				);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Sets status of constraints' bound.
							 | 
						||
| 
								 | 
							
								 *	\return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 			RET_INDEX_OUT_OF_BOUNDS */
							 | 
						||
| 
								 | 
							
								static inline returnValue Constraints_setStatus(	Constraints* _THIS,
							 | 
						||
| 
								 | 
							
																					int i,					/**< Number of constraints' bound. */
							 | 
						||
| 
								 | 
							
																					SubjectToStatus value	/**< Status of constraints' bound. */
							 | 
						||
| 
								 | 
							
																					);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Sets status of lower constraints' bounds. */
							 | 
						||
| 
								 | 
							
								static inline void Constraints_setNoLower(	Constraints* _THIS,
							 | 
						||
| 
								 | 
							
																			BooleanType _status		/**< Status of lower constraints' bounds. */
							 | 
						||
| 
								 | 
							
																			);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Sets status of upper constraints' bounds. */
							 | 
						||
| 
								 | 
							
								static inline void Constraints_setNoUpper(	Constraints* _THIS,
							 | 
						||
| 
								 | 
							
																			BooleanType _status		/**< Status of upper constraints' bounds. */
							 | 
						||
| 
								 | 
							
																			);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Returns status of lower constraints' bounds.
							 | 
						||
| 
								 | 
							
								 *	\return BT_TRUE if there is no lower constraints' bound on any variable. */
							 | 
						||
| 
								 | 
							
								static inline BooleanType Constraints_hasNoLower(	Constraints* _THIS
							 | 
						||
| 
								 | 
							
																					);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Returns status of upper bounds.
							 | 
						||
| 
								 | 
							
								 *	\return BT_TRUE if there is no upper constraints' bound on any variable. */
							 | 
						||
| 
								 | 
							
								static inline BooleanType Constraints_hasNoUpper(	Constraints* _THIS
							 | 
						||
| 
								 | 
							
																					);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Shifts forward type and status of all constraints by a given
							 | 
						||
| 
								 | 
							
								 *  offset. This offset has to lie within the range [0,n/2] and has to
							 | 
						||
| 
								 | 
							
								 *  be an integer divisor of the total number of constraints n.
							 | 
						||
| 
								 | 
							
								 *  Type and status of the first \<offset\> constraints  is thrown away,
							 | 
						||
| 
								 | 
							
								 *  type and status of the last \<offset\> constraints is doubled,
							 | 
						||
| 
								 | 
							
								 *  e.g. for offset = 2: \n
							 | 
						||
| 
								 | 
							
								 *  shift( {c/b1,c/b2,c/b3,c/b4,c/b5,c/b6} ) = {c/b3,c/b4,c/b5,c/b6,c/b5,c/b6}
							 | 
						||
| 
								 | 
							
								 *	\return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 			RET_INDEX_OUT_OF_BOUNDS \n
							 | 
						||
| 
								 | 
							
								 			RET_INVALID_ARGUMENTS \n
							 | 
						||
| 
								 | 
							
								 			RET_SHIFTING_FAILED */
							 | 
						||
| 
								 | 
							
								returnValue Constraints_shift(	Constraints* _THIS,
							 | 
						||
| 
								 | 
							
																int offset		/**< Shift offset within the range [0,n/2] and integer divisor of n. */
							 | 
						||
| 
								 | 
							
																);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Rotates forward type and status of all constraints by a given
							 | 
						||
| 
								 | 
							
								 *  offset. This offset has to lie within the range [0,n].
							 | 
						||
| 
								 | 
							
								 *  Example for offset = 2: \n
							 | 
						||
| 
								 | 
							
								 *  rotate( {c1,c2,c3,c4,c5,c6} ) = {c3,c4,c5,c6,c1,c2}
							 | 
						||
| 
								 | 
							
								 *	\return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 			RET_INDEX_OUT_OF_BOUNDS \n
							 | 
						||
| 
								 | 
							
								 			RET_ROTATING_FAILED */
							 | 
						||
| 
								 | 
							
								returnValue Constraints_rotate(	Constraints* _THIS,
							 | 
						||
| 
								 | 
							
																int offset		/**< Rotation offset within the range [0,n]. */
							 | 
						||
| 
								 | 
							
																);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Prints information on constraints object
							 | 
						||
| 
								 | 
							
								 *  (in particular, lists of inactive and active constraints.
							 | 
						||
| 
								 | 
							
								 * \return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
										   RET_INDEXLIST_CORRUPTED */
							 | 
						||
| 
								 | 
							
								returnValue Constraints_print(	Constraints* _THIS
							 | 
						||
| 
								 | 
							
																);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Initially adds all numbers of new (i.e. not yet in the list) bounds to
							 | 
						||
| 
								 | 
							
								 *  to the index set corresponding to the desired status;
							 | 
						||
| 
								 | 
							
								 *  the order depends on the SujectToType of each index.
							 | 
						||
| 
								 | 
							
								 *	\return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 			RET_SETUP_CONSTRAINT_FAILED */
							 | 
						||
| 
								 | 
							
								returnValue Constraints_setupAll(	Constraints* _THIS,
							 | 
						||
| 
								 | 
							
																	SubjectToStatus _status	/**< Desired initial status for all bounds. */
							 | 
						||
| 
								 | 
							
																	);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Adds the index of a new constraint to index set.
							 | 
						||
| 
								 | 
							
								 *	\return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 			RET_ADDINDEX_FAILED \n
							 | 
						||
| 
								 | 
							
											RET_INVALID_ARGUMENTS */
							 | 
						||
| 
								 | 
							
								returnValue Constraints_addIndex(	Constraints* _THIS,
							 | 
						||
| 
								 | 
							
																	Indexlist* const indexlist,	/**< Index list to which the new index shall be added. */
							 | 
						||
| 
								 | 
							
																	int newnumber,				/**< Number of new constraint. */
							 | 
						||
| 
								 | 
							
																	SubjectToStatus newstatus	/**< Status of new constraint. */
							 | 
						||
| 
								 | 
							
																	);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Removes the index of a constraint from index set.
							 | 
						||
| 
								 | 
							
								 *	\return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 			RET_REMOVEINDEX_FAILED \n
							 | 
						||
| 
								 | 
							
											RET_INVALID_ARGUMENTS */
							 | 
						||
| 
								 | 
							
								returnValue Constraints_removeIndex(	Constraints* _THIS,
							 | 
						||
| 
								 | 
							
																		Indexlist* const indexlist,	/**< Index list from which the new index shall be removed. */
							 | 
						||
| 
								 | 
							
																		int removenumber			/**< Number of constraint to be removed. */
							 | 
						||
| 
								 | 
							
																		);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** Swaps the indices of two constraints or bounds within the index set.
							 | 
						||
| 
								 | 
							
								 *	\return SUCCESSFUL_RETURN \n
							 | 
						||
| 
								 | 
							
								 			RET_SWAPINDEX_FAILED \n
							 | 
						||
| 
								 | 
							
											RET_INVALID_ARGUMENTS */
							 | 
						||
| 
								 | 
							
								returnValue Constraints_swapIndex(	Constraints* _THIS,
							 | 
						||
| 
								 | 
							
																	Indexlist* const indexlist,	/**< Index list in which the indices shold be swapped. */
							 | 
						||
| 
								 | 
							
																	int number1,				/**< Number of first constraint. */
							 | 
						||
| 
								 | 
							
																	int number2					/**< Number of second constraint. */
							 | 
						||
| 
								 | 
							
																	);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	g e t N u m b e r O f T y p e
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline int Constraints_getNumberOfType( Constraints* _THIS, SubjectToType _type )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									int i;
							 | 
						||
| 
								 | 
							
									int numberOfType = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if ( _THIS->type != 0 )
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										for( i=0; i<_THIS->n; ++i )
							 | 
						||
| 
								 | 
							
											if ( _THIS->type[i] == _type )
							 | 
						||
| 
								 | 
							
												++numberOfType;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return numberOfType;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	g e t T y p e
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline SubjectToType Constraints_getType( Constraints* _THIS, int i )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									if ( ( i >= 0 ) && ( i < _THIS->n ) )
							 | 
						||
| 
								 | 
							
										return _THIS->type[i];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return ST_UNKNOWN;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	g e t S t a t u s
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline SubjectToStatus Constraints_getStatus( Constraints* _THIS, int i )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									if ( ( i >= 0 ) && ( i < _THIS->n ) )
							 | 
						||
| 
								 | 
							
										return _THIS->status[i];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return ST_UNDEFINED;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	s e t T y p e
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline returnValue Constraints_setType( Constraints* _THIS, int i, SubjectToType value )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									if ( ( i >= 0 ) && ( i < _THIS->n ) )
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										_THIS->type[i] = value;
							 | 
						||
| 
								 | 
							
										return SUCCESSFUL_RETURN;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									else
							 | 
						||
| 
								 | 
							
										return THROWERROR( RET_INDEX_OUT_OF_BOUNDS );
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	s e t S t a t u s
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline returnValue Constraints_setStatus( Constraints* _THIS, int i, SubjectToStatus value )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									if ( ( i >= 0 ) && ( i < _THIS->n ) )
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										_THIS->status[i] = value;
							 | 
						||
| 
								 | 
							
										return SUCCESSFUL_RETURN;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									else
							 | 
						||
| 
								 | 
							
										return THROWERROR( RET_INDEX_OUT_OF_BOUNDS );
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	s e t N o L o w e r
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline void Constraints_setNoLower( Constraints* _THIS, BooleanType _status )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									_THIS->noLower = _status;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	s e t N o U p p e r
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline void Constraints_setNoUpper( Constraints* _THIS, BooleanType _status )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									_THIS->noUpper = _status;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	h a s N o L o w e r
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline BooleanType Constraints_hasNoLower( Constraints* _THIS )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									return _THIS->noLower;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	h a s N o U p p p e r
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline BooleanType Constraints_hasNoUpper( Constraints* _THIS )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									return _THIS->noUpper;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	g e t N C
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline int Constraints_getNC( Constraints* _THIS )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								 	return _THIS->n;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	g e t N E C
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline int Constraints_getNEC( Constraints* _THIS )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									return Constraints_getNumberOfType( _THIS,ST_EQUALITY );
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	g e t N I C
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline int Constraints_getNIC( Constraints* _THIS )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								 	return Constraints_getNumberOfType( _THIS,ST_BOUNDED );
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	g e t N U C
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline int Constraints_getNUC( Constraints* _THIS )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								 	return Constraints_getNumberOfType( _THIS,ST_UNBOUNDED );
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	g e t N A C
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline int Constraints_getNAC( Constraints* _THIS )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								 	return Indexlist_getLength( _THIS->active );
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	g e t N I A C
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline int Constraints_getNIAC( Constraints* _THIS )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									return Indexlist_getLength( _THIS->inactive );
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	g e t A c t i v e
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline Indexlist* Constraints_getActive( Constraints* _THIS )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									return _THIS->active;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	g e t I n a c t i v e
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline Indexlist* Constraints_getInactive( Constraints* _THIS )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									return _THIS->inactive;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								END_NAMESPACE_QPOASES
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif	/* QPOASES_CONSTRAINTS_H */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *	end of file
							 | 
						||
| 
								 | 
							
								 */
							 |