5 #ifndef CoinWarmStartVector_H
6 #define CoinWarmStartVector_H
10 # pragma warning(disable:4786)
149 template <
typename T>
196 const T*
const diffVals) ;
227 template <
typename T,
typename U>
235 inline int size0()
const {
return t_.size(); }
245 t_(s0, v0),
u_(s1, v1) {}
280 template <
typename T,
typename U>
339 {
throw CoinError(
"Old warm start not derived from CoinWarmStartVector.",
340 "generateDiff",
"CoinWarmStartVector") ; }
346 const int oldCnt = oldVector->
size() ;
347 const int newCnt = newVector->
size() ;
349 assert(newCnt >= oldCnt) ;
351 unsigned int *diffNdx =
new unsigned int [newCnt];
352 T* diffVal =
new T[newCnt];
357 const T*oldVal = oldVector->
values() ;
358 const T*newVal = newVector->
values() ;
359 int numberChanged = 0 ;
361 for (i = 0 ; i < oldCnt ; i++) {
362 if (oldVal[i] != newVal[i]) {
363 diffNdx[numberChanged] = i ;
364 diffVal[numberChanged++] = newVal[i] ;
367 for ( ; i < newCnt ; i++) {
368 diffNdx[numberChanged] = i ;
369 diffVal[numberChanged++] = newVal[i] ;
394 template <
typename T>
void
403 throw CoinError(
"Diff not derived from CoinWarmStartVectorDiff.",
404 "applyDiff",
"CoinWarmStartVector") ;
409 const int numberChanges = diff->
sze_ ;
410 const unsigned int *diffNdxs = diff->
diffNdxs_ ;
412 T* vals = this->values_ ;
414 for (
int i = 0 ; i < numberChanges ; i++) {
415 unsigned int diffNdx = diffNdxs[i] ;
416 T diffVal = diffVals[i] ;
417 vals[diffNdx] = diffVal ;
436 diffNdxs_ =
new unsigned int[sze_] ;
437 memcpy(diffNdxs_,rhs.
diffNdxs_,sze_*
sizeof(
unsigned int)) ;
438 diffVals_ =
new T[sze_] ;
439 memcpy(diffVals_,rhs.
diffVals_,sze_*
sizeof(T)) ;
452 template <
typename T>
468 template <
typename T>
470 (
int sze,
const unsigned int *
const diffNdxs,
const T *
const diffVals)
476 diffNdxs_ =
new unsigned int[sze] ;
477 memcpy(diffNdxs_,diffNdxs,sze*
sizeof(
unsigned int)) ;
478 diffVals_ =
new T[sze] ;
479 memcpy(diffVals_,diffVals,sze*
sizeof(T)) ;