Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00036 #include <qpOASES/Flipper.hpp>
00037
00038
00039 BEGIN_NAMESPACE_QPOASES
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050 Flipper::Flipper( )
00051 {
00052 R = 0;
00053 Q = 0;
00054 T = 0;
00055
00056 init( );
00057 }
00058
00059
00060
00061
00062
00063 Flipper::Flipper( int _nV,
00064 int _nC
00065 )
00066 {
00067 R = 0;
00068 Q = 0;
00069 T = 0;
00070
00071 init( _nV,_nC );
00072 }
00073
00074
00075
00076
00077
00078 Flipper::Flipper( const Flipper& rhs )
00079 {
00080 R = 0;
00081 Q = 0;
00082 T = 0;
00083
00084 copy( rhs );
00085 }
00086
00087
00088
00089
00090
00091 Flipper::~Flipper( )
00092 {
00093 clear( );
00094 }
00095
00096
00097
00098
00099
00100 Flipper& Flipper::operator=( const Flipper& rhs )
00101 {
00102 if ( this != &rhs )
00103 {
00104 clear( );
00105 copy( rhs );
00106 }
00107
00108 return *this;
00109 }
00110
00111
00112
00113
00114
00115
00116 returnValue Flipper::init( int _nV,
00117 int _nC
00118 )
00119 {
00120 if ( ( _nV < 0 ) || ( _nC < 0 ) )
00121 return THROWERROR( RET_INVALID_ARGUMENTS );
00122
00123 clear( );
00124
00125 nV = _nV;
00126 nC = _nC;
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139 return SUCCESSFUL_RETURN;
00140 }
00141
00142
00143
00144
00145
00146
00147 returnValue Flipper::get( Bounds* const _bounds,
00148 double* const _R,
00149 Constraints* const _constraints,
00150 double* const _Q,
00151 double* const _T
00152 ) const
00153 {
00154 if ( _bounds != 0 )
00155 *_bounds = bounds;
00156
00157 if ( _constraints != 0 )
00158 *_constraints = constraints;
00159
00160 if ( ( _R != 0 ) && ( R != 0 ) )
00161 memcpy( _R,R, nV*nV*sizeof(real_t) );
00162
00163 if ( ( _Q != 0 ) && ( Q != 0 ) )
00164 memcpy( _Q,Q, nV*nV*sizeof(real_t) );
00165
00166 if ( ( _T != 0 ) && ( T != 0 ) )
00167 memcpy( _T,T, getDimT()*sizeof(real_t) );
00168
00169 return SUCCESSFUL_RETURN;
00170 }
00171
00172
00173
00174
00175
00176 returnValue Flipper::set( const Bounds* const _bounds,
00177 const double* const _R,
00178 const Constraints* const _constraints,
00179 const double* const _Q,
00180 const double* const _T
00181 )
00182 {
00183 if ( _bounds != 0 )
00184 bounds = *_bounds;
00185
00186 if ( _constraints != 0 )
00187 constraints = *_constraints;
00188
00189 if ( _R != 0 )
00190 {
00191 if ( R == 0 )
00192 R = new real_t[nV*nV];
00193
00194 memcpy( R,_R, nV*nV*sizeof(real_t) );
00195 }
00196
00197 if ( _Q != 0 )
00198 {
00199 if ( Q == 0 )
00200 Q = new real_t[nV*nV];
00201
00202 memcpy( Q,_Q, nV*nV*sizeof(real_t) );
00203 }
00204
00205 if ( _T != 0 )
00206 {
00207 if ( T == 0 )
00208 T = new real_t[getDimT()];
00209
00210 memcpy( T,_T, getDimT()*sizeof(real_t) );
00211 }
00212
00213 return SUCCESSFUL_RETURN;
00214 }
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225 returnValue Flipper::clear( )
00226 {
00227 if ( R != 0 )
00228 {
00229 delete[] R;
00230 R = 0;
00231 }
00232
00233 if ( Q != 0 )
00234 {
00235 delete[] Q;
00236 Q = 0;
00237 }
00238
00239 if ( T != 0 )
00240 {
00241 delete[] T;
00242 T = 0;
00243 }
00244
00245 return SUCCESSFUL_RETURN;
00246 }
00247
00248
00249
00250
00251
00252 returnValue Flipper::copy( const Flipper& rhs
00253 )
00254 {
00255 return set( &(rhs.bounds),rhs.R, &(rhs.constraints),rhs.Q,rhs.T );
00256 }
00257
00258
00259 int Flipper::getDimT( ) const
00260 {
00261 if ( nV > nC )
00262 return nC*nC;
00263 else
00264 return nV*nV;
00265 }
00266
00267
00268 END_NAMESPACE_QPOASES
00269
00270
00271
00272
00273