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