11#ifndef __RD_DISCRETE_VALUE_VECT_20050124__
12#define __RD_DISCRETE_VALUE_VECT_20050124__
14#include <boost/smart_ptr.hpp>
26 typedef boost::shared_array<std::uint32_t>
DATA_SPTR;
39 : d_type(valType), d_length(length) {
40 d_bitsPerVal = (1 <<
static_cast<unsigned int>(valType));
42 d_numInts = (length + d_valsPerInt - 1) / d_valsPerInt;
43 d_mask = ((1 << d_bitsPerVal) - 1);
44 auto *data =
new std::uint32_t[d_numInts];
45 memset(
static_cast<void *
>(data), 0, d_numInts *
sizeof(std::uint32_t));
56 initFromText(pkl.c_str(),
static_cast<unsigned int>(pkl.size()));
60 initFromText(pkl, len);
66 unsigned int getVal(
unsigned int i)
const;
69 int operator[](
unsigned int idx)
const {
return getVal(idx); }
76 void setVal(
unsigned int i,
unsigned int val);
84 unsigned int size()
const {
return getLength(); }
127 unsigned int d_bitsPerVal;
128 unsigned int d_valsPerInt;
129 unsigned int d_numInts;
130 unsigned int d_length;
134 void initFromText(
const char *pkl,
const unsigned int len);
a class for efficiently storing vectors of discrete values
unsigned int size() const
returns the length
DiscreteValueVect(const std::string &pkl)
constructor from a pickle
DiscreteValueVect(const DiscreteValueVect &other)
Copy constructor.
std::string toString() const
returns a binary string representation (pickle)
unsigned int getVal(unsigned int i) const
return the value at an index
unsigned int getLength() const
returns the length
DiscreteValueType
used to define the possible range of the values
~DiscreteValueVect()=default
unsigned int getTotalVal() const
returns the sum of all the elements in the vect
DiscreteValueVect operator|(const DiscreteValueVect &other) const
support dvv3 = dvv1|dvv2
DiscreteValueVect(DiscreteValueType valType, unsigned int length)
initialize with a particular type and size
DiscreteValueVect operator&(const DiscreteValueVect &other) const
support dvv3 = dvv1&dvv2
DiscreteValueVect & operator=(const DiscreteValueVect &other)
boost::shared_array< std::uint32_t > DATA_SPTR
DiscreteValueType getValueType() const
return the type of value being stored
DiscreteValueVect & operator-=(const DiscreteValueVect &other)
const std::uint32_t * getData() const
return a pointer to our raw data storage
unsigned int getNumInts() const
returns the size of our storage
int operator[](unsigned int idx) const
support indexing using []
unsigned int getNumBitsPerVal() const
return the number of bits used to store each value
DiscreteValueVect(const char *pkl, const unsigned int len)
constructor from a pickle
void setVal(unsigned int i, unsigned int val)
set the value at an index
DiscreteValueVect & operator+=(const DiscreteValueVect &other)
#define RDKIT_DATASTRUCTS_EXPORT
RDKIT_DATASTRUCTS_EXPORT unsigned int computeL1Norm(const DiscreteValueVect &v1, const DiscreteValueVect &v2)
RDKIT_DATASTRUCTS_EXPORT DiscreteValueVect operator-(const DiscreteValueVect &p1, const DiscreteValueVect &p2)
RDKIT_DATASTRUCTS_EXPORT DiscreteValueVect operator+(const DiscreteValueVect &p1, const DiscreteValueVect &p2)
const unsigned int BITS_PER_INT