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);
556 return (size_ > -2) ?
static_cast< CoinBigIndex >(size_) : static_cast< CoinBigIndex >((-size_) - 2);
562 size_ = (-size_) - 2;
567 return (size_ > -2) ? array_ : NULL;
573 inline void setSize(
int value)
579 inline void setSize(
long long value)
585 inline void switchOff()
594 alignment_ = alignment;
597 void setPersistence(
int flag,
int currentLength);
603 void extend(
int newSize);
605 void extend(
long long newSize);
615 void conditionalDelete();
634 array_ =
new char[size];
658 void reallyFreeArray();
691 return reinterpret_cast< double *
>((size_ > -2) ? array_ : NULL);
697 inline void setSize(
int value)
774 inline void setSize(
int value)
845 return reinterpret_cast< long double *
>((size_ > -2) ? array_ : NULL);
851 inline void setSize(
int value)
860 inline long double *conditionalNew(
CoinBigIndex sizeWanted)
922 return reinterpret_cast< int *
>((size_ > -2) ? array_ : NULL);
928 inline void setSize(
int value)
999 return reinterpret_cast< CoinBigIndex *
>((size_ > -2) ? array_ : NULL);
1076 return reinterpret_cast< unsigned int *
>((size_ > -2) ? array_ : NULL);
1082 inline void setSize(
int value)
1091 inline unsigned int *conditionalNew(
CoinBigIndex sizeWanted)
1153 return reinterpret_cast< void **
>((size_ > -2) ? array_ : NULL);
1159 inline void setSize(
int value)
1225 return size_ / lengthInBytes_;
1230 return reinterpret_cast< void **
>((size_ > -2) ? array_ : NULL);
1236 inline void setSize(
int value)
1239 size_ = value * lengthInBytes_;
1248 lengthInBytes_ = length;
1260 lengthInBytes_ = length;
1265 array_ =
new char[size * length];
1267 lengthInBytes_ = length;
1276 lengthInBytes_ = length;
1306 #ifndef COIN_PARTITIONS 1307 #define COIN_PARTITIONS 8 1315 return numberElementsPartition_[partition];
1320 return numberPartitions_;
1328 return startPartition_[partition];
1333 return startPartition_;
1342 inline void setNumElementsPartition(
int partition,
int value)
1346 if (numberPartitions_)
1347 numberElementsPartition_[partition] = value;
1353 numberElementsPartition_[partition] = value;
1356 void computeNumberElements();
1363 void setPartitions(
int number,
const int *starts);
1365 void clearAndReset();
1367 void clearAndKeep();
1369 void clearPartition(
int partition);
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.
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 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.
CoinArbitraryArrayWithLength(int length, int size)
Alternate Constructor - length in bytes - size_ -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...
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.
int numberPartitions_
Number of partitions (0 means off)
void reallyClear()
Clear even if in a bad way.
CoinUnsignedIntArrayWithLength & operator=(const CoinUnsignedIntArrayWithLength &rhs)
Assignment operator.
void add(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 sum of two indexed vectors.
void checkClear()
For debug check vector is clear i.e. no elements.
void zero(int index)
Makes nonzero tiny.
CoinArbitraryArrayWithLength & operator=(const CoinArbitraryArrayWithLength &rhs)
Assignment operator.
CoinBigIndexArrayWithLength()
Default constructor - NULL.
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.
CoinFactorizationLongDoubleArrayWithLength()
Default constructor - NULL.
CoinArrayWithLength(CoinBigIndex size)
Alternate Constructor - length in bytes - size_ -1.
CoinBigIndexArrayWithLength(const CoinBigIndexArrayWithLength *rhs)
Copy constructor.2.
void operator*=(double value)
multiply every entry by value
int * array() const
Get Array.
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
CoinVoidStarArrayWithLength()
Default constructor - NULL.
CoinBigIndexArrayWithLength(const CoinBigIndexArrayWithLength &rhs)
Copy constructor.
CoinIntArrayWithLength(int size)
Alternate Constructor - length in bytes - size_ -1.
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.
void empty()
Reset the vector (as if were just created an empty vector)
void gutsOfSetPackedVector(int size, int numberIndices, const int *inds, const double *elems)
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.
void gutsOfSetConstant(int size, const int *inds, double value)
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).
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.
void gutsOfSetVector(int size, const int *inds, const double *elems)
Copy internal data.
CoinVoidStarArrayWithLength(const CoinVoidStarArrayWithLength *rhs)
Copy constructor.2.
CoinArrayWithLength()
Default constructor - NULL.
CoinBigIndex rawSize() const
Get the size.
int offset_
Offset of array.
double * roundUpDouble(double *address)
CoinDoubleArrayWithLength & operator=(const CoinDoubleArrayWithLength &rhs)
Assignment operator.
CoinIntArrayWithLength()
Default constructor - NULL.
const char * array() const
Get Array.
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.
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.
CoinVoidStarArrayWithLength & operator=(const CoinVoidStarArrayWithLength &rhs)
Assignment operator.
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.
char * conditionalNew(CoinBigIndex sizeWanted)
Conditionally gets new array.
CoinVoidStarArrayWithLength(const CoinVoidStarArrayWithLength &rhs)
Copy constructor.
void setPacked()
Mark as packed.
CoinFactorizationLongDouble * version.
CoinFactorizationLongDoubleArrayWithLength(int size)
Alternate Constructor - length in bytes - size_ -1.
void createPacked(int number, const int *indices, const double *elements)
Create packed array.
int * getIndices()
Get element values.
CoinArbitraryArrayWithLength(const CoinArbitraryArrayWithLength &rhs)
Copy constructor.
CoinBigIndex capacity() const
Get the capacity (just read it)
CoinIndexedVector()
Default constructor.
CoinFactorizationDoubleArrayWithLength & operator=(const CoinFactorizationDoubleArrayWithLength &rhs)
Assignment operator.
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...
void setTempNumElementsPartition(int partition, int value)
Set the size of a partition (just for a tiny while)
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 setCapacity(int value)
#define COIN_INDEXED_TINY_ELEMENT
void operator/=(double value)
divide every entry by value (** 0 vanishes)
CoinDoubleArrayWithLength(const CoinDoubleArrayWithLength &rhs)
Copy constructor.
int getNumPartitions() const
Get number of partitions.
friend void CoinIndexedVectorUnitTest()
A function that tests the methods in the CoinIndexedVector class.
void insert(int index, double element)
Insert an element into the vector.
void ** array() const
Get Array.
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.