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);
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.
void ** array() const
Get Array.
void conditionalDelete()
Conditionally deletes.
CoinUnsignedIntArrayWithLength(const CoinUnsignedIntArrayWithLength *rhs)
Copy constructor.2.
void setSize(CoinBigIndex value)
Set the size.
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.
CoinBigIndexArrayWithLength(CoinBigIndex size, int mode)
Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed...
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.
long double * conditionalNew(CoinBigIndex sizeWanted)
Conditionally gets new array.
char * conditionalNew(CoinBigIndex length, CoinBigIndex sizeWanted)
Conditionally gets new array.
void getArray(CoinBigIndex size)
Get array with alignment.
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_.
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.
void zero(int index)
Makes nonzero tiny.
void reallyClear()
Clear even if in a bad way.
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.
CoinBigIndex getSize() const
Get the size.
void allocate(const CoinArrayWithLength &rhs, CoinBigIndex numberBytes)
Assignment with length - does not copy.
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.
CoinArrayWithLength(CoinBigIndex size)
Alternate Constructor - length in bytes - size_ -1.
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.
unsigned int * conditionalNew(CoinBigIndex sizeWanted)
Conditionally gets new array.
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 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.
CoinBigIndex getSize() const
Get the size.
double & operator[](int i) const
Access the i'th element of the full storage vector.
void ** conditionalNew(CoinBigIndex sizeWanted)
Conditionally gets new array.
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.
CoinBigIndex capacity() const
Get the capacity (just read it)
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
const double COIN_DBL_MIN
void operator*=(double value)
multiply every entry by value
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...
CoinBigIndex 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) ...
unsigned int * array() const
Get Array.
CoinBigIndex getSize() const
Get the size.
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.
CoinIntArrayWithLength()
Default constructor - NULL.
CoinFactorizationLongDoubleArrayWithLength(const CoinFactorizationLongDoubleArrayWithLength *rhs)
Copy constructor.2.
CoinBigIndex * conditionalNew(CoinBigIndex sizeWanted)
Conditionally gets new array.
void gutsOfSetPackedVector(int size, int numberIndices, const int *inds, const double *elems)
Copy internal data.
void ** array() const
Get 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.
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.
void clearPartition(int partition)
Clear a partition.
CoinVoidStarArrayWithLength()
Default constructor - NULL.
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.
CoinBigIndex getSize() const
Get the size.
int clean(double tolerance)
set all small values to zero and return number remaining
double * conditionalNew(CoinBigIndex sizeWanted)
Conditionally gets new array.
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 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.
void setNumElements(int value)
Set the size.
int getNumPartitions() const
Get number of partitions.
CoinBigIndex getSize() const
Get the size.
CoinBigIndex lengthInBytes_
Length in bytes.
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.
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.
char * conditionalNew(CoinBigIndex sizeWanted)
Conditionally gets new array.
CoinIntArrayWithLength(int size, int mode)
Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed...
void getCapacity(CoinBigIndex numberBytes, CoinBigIndex numberIfNeeded=-1)
Get enough space (if more needed then do at least needed)
CoinBigIndex size_
Size of array in bytes.
CoinBigIndex rawSize() const
Get the size.
const int * startPartitions() const
Get starts.
CoinBigIndex getSize() const
Get the size.
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.
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)
CoinBigIndexArrayWithLength(CoinBigIndex size)
Alternate Constructor - length in bytes - size_ -1.
bool packedMode_
If true then is operating in packed mode.
void sort()
Sort the indexed storage vector (increasing indices).
CoinBigIndex getSize() const
Get the size.
long double * array() const
Get Array.
CoinBigIndex getSize() const
Get the size.
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.
int * conditionalNew(CoinBigIndex sizeWanted)
Conditionally gets new array.
double * roundUpDouble(double *address)
#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...
CoinFactorizationDouble * conditionalNew(CoinBigIndex sizeWanted)
Conditionally gets new array.
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.
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)