6 #ifndef CoinPackedVector_H 7 #define CoinPackedVector_H 16 #ifndef COIN_NOTEST_DUPLICATE 17 #define COIN_NOTEST_DUPLICATE 21 #ifndef COIN_NOTEST_DUPLICATE 22 #define COIN_DEFAULT_VALUE_FOR_DUPLICATE true 24 #define COIN_DEFAULT_VALUE_FOR_DUPLICATE false 183 void setVector(
int size,
const int * inds,
const double * elems,
187 void setConstant(
int size,
const int * inds,
double elems,
191 void setFull(
int size,
const double * elems,
205 void insert(
int index,
double element);
210 void swap(
int i,
int j);
238 template <
class CoinCompare3>
239 void sort(
const CoinCompare3 & tc)
240 {
CoinSort_3(indices_, indices_ + nElements_, origIndices_, elements_,
244 {
CoinSort_3(indices_, indices_ + nElements_, origIndices_, elements_,
248 {
CoinSort_3(indices_, indices_ + nElements_, origIndices_, elements_,
252 {
CoinSort_3(elements_, elements_ + nElements_, origIndices_, indices_,
256 {
CoinSort_3(elements_, elements_ + nElements_, origIndices_, indices_,
314 void gutsOfSetVector(
int size,
316 const int * inds,
const double * elems,
318 const char * method);
320 void gutsOfSetConstant(
int size,
321 const int * inds,
double value,
323 const char * method);
359 template <
class BinaryFunction>
void 370 for (
int i=0; i<s; ++i ) {
371 retVal.
insert(inds[i], bf(value, elems[i]));
376 template <
class BinaryFunction>
inline void 384 template <
class BinaryFunction>
void 398 if (s1 == 0 && s2 == 0)
410 for ( i=0; i<s1; ++i ) {
411 const int index = inds1[i];
413 const double val = bf(elems1[i], pos2 == -1 ? 0.0 : elems2[pos2]);
415 retVal.
insert(index, val);
418 for ( i=0; i<s2; ++i ) {
419 const int index = inds2[i];
424 const double val = bf(0.0, elems2[i]);
426 retVal.
insert(index, val);
469 binaryOp(retVal, op1, op2, std::plus<double>());
479 binaryOp(retVal, op1, op2, std::minus<double>());
489 binaryOp(retVal, op1, op2, std::multiplies<double>());
499 binaryOp(retVal, op1, op2, std::divides<double>());
516 for(i = 0; i < len; i++){
527 int i, j, len1, len2;
541 while(i < len1 && j < len2){
542 if(v1ind[i] == v2ind[j]){
543 acc += v1val[i] * v2val[j];
547 else if(v2ind[j] < v1ind[i]){
619 for (
int i = 0; i < size; ++i) {
620 elems[i] = value - elems[i];
641 for (
int i = 0; i < size; ++i) {
642 elems[i] = value / elems[i];
virtual const double * getElements() const
Get element values.
void clear()
Reset the vector (as if were just created an empty vector)
CoinPackedVector & operator=(const CoinPackedVector &)
Assignment operator.
void truncate(int newSize)
Resize the packed vector to be the first newSize elements.
double * getElements()
Get element values.
CoinPackedVector(bool testForDuplicateIndex=COIN_DEFAULT_VALUE_FOR_DUPLICATE)
Default constructor.
const double * getVectorElements() const
Get element values.
const int * getVectorIndices() const
Get indices of elements.
void binaryOp(CoinPackedVector &retVal, const CoinPackedVectorBase &op1, double value, BinaryFunction bf)
void setElement(int index, double element)
Set an existing element in the packed vector The first argument is the "index" into the elements() ar...
void CoinPackedVectorUnitTest()
A function that tests the methods in the CoinPackedVector class.
bool testForDuplicateIndex() const
Returns true if the vector should be tested for duplicate indices when they can occur.
void operator+=(double value)
add value to every entry
virtual const int * getIndices() const
Get indices of elements.
void operator-=(double value)
subtract value from every entry
int findIndex(int i) const
Return the position of the i'th element of the full storage vector.
void operator/=(double value)
divide every entry by value
Abstract base class for various sparse vectors.
virtual const double * getElements() const =0
Get element values.
virtual int getNumElements() const
Get the size.
CoinPackedVector operator+(const CoinPackedVectorBase &op1, const CoinPackedVectorBase &op2)
Return the sum of two packed vectors.
void operator*=(double value)
multiply every entry by value
const int * getOriginalPosition() const
Get pointer to int * vector of original postions.
virtual ~CoinPackedVector()
Destructor.
#define COIN_DEFAULT_VALUE_FOR_DUPLICATE
int capacity() const
capacity returns the size which could be accomodated without having to reallocate storage...
CoinPackedVector operator-(const CoinPackedVectorBase &op1, const CoinPackedVectorBase &op2)
Return the difference of two packed vectors.
void assignVector(int size, int *&inds, double *&elems, bool testForDuplicateIndex=COIN_DEFAULT_VALUE_FOR_DUPLICATE)
Assign the ownership of the arguments to this vector.
void setVector(int size, const int *inds, const double *elems, bool testForDuplicateIndex=COIN_DEFAULT_VALUE_FOR_DUPLICATE)
Set vector size, indices, and elements.
void sort(const CoinCompare3 &tc)
Sort the packed storage vector.
virtual int getNumElements() const =0
Get length of indices and elements vectors.
bool isExistingIndex(int i) const
Return true if the i'th element of the full storage vector exists in the packed storage vector...
CoinPackedVector operator*(const CoinPackedVectorBase &op1, const CoinPackedVectorBase &op2)
Return the element-wise product of two packed vectors.
void insert(int index, double element)
Insert an element into the vector.
friend void CoinPackedVectorUnitTest()
A function that tests the methods in the CoinPackedVector class.
void reserve(int n)
Reserve space.
double sortedSparseDotProduct(const CoinPackedVectorBase &op1, const CoinPackedVectorBase &op2)
Returns the dot product of two sorted CoinPackedVector objects.
CoinPackedVector operator/(const CoinPackedVectorBase &op1, const CoinPackedVectorBase &op2)
Return the element-wise ratio of two packed vectors.
void setFull(int size, const double *elems, bool testForDuplicateIndex=COIN_DEFAULT_VALUE_FOR_DUPLICATE)
Indices are not specified and are taken to be 0,1,...,size-1.
void sortOriginalOrder()
Sort in original order.
void CoinSort_3(S *sfirst, S *slast, T *tfirst, U *ufirst, const CoinCompare3 &tc)
Sort a triple of containers.
int getVectorNumElements() const
Get the size.
int * getIndices()
Get indices of elements.
double sparseDotProduct(const CoinPackedVectorBase &op1, const CoinPackedVectorBase &op2)
Returns the dot product of two CoinPackedVector objects whose elements are doubles.
void setConstant(int size, const int *inds, double elems, bool testForDuplicateIndex=COIN_DEFAULT_VALUE_FOR_DUPLICATE)
Elements set to have the same scalar value.
virtual const int * getIndices() const =0
Get indices of elements.
void append(const CoinPackedVectorBase &caboose)
Append a CoinPackedVector to the end.
void setTestForDuplicateIndex(bool test) const
Set to the argument value whether to test for duplicate indices in the vector whenever they can occur...
void setFullNonZero(int size, const double *elems, bool testForDuplicateIndex=COIN_DEFAULT_VALUE_FOR_DUPLICATE)
Indices are not specified and are taken to be 0,1,...,size-1, but only where non zero.
void swap(int i, int j)
Swap values in positions i and j of indices and elements.