/*
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 	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 / Matrices . h 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 	\ author  Hans  Joachim  Ferreau ,  Andreas  Potschka ,  Christian  Kirches 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 	\ version  3.1 embedded 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 	\ date  2009 - 2015 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *   Various  matrix  classes :  Abstract  base  matrix  class ,  dense  and  sparse  matrices , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *   including  symmetry  exploiting  specializations . 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# ifndef QPOASES_MATRICES_H 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define QPOASES_MATRICES_H 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# ifdef __USE_SINGLE_PRECISION__ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// single precision
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									# define GEMM sgemm_ 
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									# define GEMV sgemv_ 
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//	#define SYR ssyr_
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//	#define SYR2 ssyr2_
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									# define POTRF spotrf_ 
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# else 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// double precision
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									# define GEMM dgemm_ 
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									# define GEMV dgemv_ 
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//	#define SYR  dsyr_
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//	#define SYR2 dsyr2_
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									# define POTRF dpotrf_ 
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif  /* __USE_SINGLE_PRECISION__ */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# ifdef EXTERNAL_BLAS 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// double precision
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  dgemm_ ( char  * ta ,  char  * tb ,  int  * m ,  int  * n ,  int  * k ,  double  * alpha ,  double  * A ,  int  * lda ,  double  * B ,  int  ldb ,  double  * beta ,  double  * C ,  int  * ldc ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  dgemv_ ( char  * ta ,  int  * m ,  int  * n ,  double  * alpha ,  double  * A ,  int  * lda ,  double  * x ,  int  * incx ,  double  * beta ,  double  * y ,  int  * incy ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  dpotrf_ ( char  * uplo ,  int  * m ,  double  * A ,  int  * lda ,  int  * info ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// single precision
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  sgemm_ ( char  * ta ,  char  * tb ,  int  * m ,  int  * n ,  int  * k ,  float  * alpha ,  float  * A ,  int  * lda ,  float  * B ,  int  ldb ,  float  * beta ,  float  * C ,  int  * ldc ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  sgemv_ ( char  * ta ,  int  * m ,  int  * n ,  float  * alpha ,  float  * A ,  int  * lda ,  float  * x ,  int  * incx ,  float  * beta ,  float  * y ,  int  * incy ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  spotrf_ ( char  * uplo ,  int  * m ,  float  * A ,  int  * lda ,  int  * info ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# else 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/** Performs one of the matrix-matrix operation in double precision. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  dgemm_  (  const  char * ,  const  char * ,  const  unsigned  long * ,  const  unsigned  long * ,  const  unsigned  long * , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											const  double * ,  const  double * ,  const  unsigned  long * ,  const  double * ,  const  unsigned  long * , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											const  double * ,  double * ,  const  unsigned  long *  ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/** Performs one of the matrix-matrix operation in single precision. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  sgemm_  (  const  char * ,  const  char * ,  const  unsigned  long * ,  const  unsigned  long * ,  const  unsigned  long * , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											const  float * ,  const  float * ,  const  unsigned  long * ,  const  float * ,  const  unsigned  long * , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											const  float * ,  float * ,  const  unsigned  long *  ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/** Calculates the Cholesky factorization of a real symmetric positive definite matrix in double precision. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  dpotrf_  (  const  char  * ,  const  unsigned  long  * ,  double  * ,  const  unsigned  long  * ,  long  *  ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/** Calculates the Cholesky factorization of a real symmetric positive definite matrix in single precision. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  spotrf_  (  const  char  * ,  const  unsigned  long  * ,  float  * ,  const  unsigned  long  * ,  long  *  ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/** Performs a symmetric rank 1 operation in double precision. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//	void dsyr_ ( const char *, const unsigned long *, const double *, const double *,
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//				 const unsigned long *, double *, const unsigned long *);
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/** Performs a symmetric rank 1 operation in single precision. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//	void ssyr_ ( const char *, const unsigned long *, const float *, const float *,
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//				 const unsigned long *, float *, const unsigned long *);
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/** Performs a symmetric rank 2 operation in double precision. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//	void dsyr2_ ( const char *, const unsigned long *, const double *, const double *,
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//				  const unsigned long *, const double *, const unsigned long *, double *, const unsigned long *);
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/** Performs a symmetric rank 2 operation in single precision. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//	void ssyr2_ ( const char *, const unsigned long *, const float *, const float *,
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//				  const unsigned long *, const float *, const unsigned long *, float *, const unsigned long *);
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <qpOASES_e/Indexlist.h> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								BEGIN_NAMESPACE_QPOASES 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 	\ brief  Interfaces  matrix - vector  operations  tailored  to  general  dense  matrices . 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 	Dense  matrix  class  ( row  major  format ) . 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 	\ author  Andreas  Potschka ,  Christian  Kirches ,  Hans  Joachim  Ferreau 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 	\ version  3.1 embedded 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 	\ date  2011 - 2015 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								typedef  struct 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									real_t  * val ; 				/**< Vector of entries. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									int  nRows ; 					/**< Number of rows. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									int  nCols ; 					/**< Number of columns. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									int  leaDim ; 					/**< Leading dimension. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  DenseMatrix ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int  DenseMatrix_calculateMemorySize (  int  m ,  int  n  ) ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								char  * DenseMatrix_assignMemory (  int  m ,  int  n ,  DenseMatrix  * * mem ,  void  * raw_memory  ) ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								DenseMatrix  * DenseMatrix_createMemory (  int  m ,  int  n  ) ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Constructor from vector of values.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *   Caution :  Data  pointer  must  be  valid  throughout  lifetime 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DenseMatrixCON ( 	DenseMatrix *  _THIS , 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														int  m , 			/**< Number of rows. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														int  n , 			/**< Number of columns. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														int  lD , 			/**< Leading dimension. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														real_t  * v 		/**< Values. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DenseMatrixCPY ( 	DenseMatrix *  FROM , 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														DenseMatrix *  TO 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Frees all internal memory. */ 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  DenseMatrix_free (  DenseMatrix *  _THIS  ) ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Constructor from vector of values.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *   Caution :  Data  pointer  must  be  valid  throughout  lifetime 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								returnValue  DenseMatrix_init ( 	DenseMatrix *  _THIS , 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																int  m , 			/**< Number of rows. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																int  n , 			/**< Number of columns. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																int  lD , 			/**< Leading dimension. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																real_t  * v 		/**< Values. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns i-th diagonal entry.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 	\ return  i - th  diagonal  entry  */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								real_t  DenseMatrix_diag ( 	DenseMatrix *  _THIS , 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
															int  i 			/**< Index. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
															) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Checks whether matrix is square and diagonal.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 	\ return  BT_TRUE   iff  matrix  is  square  and  diagonal ;  \ n 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 	        BT_FALSE  otherwise .  */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								BooleanType  DenseMatrix_isDiag (  DenseMatrix *  _THIS  ) ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Get the N-norm of the matrix
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *   \ return  N - norm  of  the  matrix 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								real_t  DenseMatrix_getNorm (  DenseMatrix *  _THIS , 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
															int  type 			/**< Norm type, 1: one-norm, 2: Euclidean norm. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
															) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Get the N-norm of a row
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *   \ return  N - norm  of  row  \ a  rNum 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								real_t  DenseMatrix_getRowNorm ( 	DenseMatrix *  _THIS , 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																int  rNum , 			/**< Row number. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																int  type 			/**< Norm type, 1: one-norm, 2: Euclidean norm. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Retrieve indexed entries of matrix row multiplied by alpha.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *   \ return  SUCCESSFUL_RETURN  */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								returnValue  DenseMatrix_getRow ( 	DenseMatrix *  _THIS , 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																int  rNum , 						/**< Row number. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																const  Indexlist *  const  icols , 	/**< Index list specifying columns. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																real_t  alpha , 					/**< Scalar factor. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																real_t  * row 						/**< Output row vector. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Retrieve indexed entries of matrix column multiplied by alpha.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *   \ return  SUCCESSFUL_RETURN  */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 returnValue  DenseMatrix_getCol ( 	DenseMatrix *  _THIS , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	int  cNum , 						/**< Column number. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	const  Indexlist *  const  irows , 	/**< Index list specifying rows. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	real_t  alpha , 					/**< Scalar factor. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	real_t  * col 						/**< Output column vector. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Evaluate Y=alpha*A*X + beta*Y.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *   \ return  SUCCESSFUL_RETURN .  */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								returnValue  DenseMatrix_times ( 	DenseMatrix *  _THIS , 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																int  xN , 					/**< Number of vectors to multiply. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																real_t  alpha , 			/**< Scalar factor for matrix vector product. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																const  real_t  * x , 		/**< Input vector to be multiplied. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																int  xLD , 				/**< Leading dimension of input x. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																real_t  beta , 			/**< Scalar factor for y. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																real_t  * y , 				/**< Output vector of results. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																int  yLD 					/**< Leading dimension of output y. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Evaluate Y=alpha*A'*X + beta*Y.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *   \ return  SUCCESSFUL_RETURN .  */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								returnValue  DenseMatrix_transTimes ( 	DenseMatrix *  _THIS , 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	int  xN , 				/**< Number of vectors to multiply. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	real_t  alpha , 		/**< Scalar factor for matrix vector product. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	const  real_t  * x , 	/**< Input vector to be multiplied. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	int  xLD , 			/**< Leading dimension of input x. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	real_t  beta , 		/**< Scalar factor for y. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	real_t  * y , 			/**< Output vector of results. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	int  yLD 				/**< Leading dimension of output y. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Evaluate matrix vector product with submatrix given by Indexlist.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 	\ return  SUCCESSFUL_RETURN  */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 returnValue  DenseMatrix_subTimes ( 	DenseMatrix *  _THIS , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	const  Indexlist *  const  irows , 	/**< Index list specifying rows. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	const  Indexlist *  const  icols , 	/**< Index list specifying columns. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	int  xN , 							/**< Number of vectors to multiply. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	real_t  alpha , 					/**< Scalar factor for matrix vector product. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	const  real_t  * x , 				/**< Input vector to be multiplied. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	int  xLD , 						/**< Leading dimension of input x. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	real_t  beta , 					/**< Scalar factor for y. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	real_t  * y , 						/**< Output vector of results. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	int  yLD , 						/**< Leading dimension of output y. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	BooleanType  yCompr  				/**< Compressed storage for y. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Evaluate matrix transpose vector product.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 	\ return  SUCCESSFUL_RETURN  */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								returnValue  DenseMatrix_subTransTimes ( 	DenseMatrix *  _THIS , 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																		const  Indexlist *  const  irows , 	/**< Index list specifying rows. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																		const  Indexlist *  const  icols , 	/**< Index list specifying columns. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																		int  xN , 							/**< Number of vectors to multiply. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																		real_t  alpha , 					/**< Scalar factor for matrix vector product. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																		const  real_t  * x , 				/**< Input vector to be multiplied. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																		int  xLD , 						/**< Leading dimension of input x. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																		real_t  beta , 					/**< Scalar factor for y. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																		real_t  * y , 						/**< Output vector of results. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																		int  yLD 							/**< Leading dimension of output y. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																		) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Adds given offset to diagonal of matrix.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 	\ return  SUCCESSFUL_RETURN  \ n 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 			RET_NO_DIAGONAL_AVAILABLE  */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								returnValue  DenseMatrix_addToDiag ( 	DenseMatrix *  _THIS , 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	real_t  alpha 		/**< Diagonal offset. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Prints matrix to screen.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 	\ return  SUCCESSFUL_RETURN  */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								returnValue  DenseMatrix_print ( 	DenseMatrix *  _THIS 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  inline  real_t *  DenseMatrix_getVal (  DenseMatrix *  _THIS  )  {  return  _THIS - > val ;  } 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Compute bilinear form y = x'*H*x using submatrix given by index list.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 	\ return  SUCCESSFUL_RETURN  */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								returnValue  DenseMatrix_bilinear ( 	DenseMatrix *  _THIS , 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	const  Indexlist *  const  icols , 	/**< Index list specifying columns of x. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	int  xN , 							/**< Number of vectors to multiply. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	const  real_t  * x , 				/**< Input vector to be multiplied (uncompressed). */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	int  xLD , 						/**< Leading dimension of input x. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	real_t  * y , 						/**< Output vector of results (compressed). */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	int  yLD 							/**< Leading dimension of output y. */ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																	) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								END_NAMESPACE_QPOASES 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif	 /* QPOASES_MATRICES_H */