SparseBitVect.h
Go to the documentation of this file.
//
// Copyright (c) 2003-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_SPARSEBITVECTS_H__
#define __RD_SPARSEBITVECTS_H__
#include "BitVect.h"
#include <set>
using std::set;
#include <iterator>
#include <algorithm>
typedef set<int> IntSet;
typedef IntSet::iterator IntSetIter;
typedef IntSet::const_iterator IntSetConstIter;
//! a class for bit vectors that are sparsely occupied.
/*!
SparseBitVect objects store only their on bits, in an
std::set.
They are, as you might expect, quite memory efficient for sparsely populated
vectors but become rather a nightmare if they need to be negated.
*/
class SparseBitVect : public BitVect{
public:
SparseBitVect() : dp_bits(0), d_size(0) {};
//! initialize with a particular size;
explicit SparseBitVect(unsigned int size): dp_bits(0), d_size(0) {_initForSize(size); };
//! copy constructor
SparseBitVect(const SparseBitVect& other){
d_size=0;dp_bits = 0;
_initForSize(other.getNumBits());
IntSet *bv=other.dp_bits;
std::copy(bv->begin(),bv->end(),std::inserter(*dp_bits,dp_bits->end()));
}
//! construct from a string pickle
SparseBitVect(const std::string &);
//! construct from a text pickle
SparseBitVect(const char *data,const unsigned int dataLen);
SparseBitVect& operator=(const SparseBitVect&);
~SparseBitVect(){ delete dp_bits; };
bool operator[](const unsigned int which) const;
SparseBitVect operator| (const SparseBitVect&) const;
SparseBitVect operator& (const SparseBitVect&) const;
SparseBitVect operator^ (const SparseBitVect&) const;
SparseBitVect operator~ () const;
//! returns a (const) pointer to our raw storage
const IntSet *getBitSet() const { return dp_bits;}
unsigned int getNumBits() const { return d_size; };
bool setBit(const unsigned int which);
bool setBit(const IntSetIter which);
bool unsetBit(const unsigned int which);
bool getBit (const unsigned int which) const;
bool getBit(const IntVectIter which) const;
bool getBit(const IntSetIter which) const;
unsigned int getNumOnBits() const { return dp_bits->size(); };
unsigned int getNumOffBits() const { return d_size - dp_bits->size(); };
std::string toString() const;
void getOnBits (IntVect& v) const;
void clearBits() { dp_bits->clear(); };
IntSet *dp_bits; //!< our raw data, exposed for the sake of efficiency
bool operator==(const SparseBitVect &o) const {
return *dp_bits==*o.dp_bits;
}
bool operator!=(const SparseBitVect &o) const {
return *dp_bits!=*o.dp_bits;
}
private:
unsigned int d_size;
void _initForSize(const unsigned int size);
};
#endif
SparseBitVect::operator|
SparseBitVect operator|(const SparseBitVect &) const
SparseBitVect::getNumOffBits
unsigned int getNumOffBits() const
returns the number of off bits
Definition: SparseBitVect.h:74
SparseBitVect::getNumOnBits
unsigned int getNumOnBits() const
returns the number of on bits
Definition: SparseBitVect.h:73
SparseBitVect::operator^
SparseBitVect operator^(const SparseBitVect &) const
IntVectIter
IntVect::iterator IntVectIter
Definition: BitVect.h:17
SparseBitVect::dp_bits
IntSet * dp_bits
our raw data, exposed for the sake of efficiency
Definition: SparseBitVect.h:79
SparseBitVect::getBitSet
const IntSet * getBitSet() const
returns a (const) pointer to our raw storage
Definition: SparseBitVect.h:63
SparseBitVect::setBit
bool setBit(const unsigned int which)
sets a particular bit and returns its original value
SparseBitVect
a class for bit vectors that are sparsely occupied.
Definition: SparseBitVect.h:35
SparseBitVect::operator!=
bool operator!=(const SparseBitVect &o) const
Definition: SparseBitVect.h:85
SparseBitVect::getOnBits
void getOnBits(IntVect &v) const
replaces the contents of v with indices of our on bits
IntSetConstIter
IntSet::const_iterator IntSetConstIter
Definition: SparseBitVect.h:24
IntSetIter
IntSet::iterator IntSetIter
Definition: SparseBitVect.h:23
SparseBitVect::~SparseBitVect
~SparseBitVect()
Definition: SparseBitVect.h:54
SparseBitVect::operator&
SparseBitVect operator&(const SparseBitVect &) const
SparseBitVect::getNumBits
unsigned int getNumBits() const
returns the number of bits (the length of the BitVect)
Definition: SparseBitVect.h:65
SparseBitVect::toString
std::string toString() const
returns a serialized (pickled) version of this BitVect
SparseBitVect::operator==
bool operator==(const SparseBitVect &o) const
Definition: SparseBitVect.h:82
SparseBitVect::operator~
SparseBitVect operator~() const
IntSet
set< int > IntSet
Definition: SparseBitVect.h:22
BitVect::size
unsigned int size() const
Definition: BitVect.h:61
SparseBitVect::operator=
SparseBitVect & operator=(const SparseBitVect &)
SparseBitVect::getBit
bool getBit(const unsigned int which) const
returns the value of a particular bit
SparseBitVect::clearBits
void clearBits()
clears (sets to off) all of our bits
Definition: SparseBitVect.h:79
BitVect.h
IntVect
std::vector< int > IntVect
Definition: BitVect.h:16
SparseBitVect::unsetBit
bool unsetBit(const unsigned int which)
unsets a particular bit and returns its original value
SparseBitVect::SparseBitVect
SparseBitVect(const SparseBitVect &other)
copy constructor
Definition: SparseBitVect.h:42
SparseBitVect::SparseBitVect
SparseBitVect()
Definition: SparseBitVect.h:37
BitVect
Abstract base class for storing BitVectors.
Definition: BitVect.h:23
SparseBitVect::operator[]
bool operator[](const unsigned int which) const
SparseBitVect::SparseBitVect
SparseBitVect(unsigned int size)
initialize with a particular size;
Definition: SparseBitVect.h:39