/usr/include/rdkit/DataStructs/DiscreteValueVect.h is in librdkit-dev 201503-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | //
// Copyright (C) 2004-2008 Greg Landrum and Rational Discovery LLC
//
// @@ All Rights Reserved @@
// This file is part of the RDKit.
// The contents are covered by the terms of the BSD license
// which is included in the file license.txt, found at the root
// of the RDKit source tree.
//
#ifndef __RD_DISCRETE_VALUE_VECT_20050124__
#define __RD_DISCRETE_VALUE_VECT_20050124__
#include <boost/smart_ptr.hpp>
#include <string>
#include <cstring>
#include <boost/cstdint.hpp>
namespace RDKit{
// we require 32bit unsigneds using the boost::uint32_t type:
const unsigned int BITS_PER_INT=32;
//! a class for efficiently storing vectors of discrete values
class DiscreteValueVect {
public:
typedef boost::shared_array<boost::uint32_t> DATA_SPTR;
//! used to define the possible range of the values
typedef enum {
ONEBITVALUE=0,
TWOBITVALUE,
FOURBITVALUE,
EIGHTBITVALUE,
SIXTEENBITVALUE,
} DiscreteValueType;
//! initialize with a particular type and size
DiscreteValueVect(DiscreteValueType valType, unsigned int length) : d_type(valType), d_length(length) {
d_bitsPerVal = (1 << static_cast<unsigned int>(valType));
d_valsPerInt = BITS_PER_INT/d_bitsPerVal;
d_numInts = (length + d_valsPerInt -1)/d_valsPerInt;
d_mask = ((1<<d_bitsPerVal) -1);
boost::uint32_t *data = new boost::uint32_t[d_numInts];
memset(static_cast<void *>(data),0,d_numInts*sizeof(boost::uint32_t));
d_data.reset(data);
}
//! Copy constructor
DiscreteValueVect(const DiscreteValueVect& other);
//! constructor from a pickle
DiscreteValueVect(const std::string pkl){
initFromText(pkl.c_str(),pkl.size());
};
//! constructor from a pickle
DiscreteValueVect(const char *pkl,const unsigned int len){
initFromText(pkl,len);
};
~DiscreteValueVect() {}
//! return the value at an index
unsigned int getVal(unsigned int i) const;
//! support indexing using []
int operator[] (unsigned int idx) const { return getVal(idx); };
//! set the value at an index
/*!
NOTE: it is an error to have val > the max value this
DiscreteValueVect can accomodate
*/
void setVal(unsigned int i, unsigned int val);
//! returns the sum of all the elements in the vect
unsigned int getTotalVal() const;
//! returns the length
unsigned int getLength() const;
//! returns the length
unsigned int size() const { return getLength(); };
//! return a pointer to our raw data storage
const boost::uint32_t *getData() const;
//! return the number of bits used to store each value
unsigned int getNumBitsPerVal() const {
return d_bitsPerVal;
}
//! return the type of value being stored
DiscreteValueType getValueType() const {
return d_type;
}
//! returns the size of our storage
unsigned int getNumInts() const {
return d_numInts;
}
//! support dvv3 = dvv1&dvv2
/*!
operator& returns the minimum value for each element.
e.g.:
[0,1,2,0] & [0,1,1,1] -> [0,1,1,0]
*/
DiscreteValueVect operator& (const DiscreteValueVect &other) const;
//! support dvv3 = dvv1|dvv2
/*!
operator& returns the maximum value for each element.
e.g.:
[0,1,2,0] | [0,1,1,1] -> [0,1,2,1]
*/
DiscreteValueVect operator| (const DiscreteValueVect &other) const;
//DiscreteValueVect operator^ (const DiscreteValueVect &other) const;
//DiscreteValueVect operator~ () const;
DiscreteValueVect& operator+=(const DiscreteValueVect &other);
DiscreteValueVect& operator-=(const DiscreteValueVect &other);
//! returns a binary string representation (pickle)
std::string toString() const;
private:
DiscreteValueType d_type;
unsigned int d_bitsPerVal;
unsigned int d_valsPerInt;
unsigned int d_numInts;
unsigned int d_length;
unsigned int d_mask;
DATA_SPTR d_data;
void initFromText(const char *pkl,const unsigned int len);
};
unsigned int computeL1Norm(const DiscreteValueVect &v1, const DiscreteValueVect &v2);
DiscreteValueVect operator+ (const DiscreteValueVect& p1,
const DiscreteValueVect& p2);
DiscreteValueVect operator- (const DiscreteValueVect& p1,
const DiscreteValueVect& p2);
}
#endif
|