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
148 #ifndef CLP_NO_VECTOR
160 void borrowVector(
int size,
int numberIndices,
int* inds,
double* elems);
171 void setVector(
int numberIndices,
const int * inds,
const double * elems);
177 void setVector(
int size,
int numberIndices,
const int * inds,
const double * elems);
180 void setConstant(
int size,
const int * inds,
double elems);
183 void setFull(
int size,
const double * elems);
191 void insert(
int index,
double element);
202 void add(
int index,
double element);
250 int clean(
double tolerance);
272 int scan(
int start,
int end);
275 int scan(
double tolerance);
279 int scan(
int start,
int end,
double tolerance);
284 int scanAndPack(
int start,
int end,
double tolerance);
287 const double * elements);
290 const double * elements);
295 #ifndef CLP_NO_VECTOR
305 void swap(
int i,
int j);
326 #ifndef CLP_NO_VECTOR
448 #ifndef CLP_NO_VECTOR
461 const int * inds,
const double * elems);
463 const int * inds,
const double * elems);
465 const int * inds,
const double * elems);
468 const int * inds,
double value);
526 {
return size_!=-1; }
576 {
array_=
new char [size];}
601 void getCapacity(
int numberBytes,
int numberIfNeeded=-1);
629 {
return reinterpret_cast<double *
> ((
size_>-2) ?
array_ : NULL); }
737 {
return reinterpret_cast<long double *
> ((
size_>-2) ?
array_ : NULL); }
791 {
return reinterpret_cast<int *
> ((
size_>-2) ?
array_ : NULL); }
899 {
return reinterpret_cast<unsigned int *
> ((
size_>-2) ?
array_ : NULL); }
953 {
return reinterpret_cast<void **
> ((
size_>-2) ?
array_ : NULL); }
1007 {
return reinterpret_cast<void **
> ((
size_>-2) ?
array_ : NULL); }
1012 inline void setSize(
int value)
1060 #ifndef COIN_PARTITIONS
1061 #define COIN_PARTITIONS 8
1116 int scan(
int partition,
double tolerance=0.0);
int getMaxIndex() const
Get value of maximum index.
~CoinArrayWithLength()
Destructor.
void extend(int newSize)
Extend a persistent array keeping data (size in bytes)
void setVector(int numberIndices, const int *inds, const double *elems)
Set vector numberIndices, indices, and elements.
void CoinIndexedVectorUnitTest()
A function that tests the methods in the CoinIndexedVector class.
void sortIncrIndex()
Sort the indexed storage vector (increasing indices).
CoinFactorizationLongDoubleArrayWithLength()
Default constructor - NULL.
CoinIndexedVector operator*(const CoinIndexedVector &op2)
Return the element-wise product of two indexed vectors.
void setSize(int value)
Set the size.
void setCapacity()
Set the capacity to >=0 if <=-2.
CoinArrayWithLength & operator=(const CoinArrayWithLength &rhs)
Assignment operator.
CoinFactorizationDouble * conditionalNew(int sizeWanted)
Conditionally gets new array.
void ** array() const
Get Array.
void conditionalDelete()
Conditionally deletes.
CoinUnsignedIntArrayWithLength(const CoinUnsignedIntArrayWithLength *rhs)
Copy constructor.2.
CoinFactorizationDoubleArrayWithLength()
Default constructor - NULL.
void operator/=(double value)
divide every entry by value (** 0 vanishes)
void setFull(int size, const double *elems)
Indices are not specified and are taken to be 0,1,...,size-1.
void swap(CoinArrayWithLength &other)
Swaps memory between two members.
void setSize(int value)
Set the size.
void createUnpacked(int number, const int *indices, const double *elements)
Create unpacked array.
void setSize(int value)
Set the size.
CoinIndexedVector()
Default constructor.
void reserve(int n)
Reserve space.
CoinIntArrayWithLength & operator=(const CoinIntArrayWithLength &rhs)
Assignment operator.
int getSize() const
Get the size.
void sort()
Sort the indexed storage vector (increasing indices).
void setCapacity(int value)
Reserve space.
void operator-=(double value)
subtract value from every entry
void sortDecrElement()
Sort the indexed storage vector (increasing indices).
void checkClear()
For debug check vector is clear i.e. no elements.
int numberPartitions_
Number of partitions (0 means off)
int capacity_
Amount of memory allocated for indices_, and elements_.
int getSize() const
Get the size.
CoinArbitraryArrayWithLength(const CoinArbitraryArrayWithLength &rhs)
Copy constructor.
void checkClean()
For debug check vector is clean i.e. elements match indices.
int getNumElements() const
Get the size.
CoinBigIndexArrayWithLength(int size)
Alternate Constructor - length in bytes - size_ -1.
void zero(int index)
Makes nonzero tiny.
CoinDoubleArrayWithLength(int size)
Alternate Constructor - length in bytes - size_ -1.
CoinIndexedVector & operator=(const CoinIndexedVector &)
Assignment operator.
CoinBigIndexArrayWithLength(const CoinBigIndexArrayWithLength *rhs)
Copy constructor.2.
CoinVoidStarArrayWithLength(const CoinVoidStarArrayWithLength &rhs)
Copy constructor.
CoinArbitraryArrayWithLength(const CoinArbitraryArrayWithLength *rhs)
Copy constructor.2.
int cleanAndPackSafe(double tolerance)
Same but packs down and is safe (i.e. if order is odd)
CoinFactorizationDoubleArrayWithLength & operator=(const CoinFactorizationDoubleArrayWithLength &rhs)
Assignment operator.
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 numberElementsPartition_[COIN_PARTITIONS]
Size of indices in a partition.
void expand()
This is mainly for testing - goes from packed to indexed.
CoinVoidStarArrayWithLength & operator=(const CoinVoidStarArrayWithLength &rhs)
Assignment operator.
void clearAndKeep()
Reset the vector (as if were just created an empty vector). Keeps partitions.
int * array() const
Get Array.
bool packedMode() const
Gets packed mode.
CoinFactorizationDoubleArrayWithLength(const CoinFactorizationDoubleArrayWithLength *rhs)
Copy constructor.2.
void setSize(int value)
Set the size.
void reserve(int n)
Reserve space.
CoinFactorizationDoubleArrayWithLength(const CoinFactorizationDoubleArrayWithLength &rhs)
Copy constructor.
int isApproximatelyEqual(const CoinIndexedVector &rhs, double tolerance=1.0e-8) const
Equal with a tolerance (returns -1 or position of inequality).
CoinUnsignedIntArrayWithLength(const CoinUnsignedIntArrayWithLength &rhs)
Copy constructor.
void sortIncrElement()
Sort the indexed storage vector (increasing indices).
CoinArbitraryArrayWithLength(int length, int size)
Alternate Constructor - length in bytes - size_ -1.
bool operator==(const CoinPackedVectorBase &rhs) const
Equal.
CoinArrayWithLength()
Default constructor - NULL.
void sortDecrIndex()
Sort the indexed storage vector (increasing indices).
double * array() const
Get Array.
CoinIndexedVector operator-(const CoinIndexedVector &op2)
Return the difference of two indexed vectors.
CoinFactorizationLongDoubleArrayWithLength(const CoinFactorizationLongDoubleArrayWithLength &rhs)
Copy constructor.
void checkClear()
For debug check vector is clear i.e. no elements.
void checkClean()
For debug check vector is clean i.e. elements match indices.
void setSize(int value)
Set the size.
void computeNumberElements()
Add up number of elements in partitions.
void switchOff()
Set the size to -1.
double * elements_
Vector elements.
void returnVector()
Return ownership of the arguments to this vector.
~CoinIndexedVector()
Destructor.
CoinIndexedVector operator+(const CoinIndexedVector &op2)
Return the sum of two indexed vectors.
CoinDoubleArrayWithLength()
Default constructor - NULL.
void getArray(int size)
Get array with alignment.
void setPackedMode(bool yesNo)
Sets packed mode.
CoinBigIndexArrayWithLength()
Default constructor - NULL.
Abstract base class for various sparse vectors.
double * denseVector() const
Get the vector as a dense vector.
double & operator[](int i) const
Access the i'th element of the full storage vector.
typedef void(COINLINKAGE_CB *clp_callback)(Clp_Simplex *model
typedef for user call back.
void insert(int index, double element)
Insert an element into the vector.
int startPartition(int partition) const
Get starts.
CoinBigIndexArrayWithLength & operator=(const CoinBigIndexArrayWithLength &rhs)
Assignment operator.
CoinDoubleArrayWithLength & operator=(const CoinDoubleArrayWithLength &rhs)
Assignment operator.
void borrowVector(int size, int numberIndices, int *inds, double *elems)
Borrow ownership of the arguments to this vector.
void copy(const CoinArrayWithLength &rhs, int numberBytes=-1)
Assignment with length (if -1 use internal length)
void print() const
Print out.
void setPersistence(int flag, int currentLength)
Does what is needed to set persistence.
CoinUnsignedIntArrayWithLength & operator=(const CoinUnsignedIntArrayWithLength &rhs)
Assignment operator.
void setSize(int value)
Set the size.
double CoinFactorizationDouble
CoinPartitionedVector & operator=(const CoinPartitionedVector &)
Assignment operator.
Pointer with length in bytes.
void operator+=(double value)
add value to every entry
int getSize() const
Get the size.
const double COIN_DBL_MIN
void operator*=(double value)
multiply every entry by value
char * conditionalNew(long sizeWanted)
Conditionally gets new array.
CoinDoubleArrayWithLength(int size, int mode)
Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed...
CoinFactorizationDouble * array() const
Get Array.
void createOneUnpackedElement(int index, double element)
Create unpacked singleton.
CoinVoidStarArrayWithLength(const CoinVoidStarArrayWithLength *rhs)
Copy constructor.2.
CoinBigIndex * 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 getSize() const
Get the size.
CoinIndexedVector operator/(const CoinIndexedVector &op2)
Return the element-wise ratio of two indexed vectors (0.0/0.0 => 0.0) (0 vanishes) ...
int * conditionalNew(int sizeWanted)
Conditionally gets new array.
unsigned int * array() const
Get Array.
int capacity() const
capacity returns the size which could be accomodated without having to reallocate storage...
void clear()
Zero out array.
~CoinPartitionedVector()
Destructor.
CoinUnsignedIntArrayWithLength()
Default constructor - NULL.
int getSize() const
Get the size.
int getSize() const
Get the size.
CoinIntArrayWithLength()
Default constructor - NULL.
void getCapacity(int numberBytes, int numberIfNeeded=-1)
Get enough space (if more needed then do at least needed)
CoinFactorizationLongDoubleArrayWithLength(const CoinFactorizationLongDoubleArrayWithLength *rhs)
Copy constructor.2.
void gutsOfSetPackedVector(int size, int numberIndices, const int *inds, const double *elems)
Copy internal data.
void ** array() const
Get Array.
long double * conditionalNew(int sizeWanted)
Conditionally gets new array.
friend void CoinIndexedVectorUnitTest()
A function that tests the methods in the CoinIndexedVector class.
void compact()
Add up number of elements in partitions and pack and get rid of partitions.
int lengthInBytes_
Length in bytes.
void switchOn(int alignment=3)
Set the size to -2 and alignment.
int scanAndPack()
These are same but pack down.
void swap(int i, int j)
Swap values in positions i and j of indices and elements.
int * getIndices()
Get element values.
void clearAndReset()
Reset the vector (as if were just created an empty vector). Gets rid of partitions.
int nElements_
Size of indices and packed elements vectors.
int getSize() const
Get the size.
void clearPartition(int partition)
Clear a partition.
CoinVoidStarArrayWithLength()
Default constructor - NULL.
int getSize() const
Get the size.
const char * array() const
Get Array.
CoinFactorizationLongDoubleArrayWithLength(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.
void setPacked()
Mark as packed.
void setSize(int value)
Set the size.
void setNumElementsPartition(int partition, int value)
Set the size of a partition.
int clean(double tolerance)
set all small values to zero and return number remaining
CoinIntArrayWithLength(const CoinIntArrayWithLength *rhs)
Copy constructor.2.
void setPartitions(int number, const int *starts)
Setup partitions (needs end as well)
CoinIntArrayWithLength(const CoinIntArrayWithLength &rhs)
Copy constructor.
void gutsOfSetConstant(int size, const int *inds, double value)
Copy internal data.
void setSize(int value)
Set the size.
void createPacked(int number, const int *indices, const double *elements)
Create packed array.
void quickInsert(int index, double element)
Insert a nonzero element into the vector.
bool operator!=(const CoinPackedVectorBase &rhs) const
Not equal.
CoinUnsignedIntArrayWithLength(int size, int mode)
Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed...
void append(const CoinPackedVectorBase &caboose)
Append a CoinPackedVector to the end.
int getSize() const
Get the size.
void setNumElements(int value)
Set the size.
unsigned int * conditionalNew(int sizeWanted)
Conditionally gets new array.
int getNumPartitions() const
Get number of partitions.
CoinBigIndexArrayWithLength(int size, int mode)
Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed...
CoinArrayWithLength(int size)
Alternate Constructor - length in bytes - size_ -1.
void setIndexVector(int *array)
For very temporary use when user needs to borrow an index vector.
void setElement(int index, double element)
Set an existing element in the indexed vector The first argument is the "index" into the elements() a...
CoinFactorizationLongDouble * version.
void print() const
Scan dense region from start to < end and set up indices returns number found.
CoinFactorizationDoubleArrayWithLength(int size)
Alternate Constructor - length in bytes - size_ -1.
void empty()
Reset the vector (as if were just created an empty vector)
void reallyFreeArray()
Really get rid of array with alignment.
void add(int index, double element)
Insert or if exists add an element into the vector Any resulting zero elements will be made tiny...
CoinArbitraryArrayWithLength & operator=(const CoinArbitraryArrayWithLength &rhs)
Assignment operator.
CoinBigIndex * conditionalNew(int sizeWanted)
Conditionally gets new array.
CoinDoubleArrayWithLength(const CoinDoubleArrayWithLength &rhs)
Copy constructor.
CoinArbitraryArrayWithLength(int length=1)
Default constructor - NULL.
CoinDoubleArrayWithLength(const CoinDoubleArrayWithLength *rhs)
Copy constructor.2.
void setConstant(int size, const int *inds, double elems)
Elements set to have the same scalar value.
CoinUnsignedIntArrayWithLength(int size)
Alternate Constructor - length in bytes - size_ -1.
CoinIntArrayWithLength(int size, int mode)
Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed...
CoinBigIndex size_
Size of array in bytes.
const int * startPartitions() const
Get starts.
void ** conditionalNew(int sizeWanted)
Conditionally gets new array.
int rawSize() const
Get the size.
void allocate(const CoinArrayWithLength &rhs, int numberBytes)
Assignment with length - does not copy.
int alignment_
Alignment wanted (power of 2)
CoinFactorizationDoubleArrayWithLength(int size, int mode)
Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed...
void setDenseVector(double *array)
For very temporary use when user needs to borrow a dense vector.
int offset_
Offset of array.
CoinIntArrayWithLength(int size)
Alternate Constructor - length in bytes - size_ -1.
int capacity() const
Get the capacity (just read it)
double * conditionalNew(int sizeWanted)
Conditionally gets new array.
CoinFactorizationDouble * version.
void gutsOfSetVector(int size, const int *inds, const double *elems)
Copy internal data.
void setTempNumElementsPartition(int partition, int value)
Set the size of a partition (just for a tiny while)
bool packedMode_
If true then is operating in packed mode.
void sort()
Sort the indexed storage vector (increasing indices).
long double * array() const
Get Array.
void truncate(int newSize)
Throw away all entries in rows >= newSize.
int offset_
Offset to get where new allocated array.
int getMinIndex() const
Get value of minimum index.
CoinFactorizationLongDoubleArrayWithLength & operator=(const CoinFactorizationLongDoubleArrayWithLength &rhs)
Assignment operator.
CoinVoidStarArrayWithLength(int size, int mode)
Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed...
void setSize(int value)
Set the size.
#define COIN_INDEXED_TINY_ELEMENT
void quickAddNonZero(int index, double element)
Insert or if exists add an element into the vector Any resulting zero elements will be made tiny...
void copy(const CoinIndexedVector &rhs, double multiplier=1.0)
Copy the contents of one vector into another.
void sortPacked()
Sort the indexed storage vector (increasing indices).
int startPartition_[COIN_PARTITIONS+1]
Starts.
#define CoinSizeofAsInt(type)
Cube Root.
const int * getIndices() const
Get indices of elements.
int getNumElements() const
Get the size.
CoinVoidStarArrayWithLength(int size)
Alternate Constructor - length in bytes - size_ -1.
char * conditionalNew(int length, int sizeWanted)
Conditionally gets new array.
CoinBigIndexArrayWithLength(const CoinBigIndexArrayWithLength &rhs)
Copy constructor.
CoinPartitionedVector()
Default constructor.
int cleanAndPack(double tolerance)
Same but packs down.
void clear()
Reset the vector (as if were just created an empty vector). This leaves arrays!
CoinFactorizationLongDoubleArrayWithLength(int size)
Alternate Constructor - length in bytes - size_ -1.
int * indices_
Vector indices.
int scan()
Scan dense region and set up indices (returns number found)