Go to the documentation of this file.
6 #ifndef CoinIndexedVector_H
7 #define CoinIndexedVector_H
11 #pragma warning(disable : 4786)
24 #define COIN_INDEXED_TINY_ELEMENT 1.0e-50
25 #define COIN_INDEXED_REALLY_TINY_ELEMENT 1.0e-100
27 #define COIN_INDEXED_TINY_ELEMENT 1.0e-35
28 #define COIN_INDEXED_REALLY_TINY_ELEMENT 1.0e-39
158 #ifndef CLP_NO_VECTOR
170 void borrowVector(
int size,
int numberIndices,
int *inds,
double *elems);
181 void setVector(
int numberIndices,
const int *inds,
const double *elems);
187 void setVector(
int size,
int numberIndices,
const int *inds,
const double *elems);
190 void setConstant(
int size,
const int *inds,
double elems);
193 void setFull(
int size,
const double *elems);
201 void insert(
int index,
double element);
212 void add(
int index,
double element);
260 int clean(
double tolerance);
284 int scan(
int start,
int end);
287 int scan(
double tolerance);
291 int scan(
int start,
int end,
double tolerance);
296 int scanAndPack(
int start,
int end,
double tolerance);
299 const double *elements);
302 const double *elements);
307 #ifndef CLP_NO_VECTOR
317 void swap(
int i,
int j);
338 #ifndef CLP_NO_VECTOR
469 #ifndef CLP_NO_VECTOR
482 const int *inds,
const double *elems);
484 const int *inds,
const double *elems);
486 const int *inds,
const double *elems);
489 const int *inds,
double value);
579 inline void setSize(
long long value)
605 void extend(
long long newSize);
691 return reinterpret_cast< double *
>((
size_ > -2) ?
array_ : NULL);
845 return reinterpret_cast< long double *
>((
size_ > -2) ?
array_ : NULL);
922 return reinterpret_cast< int *
>((
size_ > -2) ?
array_ : NULL);
1076 return reinterpret_cast< unsigned int *
>((
size_ > -2) ?
array_ : NULL);
1082 inline void setSize(
int value)
1153 return reinterpret_cast< void **
>((
size_ > -2) ?
array_ : NULL);
1159 inline void setSize(
int value)
1230 return reinterpret_cast< void **
>((
size_ > -2) ?
array_ : NULL);
1236 inline void setSize(
int value)
1265 array_ =
new char[size * length];
1306 #ifndef COIN_PARTITIONS
1307 #define COIN_PARTITIONS 8
1379 int scan(
int partition,
double tolerance = 0.0);
1431 int iBottom =
static_cast< int >(xx & 63);
1433 return address + ((64 - iBottom) >> 3);
#define CoinSizeofAsInt(type)
Cube Root.
CoinFactorizationLongDoubleArrayWithLength & operator=(const CoinFactorizationLongDoubleArrayWithLength &rhs)
Assignment operator.
int isApproximatelyEqual(const CoinIndexedVector &rhs, double tolerance=1.0e-8) const
Equal with a tolerance (returns -1 or position of inequality).
void CoinIndexedVectorUnitTest()
A function that tests the methods in the CoinIndexedVector class.
CoinIntArrayWithLength(const CoinIntArrayWithLength &rhs)
Copy constructor.
int offset_
Offset to get where new allocated array.
void clearPartition(int partition)
Clear a partition.
int cleanAndPackSafe(double tolerance)
Same but packs down and is safe (i.e. if order is odd)
void allocate(const CoinArrayWithLength &rhs, CoinBigIndex numberBytes)
Assignment with length - does not copy.
void setPackedMode(bool yesNo)
Sets packed mode.
int * getIndices()
Get element values.
void zero(int index)
Makes nonzero tiny.
void switchOff()
Set the size to -1.
int numberPartitions_
Number of partitions (0 means off)
CoinUnsignedIntArrayWithLength(const CoinUnsignedIntArrayWithLength *rhs)
Copy constructor.2.
double * denseVector() const
Get the vector as a dense vector.
CoinFactorizationLongDoubleArrayWithLength(int size, int mode)
Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed.
CoinFactorizationDoubleArrayWithLength & operator=(const CoinFactorizationDoubleArrayWithLength &rhs)
Assignment operator.
CoinVoidStarArrayWithLength(const CoinVoidStarArrayWithLength &rhs)
Copy constructor.
CoinBigIndexArrayWithLength(CoinBigIndex size, int mode)
Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed.
void clear()
Reset the vector (as if were just created an empty vector). This leaves arrays!
void setCapacity()
Set the capacity to >=0 if <=-2.
CoinBigIndexArrayWithLength(const CoinBigIndexArrayWithLength *rhs)
Copy constructor.2.
CoinArrayWithLength & operator=(const CoinArrayWithLength &rhs)
Assignment operator.
CoinArrayWithLength()
Default constructor - NULL.
CoinDoubleArrayWithLength()
Default constructor - NULL.
CoinBigIndex getSize() const
Get the size.
CoinArbitraryArrayWithLength(int length, int size)
Alternate Constructor - length in bytes - size_ -1.
void setSize(int value)
Set the size.
CoinArbitraryArrayWithLength & operator=(const CoinArbitraryArrayWithLength &rhs)
Assignment operator.
friend void CoinIndexedVectorUnitTest()
A function that tests the methods in the CoinIndexedVector class.
int nElements_
Size of indices and packed elements vectors.
void insert(int index, double element)
Insert an element into the vector.
CoinIntArrayWithLength(int size)
Alternate Constructor - length in bytes - size_ -1.
bool packedMode_
If true then is operating in packed mode.
void operator*=(double value)
multiply every entry by value
#define COIN_INDEXED_TINY_ELEMENT
CoinFactorizationLongDoubleArrayWithLength(const CoinFactorizationLongDoubleArrayWithLength *rhs)
Copy constructor.2.
CoinBigIndex getSize() const
Get the size.
CoinPartitionedVector()
Default constructor.
CoinIntArrayWithLength(const CoinIntArrayWithLength *rhs)
Copy constructor.2.
CoinBigIndex getSize() const
Get the size.
CoinVoidStarArrayWithLength()
Default constructor - NULL.
int * indices_
Vector indices.
int getMinIndex() const
Get value of minimum index.
void setNumElements(int value)
Set the size.
void operator/=(double value)
divide every entry by value (** 0 vanishes)
int * conditionalNew(CoinBigIndex sizeWanted)
Conditionally gets new array.
void setSize(int value)
Set the size.
CoinDoubleArrayWithLength(int size)
Alternate Constructor - length in bytes - size_ -1.
char * conditionalNew(CoinBigIndex sizeWanted)
Conditionally gets new array.
~CoinIndexedVector()
Destructor.
void setNumElementsPartition(int partition, int value)
Set the size of a partition.
CoinBigIndex rawSize() const
Get the size.
CoinIndexedVector operator-(const CoinIndexedVector &op2)
Return the difference of two indexed vectors.
void truncate(int newSize)
Throw away all entries in rows >= newSize.
void ** array() const
Get Array.
double * array() const
Get Array.
~CoinPartitionedVector()
Destructor.
CoinFactorizationDouble * array() const
Get Array.
void print() const
Scan dense region from start to < end and set up indices returns number found.
int clean(double tolerance)
set all small values to zero and return number remaining
void setPartitions(int number, const int *starts)
Setup partitions (needs end as well)
void setSize(int value)
Set the size.
CoinBigIndex getSize() const
Get the size.
CoinFactorizationDoubleArrayWithLength()
Default constructor - NULL.
void quickAddNonZero(int index, double element)
Insert or if exists add an element into the vector Any resulting zero elements will be made tiny.
CoinBigIndex getSize() const
Get the size.
void setVector(int numberIndices, const int *inds, const double *elems)
Set vector numberIndices, indices, and elements.
void operator+=(double value)
add value to every entry
void getArray(CoinBigIndex size)
Get array with alignment.
double & operator[](int i) const
Access the i'th element of the full storage vector.
CoinUnsignedIntArrayWithLength(int size, int mode)
Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed.
int getMaxIndex() const
Get value of maximum index.
void gutsOfSetPackedVector(int size, int numberIndices, const int *inds, const double *elems)
int * array() const
Get Array.
void gutsOfSetConstant(int size, const int *inds, double value)
CoinFactorizationLongDouble * version.
CoinIntArrayWithLength(int size, int mode)
Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed.
int getNumPartitions() const
Get number of partitions.
int startPartition_[COIN_PARTITIONS+1]
Starts.
CoinArbitraryArrayWithLength(int length=1)
Default constructor - NULL.
void setSize(int value)
Set the size.
void gutsOfSetVector(int size, const int *inds, const double *elems)
Copy internal data.
CoinIndexedVector operator+(const CoinIndexedVector &op2)
Return the sum of two indexed vectors.
void ** conditionalNew(CoinBigIndex sizeWanted)
Conditionally gets new array.
void createUnpacked(int number, const int *indices, const double *elements)
Create unpacked array.
Pointer with length in bytes.
void computeNumberElements()
Add up number of elements in partitions.
CoinDoubleArrayWithLength(const CoinDoubleArrayWithLength *rhs)
Copy constructor.2.
void checkClear()
For debug check vector is clear i.e. no elements.
unsigned int * array() const
Get Array.
CoinBigIndex * array() const
Get Array.
int offset_
Offset of array.
void append(const CoinPackedVectorBase &caboose)
Append a CoinPackedVector to the end.
void add(int index, double element)
Insert or if exists add an element into the vector Any resulting zero elements will be made tiny.
void setSize(int value)
Set the size.
CoinDoubleArrayWithLength(const CoinDoubleArrayWithLength &rhs)
Copy constructor.
void checkClean()
For debug check vector is clean i.e. elements match indices.
long double * conditionalNew(CoinBigIndex sizeWanted)
Conditionally gets new array.
CoinPartitionedVector & operator=(const CoinPartitionedVector &)
Assignment operator.
CoinVoidStarArrayWithLength & operator=(const CoinVoidStarArrayWithLength &rhs)
Assignment operator.
void getCapacity(CoinBigIndex numberBytes, CoinBigIndex numberIfNeeded=-1)
Get enough space (if more needed then do at least needed)
CoinVoidStarArrayWithLength(int size, int mode)
Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed.
int alignment_
Alignment wanted (power of 2)
void switchOn(int alignment=3)
Set the size to -2 and alignment.
double CoinFactorizationDouble
CoinFactorizationDouble * conditionalNew(CoinBigIndex sizeWanted)
Conditionally gets new array.
void returnVector()
Return ownership of the arguments to this vector.
CoinVoidStarArrayWithLength(const CoinVoidStarArrayWithLength *rhs)
Copy constructor.2.
void setIndexVector(int *array)
For very temporary use when user needs to borrow an index vector.
void setPacked()
Mark as packed.
int numberElementsPartition_[COIN_PARTITIONS]
Size of indices in a partition.
CoinBigIndex getSize() const
Get the size.
CoinUnsignedIntArrayWithLength & operator=(const CoinUnsignedIntArrayWithLength &rhs)
Assignment operator.
void setPersistence(int flag, int currentLength)
Does what is needed to set persistence.
CoinFactorizationDoubleArrayWithLength(int size, int mode)
Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed.
bool switchedOn() const
See if persistence already on.
int cleanAndPack(double tolerance)
Same but packs down.
CoinDoubleArrayWithLength & operator=(const CoinDoubleArrayWithLength &rhs)
Assignment operator.
CoinIndexedVector()
Default constructor.
void createPacked(int number, const int *indices, const double *elements)
Create packed array.
void sort()
Sort the indexed storage vector (increasing indices).
void clear()
Zero out array.
void compact()
Add up number of elements in partitions and pack and get rid of partitions.
CoinUnsignedIntArrayWithLength(const CoinUnsignedIntArrayWithLength &rhs)
Copy constructor.
void swap(int i, int j)
Swap values in positions i and j of indices and elements.
void borrowVector(int size, int numberIndices, int *inds, double *elems)
Borrow ownership of the arguments to this vector.
void checkClear()
For debug check vector is clear i.e. no elements.
void copy(const CoinArrayWithLength &rhs, int numberBytes=-1)
Assignment with length (if -1 use internal length)
void reallyFreeArray()
Really get rid of array with alignment.
Abstract base class for various sparse vectors.
void setSize(int value)
Set the size.
CoinBigIndex capacity() const
Get the capacity (just read it)
CoinIndexedVector & operator=(const CoinIndexedVector &)
Assignment operator.
void setDenseVector(double *array)
For very temporary use when user needs to borrow a dense vector.
void operator-=(double value)
subtract value from every entry
void setSize(int value)
Set the size.
CoinUnsignedIntArrayWithLength(int size)
Alternate Constructor - length in bytes - size_ -1.
bool operator==(const CoinPackedVectorBase &rhs) const
Equal.
CoinBigIndex lengthInBytes_
Length in bytes.
CoinIndexedVector operator*(const CoinIndexedVector &op2)
Return the element-wise product of two indexed vectors.
CoinFactorizationLongDoubleArrayWithLength(int size)
Alternate Constructor - length in bytes - size_ -1.
void expand()
This is mainly for testing - goes from packed to indexed.
void ** array() const
Get Array.
void setTempNumElementsPartition(int partition, int value)
Set the size of a partition (just for a tiny while)
CoinBigIndex getSize() const
Get the size.
CoinFactorizationLongDoubleArrayWithLength(const CoinFactorizationLongDoubleArrayWithLength &rhs)
Copy constructor.
CoinArbitraryArrayWithLength(const CoinArbitraryArrayWithLength &rhs)
Copy constructor.
int startPartition(int partition) const
Get starts.
CoinIntArrayWithLength()
Default constructor - NULL.
CoinFactorizationDouble * version.
CoinBigIndexArrayWithLength()
Default constructor - NULL.
const int * getIndices() const
Get indices of elements.
void swap(CoinArrayWithLength &other)
Swaps memory between two members.
void setSize(CoinBigIndex value)
Set the size.
int scan()
Scan dense region and set up indices (returns number found)
double * roundUpDouble(double *address)
void quickAdd(int index, double element)
Insert or if exists add an element into the vector Any resulting zero elements will be made tiny.
int capacity_
Amount of memory allocated for indices_, and elements_.
CoinBigIndex getSize() const
Get the size.
const double COIN_DBL_MIN
void empty()
Reset the vector (as if were just created an empty vector)
void setCapacity(int value)
int getNumElements() const
Get the size.
CoinIntArrayWithLength & operator=(const CoinIntArrayWithLength &rhs)
Assignment operator.
void conditionalDelete()
Conditionally deletes.
CoinVoidStarArrayWithLength(int size)
Alternate Constructor - length in bytes - size_ -1.
CoinFactorizationLongDoubleArrayWithLength()
Default constructor - NULL.
int capacity() const
capacity returns the size which could be accomodated without having to reallocate storage.
void setFull(int size, const double *elems)
Indices are not specified and are taken to be 0,1,...,size-1.
void createOneUnpackedElement(int index, double element)
Create unpacked singleton.
const int * startPartitions() const
Get starts.
int scanAndPack()
These are same but pack down.
CoinIndexedVector operator/(const CoinIndexedVector &op2)
Return the element-wise ratio of two indexed vectors (0.0/0.0 => 0.0) (0 vanishes)
void clearAndKeep()
Reset the vector (as if were just created an empty vector). Keeps partitions.
void print() const
Print out.
bool operator!=(const CoinPackedVectorBase &rhs) const
Not equal.
void checkClean()
For debug check vector is clean i.e. elements match indices.
CoinBigIndexArrayWithLength(CoinBigIndex size)
Alternate Constructor - length in bytes - size_ -1.
void reserve(int n)
Reserve space.
void sort()
Sort the indexed storage vector (increasing indices).
void setSize(int value)
Set the size.
unsigned int * conditionalNew(CoinBigIndex sizeWanted)
Conditionally gets new array.
CoinBigIndex * conditionalNew(CoinBigIndex sizeWanted)
Conditionally gets new array.
CoinBigIndex size_
Size of array in bytes.
CoinArrayWithLength(CoinBigIndex size)
Alternate Constructor - length in bytes - size_ -1.
CoinBigIndexArrayWithLength & operator=(const CoinBigIndexArrayWithLength &rhs)
Assignment operator.
CoinFactorizationDoubleArrayWithLength(const CoinFactorizationDoubleArrayWithLength *rhs)
Copy constructor.2.
CoinFactorizationDoubleArrayWithLength(int size)
Alternate Constructor - length in bytes - size_ -1.
CoinArbitraryArrayWithLength(const CoinArbitraryArrayWithLength *rhs)
Copy constructor.2.
bool packedMode() const
Gets packed mode.
double * elements_
Vector elements.
void extend(int newSize)
Extend a persistent array keeping data (size in bytes)
void reserve(int n)
Reserve space.
void setConstant(int size, const int *inds, double elems)
Elements set to have the same scalar value.
CoinUnsignedIntArrayWithLength()
Default constructor - NULL.
CoinFactorizationDoubleArrayWithLength(const CoinFactorizationDoubleArrayWithLength &rhs)
Copy constructor.
void copy(const CoinIndexedVector &rhs, double multiplier=1.0)
Copy the contents of one vector into another.
double * conditionalNew(CoinBigIndex sizeWanted)
Conditionally gets new array.
const char * array() const
Get Array.
CoinDoubleArrayWithLength(int size, int mode)
Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed.
void reallyClear()
Clear even if in a bad way.
void quickInsert(int index, double element)
Insert a nonzero element into the vector.
void clearAndReset()
Reset the vector (as if were just created an empty vector). Gets rid of partitions.
CoinBigIndex getSize() const
Get the size.
void setElement(int index, double element)
Set an existing element in the indexed vector The first argument is the "index" into the elements() a...
long double * array() const
Get Array.
CoinArbitraryArrayWithLength(int length, int size, int mode)
Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed.
int getNumElements() const
Get the size.
~CoinArrayWithLength()
Destructor.
char * conditionalNew(CoinBigIndex length, CoinBigIndex sizeWanted)
Conditionally gets new array.
CoinBigIndexArrayWithLength(const CoinBigIndexArrayWithLength &rhs)
Copy constructor.