diff --git a/Code/DataStructs/DiscreteValueVect.cpp b/Code/DataStructs/DiscreteValueVect.cpp index f78986d03..bfdafbd23 100644 --- a/Code/DataStructs/DiscreteValueVect.cpp +++ b/Code/DataStructs/DiscreteValueVect.cpp @@ -29,14 +29,18 @@ namespace RDKit { } unsigned int DiscreteValueVect::getVal(unsigned int i) const { - RANGE_CHECK(0, i, d_length-1); + if(i >= d_length){ + throw IndexErrorException(i); + } unsigned int shift = d_bitsPerVal*(i%d_valsPerInt); unsigned int intId = i/d_valsPerInt; return ( (d_data[intId] >> shift) & d_mask); } void DiscreteValueVect::setVal(unsigned int i, unsigned int val) { - RANGE_CHECK(0, i, d_length-1); + if(i >= d_length){ + throw IndexErrorException(i); + } if ((val & d_mask) != val) { throw ValueErrorException("Value out of range"); } diff --git a/Code/DataStructs/ExplicitBitVect.cpp b/Code/DataStructs/ExplicitBitVect.cpp index bd2628758..3e9c962d8 100755 --- a/Code/DataStructs/ExplicitBitVect.cpp +++ b/Code/DataStructs/ExplicitBitVect.cpp @@ -40,13 +40,13 @@ ExplicitBitVect::ExplicitBitVect(const char *data,const unsigned int dataLen) return *this; }; bool ExplicitBitVect::operator[] (const unsigned int which) const { - if(which < 0 || which >= d_size){ + if(which >= d_size){ throw IndexErrorException(which); } return (bool)(*dp_bits)[which]; }; bool ExplicitBitVect::SetBit(const unsigned int which){ - if(which < 0 || which >= d_size){ + if(which >= d_size){ throw IndexErrorException(which); } if((bool)(*dp_bits)[which]){ @@ -58,7 +58,7 @@ ExplicitBitVect::ExplicitBitVect(const char *data,const unsigned int dataLen) } }; bool ExplicitBitVect::UnSetBit(const unsigned int which){ - if(which < 0 || which >= d_size){ + if(which >= d_size){ throw IndexErrorException(which); } if((bool)(*dp_bits)[which]){ @@ -70,7 +70,7 @@ ExplicitBitVect::ExplicitBitVect(const char *data,const unsigned int dataLen) } }; bool ExplicitBitVect::GetBit(const unsigned int which) const { - if(which < 0 || which >= d_size){ + if(which >= d_size){ throw IndexErrorException(which); } return((bool)(*dp_bits)[which]); diff --git a/Code/DataStructs/SparseBitVect.cpp b/Code/DataStructs/SparseBitVect.cpp index 8f28dc248..949c79d79 100755 --- a/Code/DataStructs/SparseBitVect.cpp +++ b/Code/DataStructs/SparseBitVect.cpp @@ -58,7 +58,7 @@ SparseBitVect::SparseBitVect(const char *data,const unsigned int dataLen) bool SparseBitVect::operator[](const unsigned int which) const { - if(which < 0 || which >= d_size){ + if(which >= d_size){ throw IndexErrorException(which); } if(dp_bits->count(which)) return true; @@ -158,7 +158,7 @@ SparseBitVect::operator~ () const bool SparseBitVect::GetBit(const unsigned int which) const { - if(which < 0 || which >= d_size){ + if(which >= d_size){ throw IndexErrorException(which); } if(dp_bits->count(which)) return true; @@ -214,7 +214,7 @@ SparseBitVect::SetBit(const unsigned int which) throw ValueErrorException("BitVect not properly initialized."); } std::pair res; - if(which < 0 || which >= d_size){ + if(which >= d_size){ throw IndexErrorException(which); } res = dp_bits->insert(which); @@ -256,7 +256,7 @@ SparseBitVect::UnSetBit(const unsigned int which) if(!dp_bits){ throw ValueErrorException("BitVect not properly initialized."); } - if(which < 0 || which >= d_size){ + if(which >= d_size){ throw IndexErrorException(which); } diff --git a/Code/DataStructs/Wrap/testDiscreteValueVect.py b/Code/DataStructs/Wrap/testDiscreteValueVect.py index 0b8d521ae..f5b0d9968 100644 --- a/Code/DataStructs/Wrap/testDiscreteValueVect.py +++ b/Code/DataStructs/Wrap/testDiscreteValueVect.py @@ -185,6 +185,19 @@ class TestCase(unittest.TestCase): v4 -= v4 self.failUnless(v4.GetTotalVal()==0) + def testIterator(self): + """ + connected to sf.net issue 1719831: + http://sourceforge.net/tracker/index.php?func=detail&aid=1719831&group_id=160139&atid=814650 + """ + v1 = ds.DiscreteValueVect(ds.DiscreteValueType.ONEBITVALUE, 30) + for i in range(15): + v1[2*i] = 1; + l1 = list(v1) + self.failUnless(len(l1)==len(v1)) + for i,v in enumerate(v1): + self.failUnless(l1[i]==v) + self.failUnlessRaises(IndexError,lambda :v1[40]) if __name__ == '__main__': unittest.main() diff --git a/Code/Geometry/UniformGrid3D.cpp b/Code/Geometry/UniformGrid3D.cpp index a42eab0f2..0bf240b8b 100644 --- a/Code/Geometry/UniformGrid3D.cpp +++ b/Code/Geometry/UniformGrid3D.cpp @@ -7,6 +7,7 @@ #include "UniformGrid3D.h" #include #include +#include #include "point.h" #include @@ -126,7 +127,9 @@ namespace RDGeom { } Point3D UniformGrid3D::getGridPointLoc(unsigned int pointId) const { - RANGE_CHECK(0, pointId, d_numX*d_numY*d_numZ-1); + if(pointId >= d_numX*d_numY*d_numZ){ + throw IndexErrorException(pointId); + } Point3D res; res.x = (pointId%d_numX)*d_spacing; res.y = ((pointId%(d_numX*d_numY))/d_numX)*d_spacing; diff --git a/Code/GraphMol/Wrap/MolOps.cpp b/Code/GraphMol/Wrap/MolOps.cpp index c089cdc82..46af2c8d7 100755 --- a/Code/GraphMol/Wrap/MolOps.cpp +++ b/Code/GraphMol/Wrap/MolOps.cpp @@ -177,6 +177,9 @@ namespace RDKit{ \n\ - explicitOnly: (optional) if this toggle is set, only explicit Hs will\n\ be added to the molecule. Default value is 0 (add implicit and explicit Hs).\n\ +\n\ + - addCoords: (optional) if this toggle is set, The Hs will have 3D coordinates\n\ + set. Default value is 0 (no 3D coords).\n\ \n\ RETURNS: a new molecule with added Hs\n\ \n\