summaryrefslogtreecommitdiff
path: root/build/Bonmin/include/coin/CoinWarmStartVector.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'build/Bonmin/include/coin/CoinWarmStartVector.hpp')
-rw-r--r--build/Bonmin/include/coin/CoinWarmStartVector.hpp488
1 files changed, 0 insertions, 488 deletions
diff --git a/build/Bonmin/include/coin/CoinWarmStartVector.hpp b/build/Bonmin/include/coin/CoinWarmStartVector.hpp
deleted file mode 100644
index e43ea10..0000000
--- a/build/Bonmin/include/coin/CoinWarmStartVector.hpp
+++ /dev/null
@@ -1,488 +0,0 @@
-/* $Id: CoinWarmStartVector.hpp 1498 2011-11-02 15:25:35Z mjs $ */
-// Copyright (C) 2000, International Business Machines
-// Corporation and others. All Rights Reserved.
-// This code is licensed under the terms of the Eclipse Public License (EPL).
-
-#ifndef CoinWarmStartVector_H
-#define CoinWarmStartVector_H
-
-#if defined(_MSC_VER)
-// Turn off compiler warning about long names
-# pragma warning(disable:4786)
-#endif
-
-#include <cassert>
-#include <cmath>
-
-#include "CoinHelperFunctions.hpp"
-#include "CoinWarmStart.hpp"
-
-
-//#############################################################################
-
-/** WarmStart information that is only a vector */
-
-template <typename T>
-class CoinWarmStartVector : public virtual CoinWarmStart
-{
-protected:
- inline void gutsOfDestructor() {
- delete[] values_;
- }
- inline void gutsOfCopy(const CoinWarmStartVector<T>& rhs) {
- size_ = rhs.size_;
- values_ = new T[size_];
- CoinDisjointCopyN(rhs.values_, size_, values_);
- }
-
-public:
- /// return the size of the vector
- int size() const { return size_; }
- /// return a pointer to the array of vectors
- const T* values() const { return values_; }
-
- /** Assign the vector to be the warmstart information. In this method
- the object assumes ownership of the pointer and upon return #vector will
- be a NULL pointer. If copying is desirable use the constructor. */
- void assignVector(int size, T*& vec) {
- size_ = size;
- delete[] values_;
- values_ = vec;
- vec = NULL;
- }
-
- CoinWarmStartVector() : size_(0), values_(NULL) {}
-
- CoinWarmStartVector(int size, const T* vec) :
- size_(size), values_(new T[size]) {
- CoinDisjointCopyN(vec, size, values_);
- }
-
- CoinWarmStartVector(const CoinWarmStartVector& rhs) {
- gutsOfCopy(rhs);
- }
-
- CoinWarmStartVector& operator=(const CoinWarmStartVector& rhs) {
- if (this != &rhs) {
- gutsOfDestructor();
- gutsOfCopy(rhs);
- }
- return *this;
- }
-
- inline void swap(CoinWarmStartVector& rhs) {
- if (this != &rhs) {
- std::swap(size_, rhs.size_);
- std::swap(values_, rhs.values_);
- }
- }
-
- /** `Virtual constructor' */
- virtual CoinWarmStart *clone() const {
- return new CoinWarmStartVector(*this);
- }
-
- virtual ~CoinWarmStartVector() {
- gutsOfDestructor();
- }
-
- /*! \brief Clear the data
-
- Make it appear as if the warmstart was just created using the default
- constructor.
- */
- inline void clear() {
- size_ = 0;
- delete[] values_;
- values_ = NULL;
- }
-
- /*! \name Vector warm start `diff' methods */
- //@{
-
- /*! \brief Generate a `diff' that can convert the warm start passed as a
- parameter to the warm start specified by \c this.
-
- The capabilities are limited: the basis passed as a parameter can be no
- larger than the basis pointed to by \c this.
- */
-
- virtual CoinWarmStartDiff*
- generateDiff (const CoinWarmStart *const oldCWS) const ;
-
- /*! \brief Apply \p diff to this warm start.
-
- Update this warm start by applying \p diff. It's assumed that the
- allocated capacity of the warm start is sufficiently large.
- */
-
- virtual void applyDiff (const CoinWarmStartDiff *const cwsdDiff) ;
-
- //@}
-
-private:
- ///@name Private data members
- //@{
- /// the size of the vector
- int size_;
- /// the vector itself
- T* values_;
- //@}
-};
-
-//=============================================================================
-
-/*! \class CoinWarmStartVectorDiff
- \brief A `diff' between two CoinWarmStartVector objects
-
- This class exists in order to hide from the world the details of calculating
- and representing a `diff' between two CoinWarmStartVector objects. For
- convenience, assignment, cloning, and deletion are visible to the world, and
- default and copy constructors are made available to derived classes.
- Knowledge of the rest of this structure, and of generating and applying
- diffs, is restricted to the friend functions
- CoinWarmStartVector::generateDiff() and CoinWarmStartVector::applyDiff().
-
- The actual data structure is a pair of vectors, #diffNdxs_ and #diffVals_.
-
-*/
-
-template <typename T>
-class CoinWarmStartVectorDiff : public virtual CoinWarmStartDiff
-{
- friend CoinWarmStartDiff*
- CoinWarmStartVector<T>::generateDiff(const CoinWarmStart *const oldCWS) const;
- friend void
- CoinWarmStartVector<T>::applyDiff(const CoinWarmStartDiff *const diff) ;
-
-public:
-
- /*! \brief `Virtual constructor' */
- virtual CoinWarmStartDiff * clone() const {
- return new CoinWarmStartVectorDiff(*this) ;
- }
-
- /*! \brief Assignment */
- virtual CoinWarmStartVectorDiff &
- operator= (const CoinWarmStartVectorDiff<T>& rhs) ;
-
- /*! \brief Destructor */
- virtual ~CoinWarmStartVectorDiff() {
- delete[] diffNdxs_ ;
- delete[] diffVals_ ;
- }
-
- inline void swap(CoinWarmStartVectorDiff& rhs) {
- if (this != &rhs) {
- std::swap(sze_, rhs.sze_);
- std::swap(diffNdxs_, rhs.diffNdxs_);
- std::swap(diffVals_, rhs.diffVals_);
- }
- }
-
- /*! \brief Default constructor
- */
- CoinWarmStartVectorDiff () : sze_(0), diffNdxs_(0), diffVals_(NULL) {}
-
- /*! \brief Copy constructor
-
- For convenience when copying objects containing CoinWarmStartVectorDiff
- objects. But consider whether you should be using #clone() to retain
- polymorphism.
- */
- CoinWarmStartVectorDiff(const CoinWarmStartVectorDiff<T>& rhs) ;
-
- /*! \brief Standard constructor */
- CoinWarmStartVectorDiff(int sze, const unsigned int* const diffNdxs,
- const T* const diffVals) ;
-
- /*! \brief Clear the data
-
- Make it appear as if the diff was just created using the default
- constructor.
- */
- inline void clear() {
- sze_ = 0;
- delete[] diffNdxs_; diffNdxs_ = NULL;
- delete[] diffVals_; diffVals_ = NULL;
- }
-
-private:
-
- /*!
- \brief Number of entries (and allocated capacity), in units of \c T.
- */
- int sze_ ;
-
- /*! \brief Array of diff indices */
-
- unsigned int* diffNdxs_ ;
-
- /*! \brief Array of diff values */
-
- T* diffVals_ ;
-};
-
-//##############################################################################
-
-template <typename T, typename U>
-class CoinWarmStartVectorPair : public virtual CoinWarmStart
-{
-private:
- CoinWarmStartVector<T> t_;
- CoinWarmStartVector<U> u_;
-
-public:
- inline int size0() const { return t_.size(); }
- inline int size1() const { return u_.size(); }
- inline const T* values0() const { return t_.values(); }
- inline const U* values1() const { return u_.values(); }
-
- inline void assignVector0(int size, T*& vec) { t_.assignVector(size, vec); }
- inline void assignVector1(int size, U*& vec) { u_.assignVector(size, vec); }
-
- CoinWarmStartVectorPair() {}
- CoinWarmStartVectorPair(int s0, const T* v0, int s1, const U* v1) :
- t_(s0, v0), u_(s1, v1) {}
-
- CoinWarmStartVectorPair(const CoinWarmStartVectorPair<T,U>& rhs) :
- t_(rhs.t_), u_(rhs.u_) {}
- CoinWarmStartVectorPair& operator=(const CoinWarmStartVectorPair<T,U>& rhs) {
- if (this != &rhs) {
- t_ = rhs.t_;
- u_ = rhs.u_;
- }
- return *this;
- }
-
- inline void swap(CoinWarmStartVectorPair<T,U>& rhs) {
- t_.swap(rhs.t_);
- u_.swap(rhs.u_);
- }
-
- virtual CoinWarmStart *clone() const {
- return new CoinWarmStartVectorPair(*this);
- }
-
- virtual ~CoinWarmStartVectorPair() {}
-
- inline void clear() {
- t_.clear();
- u_.clear();
- }
-
- virtual CoinWarmStartDiff*
- generateDiff (const CoinWarmStart *const oldCWS) const ;
-
- virtual void applyDiff (const CoinWarmStartDiff *const cwsdDiff) ;
-};
-
-//=============================================================================
-
-template <typename T, typename U>
-class CoinWarmStartVectorPairDiff : public virtual CoinWarmStartDiff
-{
- friend CoinWarmStartDiff*
- CoinWarmStartVectorPair<T,U>::generateDiff(const CoinWarmStart *const oldCWS) const;
- friend void
- CoinWarmStartVectorPair<T,U>::applyDiff(const CoinWarmStartDiff *const diff) ;
-
-private:
- CoinWarmStartVectorDiff<T> tdiff_;
- CoinWarmStartVectorDiff<U> udiff_;
-
-public:
- CoinWarmStartVectorPairDiff() {}
- CoinWarmStartVectorPairDiff(const CoinWarmStartVectorPairDiff<T,U>& rhs) :
- tdiff_(rhs.tdiff_), udiff_(rhs.udiff_) {}
- virtual ~CoinWarmStartVectorPairDiff() {}
-
- virtual CoinWarmStartVectorPairDiff&
- operator=(const CoinWarmStartVectorPairDiff<T,U>& rhs) {
- if (this != &rhs) {
- tdiff_ = rhs.tdiff_;
- udiff_ = rhs.udiff_;
- }
- return *this;
- }
-
- virtual CoinWarmStartDiff * clone() const {
- return new CoinWarmStartVectorPairDiff(*this) ;
- }
-
- inline void swap(CoinWarmStartVectorPairDiff<T,U>& rhs) {
- tdiff_.swap(rhs.tdiff_);
- udiff_.swap(rhs.udiff_);
- }
-
- inline void clear() {
- tdiff_.clear();
- udiff_.clear();
- }
-};
-
-//##############################################################################
-//#############################################################################
-
-/*
- Generate a `diff' that can convert the warm start passed as a parameter to
- the warm start specified by this.
-
- The capabilities are limited: the basis passed as a parameter can be no
- larger than the basis pointed to by this.
-*/
-
-template <typename T> CoinWarmStartDiff*
-CoinWarmStartVector<T>::generateDiff(const CoinWarmStart *const oldCWS) const
-{
-/*
- Make sure the parameter is CoinWarmStartVector or derived class.
-*/
- const CoinWarmStartVector<T>* oldVector =
- dynamic_cast<const CoinWarmStartVector<T>*>(oldCWS);
- if (!oldVector)
- { throw CoinError("Old warm start not derived from CoinWarmStartVector.",
- "generateDiff","CoinWarmStartVector") ; }
- const CoinWarmStartVector<T>* newVector = this ;
- /*
- Make sure newVector is equal or bigger than oldVector. Calculate the worst
- case number of diffs and allocate vectors to hold them.
- */
- const int oldCnt = oldVector->size() ;
- const int newCnt = newVector->size() ;
-
- assert(newCnt >= oldCnt) ;
-
- unsigned int *diffNdx = new unsigned int [newCnt];
- T* diffVal = new T[newCnt];
- /*
- Scan the vector vectors. For the portion of the vectors which overlap,
- create diffs. Then add any additional entries from newVector.
- */
- const T*oldVal = oldVector->values() ;
- const T*newVal = newVector->values() ;
- int numberChanged = 0 ;
- int i ;
- for (i = 0 ; i < oldCnt ; i++) {
- if (oldVal[i] != newVal[i]) {
- diffNdx[numberChanged] = i ;
- diffVal[numberChanged++] = newVal[i] ;
- }
- }
- for ( ; i < newCnt ; i++) {
- diffNdx[numberChanged] = i ;
- diffVal[numberChanged++] = newVal[i] ;
- }
- /*
- Create the object of our desire.
- */
- CoinWarmStartVectorDiff<T> *diff =
- new CoinWarmStartVectorDiff<T>(numberChanged,diffNdx,diffVal) ;
- /*
- Clean up and return.
- */
- delete[] diffNdx ;
- delete[] diffVal ;
-
- return diff;
- // return (dynamic_cast<CoinWarmStartDiff<T>*>(diff)) ;
-}
-
-
-/*
- Apply diff to this warm start.
-
- Update this warm start by applying diff. It's assumed that the
- allocated capacity of the warm start is sufficiently large.
-*/
-
-template <typename T> void
-CoinWarmStartVector<T>::applyDiff (const CoinWarmStartDiff *const cwsdDiff)
-{
- /*
- Make sure we have a CoinWarmStartVectorDiff
- */
- const CoinWarmStartVectorDiff<T>* diff =
- dynamic_cast<const CoinWarmStartVectorDiff<T>*>(cwsdDiff) ;
- if (!diff) {
- throw CoinError("Diff not derived from CoinWarmStartVectorDiff.",
- "applyDiff","CoinWarmStartVector") ;
- }
- /*
- Application is by straighforward replacement of words in the vector vector.
- */
- const int numberChanges = diff->sze_ ;
- const unsigned int *diffNdxs = diff->diffNdxs_ ;
- const T* diffVals = diff->diffVals_ ;
- T* vals = this->values_ ;
-
- for (int i = 0 ; i < numberChanges ; i++) {
- unsigned int diffNdx = diffNdxs[i] ;
- T diffVal = diffVals[i] ;
- vals[diffNdx] = diffVal ;
- }
-}
-
-//#############################################################################
-
-
-// Assignment
-
-template <typename T> CoinWarmStartVectorDiff<T>&
-CoinWarmStartVectorDiff<T>::operator=(const CoinWarmStartVectorDiff<T> &rhs)
-{
- if (this != &rhs) {
- if (sze_ > 0) {
- delete[] diffNdxs_ ;
- delete[] diffVals_ ;
- }
- sze_ = rhs.sze_ ;
- if (sze_ > 0) {
- diffNdxs_ = new unsigned int[sze_] ;
- memcpy(diffNdxs_,rhs.diffNdxs_,sze_*sizeof(unsigned int)) ;
- diffVals_ = new T[sze_] ;
- memcpy(diffVals_,rhs.diffVals_,sze_*sizeof(T)) ;
- } else {
- diffNdxs_ = 0 ;
- diffVals_ = 0 ;
- }
- }
-
- return (*this) ;
-}
-
-
-// Copy constructor
-
-template <typename T>
-CoinWarmStartVectorDiff<T>::CoinWarmStartVectorDiff(const CoinWarmStartVectorDiff<T> &rhs)
- : sze_(rhs.sze_),
- diffNdxs_(0),
- diffVals_(0)
-{
- if (sze_ > 0) {
- diffNdxs_ = new unsigned int[sze_] ;
- memcpy(diffNdxs_,rhs.diffNdxs_,sze_*sizeof(unsigned int)) ;
- diffVals_ = new T[sze_] ;
- memcpy(diffVals_,rhs.diffVals_,sze_*sizeof(T)) ;
- }
-}
-
-/// Standard constructor
-
-template <typename T>
-CoinWarmStartVectorDiff<T>::CoinWarmStartVectorDiff
-(int sze, const unsigned int *const diffNdxs, const T *const diffVals)
- : sze_(sze),
- diffNdxs_(0),
- diffVals_(0)
-{
- if (sze > 0) {
- diffNdxs_ = new unsigned int[sze] ;
- memcpy(diffNdxs_,diffNdxs,sze*sizeof(unsigned int)) ;
- diffVals_ = new T[sze] ;
- memcpy(diffVals_,diffVals,sze*sizeof(T)) ;
- }
-}
-
-#endif