6 #ifndef CoinWarmStartVector_H
7 #define CoinWarmStartVector_H
11 # pragma warning(disable:4786)
150 template <
typename T>
197 const T*
const diffVals) ;
228 template <
typename T,
typename U>
236 inline int size0()
const {
return t_.size(); }
246 t_(s0, v0),
u_(s1, v1) {}
282 template <
typename T,
typename U>
344 {
throw CoinError(
"Old warm start not derived from CoinWarmStartVector.",
345 "generateDiff",
"CoinWarmStartVector") ; }
351 const int oldCnt = oldVector->
size() ;
352 const int newCnt = newVector->
size() ;
354 assert(newCnt >= oldCnt) ;
356 unsigned int *diffNdx =
new unsigned int [newCnt];
357 T* diffVal =
new T[newCnt];
362 const T*oldVal = oldVector->
values() ;
363 const T*newVal = newVector->
values() ;
364 int numberChanged = 0 ;
366 for (i = 0 ; i < oldCnt ; i++) {
367 if (oldVal[i] != newVal[i]) {
368 diffNdx[numberChanged] = i ;
369 diffVal[numberChanged++] = newVal[i] ;
372 for ( ; i < newCnt ; i++) {
373 diffNdx[numberChanged] = i ;
374 diffVal[numberChanged++] = newVal[i] ;
399 template <
typename T>
void
408 throw CoinError(
"Diff not derived from CoinWarmStartVectorDiff.",
409 "applyDiff",
"CoinWarmStartVector") ;
414 const int numberChanges = diff->
sze_ ;
415 const unsigned int *diffNdxs = diff->
diffNdxs_ ;
417 T* vals = this->values_ ;
419 for (
int i = 0 ; i < numberChanges ; i++) {
420 unsigned int diffNdx = diffNdxs[i] ;
421 T diffVal = diffVals[i] ;
422 vals[diffNdx] = diffVal ;
441 diffNdxs_ =
new unsigned int[sze_] ;
442 memcpy(diffNdxs_,rhs.
diffNdxs_,sze_*
sizeof(
unsigned int)) ;
443 diffVals_ =
new T[sze_] ;
444 memcpy(diffVals_,rhs.
diffVals_,sze_*
sizeof(T)) ;
457 template <
typename T>
473 template <
typename T>
475 (
int sze,
const unsigned int *
const diffNdxs,
const T *
const diffVals)
481 diffNdxs_ =
new unsigned int[sze] ;
482 memcpy(diffNdxs_,diffNdxs,sze*
sizeof(
unsigned int)) ;
483 diffVals_ =
new T[sze] ;
484 memcpy(diffVals_,diffVals,sze*
sizeof(T)) ;