diff --git a/Code/DataStructs/MultiFPBReader.cpp b/Code/DataStructs/MultiFPBReader.cpp index 706687105..566afe8e6 100644 --- a/Code/DataStructs/MultiFPBReader.cpp +++ b/Code/DataStructs/MultiFPBReader.cpp @@ -8,8 +8,6 @@ // of the RDKit source tree. // -#include - #include #include #ifdef RDK_BUILD_THREADSAFE_SSS @@ -29,14 +27,14 @@ std::uint8_t *bitsetToBytes(const boost::dynamic_bitset<> &bitset); namespace { auto tplSorter = [](const MultiFPBReader::ResultTuple &v1, const MultiFPBReader::ResultTuple &v2) { - if (v1.get<0>() == v2.get<0>()) { - if (v1.get<2>() == v2.get<2>()) { - return v1.get<1>() < v2.get<1>(); + if (std::get<0>(v1) == std::get<0>(v2)) { + if (std::get<2>(v1) == std::get<2>(v2)) { + return std::get<1>(v1) < std::get<1>(v2); } else { - return v1.get<2>() < v2.get<2>(); + return std::get<2>(v1) < std::get<2>(v2); } } else { - return v1.get<0>() > v2.get<0>(); + return std::get<0>(v1) > std::get<0>(v2); } }; diff --git a/Code/DataStructs/MultiFPBReader.h b/Code/DataStructs/MultiFPBReader.h index 9e43c5787..61f99ef4d 100644 --- a/Code/DataStructs/MultiFPBReader.h +++ b/Code/DataStructs/MultiFPBReader.h @@ -1,5 +1,5 @@ // -// Copyright (c) 2016 Greg Landrum +// Copyright (c) 2016-2022 Greg Landrum // // @@ All Rights Reserved @@ // This file is part of the RDKit. @@ -21,7 +21,7 @@ #include #include #include -#include +#include namespace RDKit { @@ -36,7 +36,7 @@ namespace RDKit { MultiFPBReader fpbs(readers); fpbs.init(); boost::shared_ptr ebv = fpbs.getReader(0)->getFP(95); - std::vector > nbrs = + std::vector > nbrs = fpbs.getTanimotoNeighbors(*ebv.get(), 0.70); \endcode @@ -52,7 +52,7 @@ namespace RDKit { */ class RDKIT_DATASTRUCTS_EXPORT MultiFPBReader { public: - typedef boost::tuple ResultTuple; + typedef std::tuple ResultTuple; MultiFPBReader() {} /*! diff --git a/Code/DataStructs/Wrap/wrap_FPB.cpp b/Code/DataStructs/Wrap/wrap_FPB.cpp index 906296f95..81c6ba2ca 100644 --- a/Code/DataStructs/Wrap/wrap_FPB.cpp +++ b/Code/DataStructs/Wrap/wrap_FPB.cpp @@ -58,7 +58,8 @@ python::tuple multiTaniNbrHelper(const MultiFPBReader *self, self->getTanimotoNeighbors(bv, threshold, numThreads); python::list result; for (auto &nbr : nbrs) { - result.append(python::make_tuple(nbr.get<0>(), nbr.get<1>(), nbr.get<2>())); + result.append(python::make_tuple(std::get<0>(nbr), std::get<1>(nbr), + std::get<2>(nbr))); } return python::tuple(result); } @@ -71,7 +72,8 @@ python::tuple multiTverskyNbrHelper(const MultiFPBReader *self, self->getTverskyNeighbors(bv, ca, cb, threshold, numThreads); python::list result; for (auto &nbr : nbrs) { - result.append(python::make_tuple(nbr.get<0>(), nbr.get<1>(), nbr.get<2>())); + result.append(python::make_tuple(std::get<0>(nbr), std::get<1>(nbr), + std::get<2>(nbr))); } return python::tuple(result); } diff --git a/Code/DataStructs/testMultiFPB.cpp b/Code/DataStructs/testMultiFPB.cpp index d8a44b310..2e0c0e003 100644 --- a/Code/DataStructs/testMultiFPB.cpp +++ b/Code/DataStructs/testMultiFPB.cpp @@ -75,12 +75,12 @@ void test2MultiFPBReaderTanimoto() { std::vector nbrs = mfps.getTanimotoNeighbors(bytes); TEST_ASSERT(nbrs.size() == 2); - TEST_ASSERT(feq(nbrs[0].get<0>(), 1.)); - TEST_ASSERT(nbrs[0].get<1>() == 0); - TEST_ASSERT(nbrs[0].get<2>() == 0); - TEST_ASSERT(feq(nbrs[1].get<0>(), 1.)); - TEST_ASSERT(nbrs[1].get<1>() == 0); - TEST_ASSERT(nbrs[1].get<2>() == 1); + TEST_ASSERT(feq(std::get<0>(nbrs[0]), 1.)); + TEST_ASSERT(std::get<1>(nbrs[0]) == 0); + TEST_ASSERT(std::get<2>(nbrs[0]) == 0); + TEST_ASSERT(feq(std::get<0>(nbrs[1]), 1.)); + TEST_ASSERT(std::get<1>(nbrs[1]) == 0); + TEST_ASSERT(std::get<2>(nbrs[1]) == 1); } { // with a threshold boost::shared_array bytes = mfps.getReader(0)->getBytes(0); @@ -88,15 +88,15 @@ void test2MultiFPBReaderTanimoto() { std::vector nbrs = mfps.getTanimotoNeighbors(bytes, 0.30); TEST_ASSERT(nbrs.size() == 10); - TEST_ASSERT(feq(nbrs[0].get<0>(), 1.)); - TEST_ASSERT(nbrs[0].get<1>() == 0); - TEST_ASSERT(nbrs[0].get<2>() == 0); - TEST_ASSERT(feq(nbrs[1].get<0>(), 1.)); - TEST_ASSERT(nbrs[1].get<1>() == 0); - TEST_ASSERT(nbrs[1].get<2>() == 1); - TEST_ASSERT(feq(nbrs[2].get<0>(), 0.3703)); - TEST_ASSERT(nbrs[2].get<1>() == 1); - TEST_ASSERT(nbrs[2].get<2>() == 0); + TEST_ASSERT(feq(std::get<0>(nbrs[0]), 1.)); + TEST_ASSERT(std::get<1>(nbrs[0]) == 0); + TEST_ASSERT(std::get<2>(nbrs[0]) == 0); + TEST_ASSERT(feq(std::get<0>(nbrs[1]), 1.)); + TEST_ASSERT(std::get<1>(nbrs[1]) == 0); + TEST_ASSERT(std::get<2>(nbrs[1]) == 1); + TEST_ASSERT(feq(std::get<0>(nbrs[2]), 0.3703)); + TEST_ASSERT(std::get<1>(nbrs[2]) == 1); + TEST_ASSERT(std::get<2>(nbrs[2]) == 0); } { // with a threshold boost::shared_array bytes = mfps.getReader(0)->getBytes(95); @@ -104,15 +104,15 @@ void test2MultiFPBReaderTanimoto() { std::vector nbrs = mfps.getTanimotoNeighbors(bytes, 0.30); TEST_ASSERT(nbrs.size() == 4); - TEST_ASSERT(feq(nbrs[0].get<0>(), 1.)); - TEST_ASSERT(nbrs[0].get<1>() == 95); - TEST_ASSERT(nbrs[0].get<2>() == 0); - TEST_ASSERT(feq(nbrs[1].get<0>(), 1.)); - TEST_ASSERT(nbrs[1].get<1>() == 95); - TEST_ASSERT(nbrs[1].get<2>() == 1); - TEST_ASSERT(feq(nbrs[2].get<0>(), 0.4125)); - TEST_ASSERT(nbrs[2].get<1>() == 89); - TEST_ASSERT(nbrs[2].get<2>() == 0); + TEST_ASSERT(feq(std::get<0>(nbrs[0]), 1.)); + TEST_ASSERT(std::get<1>(nbrs[0]) == 95); + TEST_ASSERT(std::get<2>(nbrs[0]) == 0); + TEST_ASSERT(feq(std::get<0>(nbrs[1]), 1.)); + TEST_ASSERT(std::get<1>(nbrs[1]) == 95); + TEST_ASSERT(std::get<2>(nbrs[1]) == 1); + TEST_ASSERT(feq(std::get<0>(nbrs[2]), 0.4125)); + TEST_ASSERT(std::get<1>(nbrs[2]) == 89); + TEST_ASSERT(std::get<2>(nbrs[2]) == 0); } } BOOST_LOG(rdInfoLog) << "Finished" << std::endl; @@ -140,12 +140,12 @@ void test3MultiFPBReaderTversky() { std::vector nbrs = mfps.getTverskyNeighbors(bytes, 1., 1.); TEST_ASSERT(nbrs.size() == 2); - TEST_ASSERT(feq(nbrs[0].get<0>(), 1.)); - TEST_ASSERT(nbrs[0].get<1>() == 0); - TEST_ASSERT(nbrs[0].get<2>() == 0); - TEST_ASSERT(feq(nbrs[1].get<0>(), 1.)); - TEST_ASSERT(nbrs[1].get<1>() == 0); - TEST_ASSERT(nbrs[1].get<2>() == 1); + TEST_ASSERT(feq(std::get<0>(nbrs[0]), 1.)); + TEST_ASSERT(std::get<1>(nbrs[0]) == 0); + TEST_ASSERT(std::get<2>(nbrs[0]) == 0); + TEST_ASSERT(feq(std::get<0>(nbrs[1]), 1.)); + TEST_ASSERT(std::get<1>(nbrs[1]) == 0); + TEST_ASSERT(std::get<2>(nbrs[1]) == 1); } { // with a threshold boost::shared_array bytes = mfps.getReader(0)->getBytes(0); @@ -153,15 +153,15 @@ void test3MultiFPBReaderTversky() { std::vector nbrs = mfps.getTverskyNeighbors(bytes, 1., 1., 0.30); TEST_ASSERT(nbrs.size() == 10); - TEST_ASSERT(feq(nbrs[0].get<0>(), 1.)); - TEST_ASSERT(nbrs[0].get<1>() == 0); - TEST_ASSERT(nbrs[0].get<2>() == 0); - TEST_ASSERT(feq(nbrs[1].get<0>(), 1.)); - TEST_ASSERT(nbrs[1].get<1>() == 0); - TEST_ASSERT(nbrs[1].get<2>() == 1); - TEST_ASSERT(feq(nbrs[2].get<0>(), 0.3703)); - TEST_ASSERT(nbrs[2].get<1>() == 1); - TEST_ASSERT(nbrs[2].get<2>() == 0); + TEST_ASSERT(feq(std::get<0>(nbrs[0]), 1.)); + TEST_ASSERT(std::get<1>(nbrs[0]) == 0); + TEST_ASSERT(std::get<2>(nbrs[0]) == 0); + TEST_ASSERT(feq(std::get<0>(nbrs[1]), 1.)); + TEST_ASSERT(std::get<1>(nbrs[1]) == 0); + TEST_ASSERT(std::get<2>(nbrs[1]) == 1); + TEST_ASSERT(feq(std::get<0>(nbrs[2]), 0.3703)); + TEST_ASSERT(std::get<1>(nbrs[2]) == 1); + TEST_ASSERT(std::get<2>(nbrs[2]) == 0); } { // with a threshold, asymmetric boost::shared_array bytes = mfps.getReader(0)->getBytes(0); @@ -169,15 +169,15 @@ void test3MultiFPBReaderTversky() { std::vector nbrs = mfps.getTverskyNeighbors(bytes, 1., 0.5, 0.30); TEST_ASSERT(nbrs.size() == 10); - TEST_ASSERT(feq(nbrs[0].get<0>(), 1.)); - TEST_ASSERT(nbrs[0].get<1>() == 0); - TEST_ASSERT(nbrs[0].get<2>() == 0); - TEST_ASSERT(feq(nbrs[1].get<0>(), 1.)); - TEST_ASSERT(nbrs[1].get<1>() == 0); - TEST_ASSERT(nbrs[1].get<2>() == 1); - TEST_ASSERT(feq(nbrs[2].get<0>(), 0.4255)); - TEST_ASSERT(nbrs[2].get<1>() == 1); - TEST_ASSERT(nbrs[2].get<2>() == 0); + TEST_ASSERT(feq(std::get<0>(nbrs[0]), 1.)); + TEST_ASSERT(std::get<1>(nbrs[0]) == 0); + TEST_ASSERT(std::get<2>(nbrs[0]) == 0); + TEST_ASSERT(feq(std::get<0>(nbrs[1]), 1.)); + TEST_ASSERT(std::get<1>(nbrs[1]) == 0); + TEST_ASSERT(std::get<2>(nbrs[1]) == 1); + TEST_ASSERT(feq(std::get<0>(nbrs[2]), 0.4255)); + TEST_ASSERT(std::get<1>(nbrs[2]) == 1); + TEST_ASSERT(std::get<2>(nbrs[2]) == 0); } } BOOST_LOG(rdInfoLog) << "Finished" << std::endl; @@ -263,27 +263,28 @@ void test5MultiFPBReaderThreaded() { mfps.getTanimotoNeighbors(qbv, 0.6); TEST_ASSERT(nbrs.size() == 6); // for (unsigned int i = 0; i < nbrs.size(); ++i) { - // std::cerr << i << ": " << nbrs[i].get<0>() << " " << nbrs[i].get<1>() - // << " " << nbrs[i].get<2>() << " " << std::endl; + // std::cerr << i << ": " << std::get<0>(nbrs[i]) << " " << + // std::get<1>(nbrs[i]) + // << " " << std::get<2>(nbrs[i]) << " " << std::endl; // } - TEST_ASSERT(feq(nbrs[0].get<0>(), 0.66412)); - TEST_ASSERT(nbrs[0].get<1>() == 0); - TEST_ASSERT(nbrs[0].get<2>() == 3); - TEST_ASSERT(feq(nbrs[1].get<0>(), 0.65289)); - TEST_ASSERT(nbrs[1].get<1>() == 1); - TEST_ASSERT(nbrs[1].get<2>() == 2); - TEST_ASSERT(feq(nbrs[2].get<0>(), 0.64341)); - TEST_ASSERT(nbrs[2].get<1>() == 2); - TEST_ASSERT(nbrs[2].get<2>() == 1); - TEST_ASSERT(feq(nbrs[3].get<0>(), 0.61940)); - TEST_ASSERT(nbrs[3].get<1>() == 1); - TEST_ASSERT(nbrs[3].get<2>() == 0); - TEST_ASSERT(feq(nbrs[4].get<0>(), 0.61905)); - TEST_ASSERT(nbrs[4].get<1>() == 0); - TEST_ASSERT(nbrs[4].get<2>() == 0); - TEST_ASSERT(feq(nbrs[5].get<0>(), 0.61344)); - TEST_ASSERT(nbrs[5].get<1>() == 0); - TEST_ASSERT(nbrs[5].get<2>() == 1); + TEST_ASSERT(feq(std::get<0>(nbrs[0]), 0.66412)); + TEST_ASSERT(std::get<1>(nbrs[0]) == 0); + TEST_ASSERT(std::get<2>(nbrs[0]) == 3); + TEST_ASSERT(feq(std::get<0>(nbrs[1]), 0.65289)); + TEST_ASSERT(std::get<1>(nbrs[1]) == 1); + TEST_ASSERT(std::get<2>(nbrs[1]) == 2); + TEST_ASSERT(feq(std::get<0>(nbrs[2]), 0.64341)); + TEST_ASSERT(std::get<1>(nbrs[2]) == 2); + TEST_ASSERT(std::get<2>(nbrs[2]) == 1); + TEST_ASSERT(feq(std::get<0>(nbrs[3]), 0.61940)); + TEST_ASSERT(std::get<1>(nbrs[3]) == 1); + TEST_ASSERT(std::get<2>(nbrs[3]) == 0); + TEST_ASSERT(feq(std::get<0>(nbrs[4]), 0.61905)); + TEST_ASSERT(std::get<1>(nbrs[4]) == 0); + TEST_ASSERT(std::get<2>(nbrs[4]) == 0); + TEST_ASSERT(feq(std::get<0>(nbrs[5]), 0.61344)); + TEST_ASSERT(std::get<1>(nbrs[5]) == 0); + TEST_ASSERT(std::get<2>(nbrs[5]) == 1); } #ifdef RDK_TEST_MULTITHREADED @@ -291,47 +292,47 @@ void test5MultiFPBReaderThreaded() { std::vector nbrs = mfps.getTanimotoNeighbors(qbv, 0.6, 4); TEST_ASSERT(nbrs.size() == 6); - TEST_ASSERT(feq(nbrs[0].get<0>(), 0.66412)); - TEST_ASSERT(nbrs[0].get<1>() == 0); - TEST_ASSERT(nbrs[0].get<2>() == 3); - TEST_ASSERT(feq(nbrs[1].get<0>(), 0.65289)); - TEST_ASSERT(nbrs[1].get<1>() == 1); - TEST_ASSERT(nbrs[1].get<2>() == 2); - TEST_ASSERT(feq(nbrs[2].get<0>(), 0.64341)); - TEST_ASSERT(nbrs[2].get<1>() == 2); - TEST_ASSERT(nbrs[2].get<2>() == 1); - TEST_ASSERT(feq(nbrs[3].get<0>(), 0.61940)); - TEST_ASSERT(nbrs[3].get<1>() == 1); - TEST_ASSERT(nbrs[3].get<2>() == 0); - TEST_ASSERT(feq(nbrs[4].get<0>(), 0.61905)); - TEST_ASSERT(nbrs[4].get<1>() == 0); - TEST_ASSERT(nbrs[4].get<2>() == 0); - TEST_ASSERT(feq(nbrs[5].get<0>(), 0.61344)); - TEST_ASSERT(nbrs[5].get<1>() == 0); - TEST_ASSERT(nbrs[5].get<2>() == 1); + TEST_ASSERT(feq(std::get<0>(nbrs[0]), 0.66412)); + TEST_ASSERT(std::get<1>(nbrs[0]) == 0); + TEST_ASSERT(std::get<2>(nbrs[0]) == 3); + TEST_ASSERT(feq(std::get<0>(nbrs[1]), 0.65289)); + TEST_ASSERT(std::get<1>(nbrs[1]) == 1); + TEST_ASSERT(std::get<2>(nbrs[1]) == 2); + TEST_ASSERT(feq(std::get<0>(nbrs[2]), 0.64341)); + TEST_ASSERT(std::get<1>(nbrs[2]) == 2); + TEST_ASSERT(std::get<2>(nbrs[2]) == 1); + TEST_ASSERT(feq(std::get<0>(nbrs[3]), 0.61940)); + TEST_ASSERT(std::get<1>(nbrs[3]) == 1); + TEST_ASSERT(std::get<2>(nbrs[3]) == 0); + TEST_ASSERT(feq(std::get<0>(nbrs[4]), 0.61905)); + TEST_ASSERT(std::get<1>(nbrs[4]) == 0); + TEST_ASSERT(std::get<2>(nbrs[4]) == 0); + TEST_ASSERT(feq(std::get<0>(nbrs[5]), 0.61344)); + TEST_ASSERT(std::get<1>(nbrs[5]) == 0); + TEST_ASSERT(std::get<2>(nbrs[5]) == 1); } { // request more threads than we have readers, this shouldn't be a problem std::vector nbrs = mfps.getTanimotoNeighbors(qbv, 0.6, 8); TEST_ASSERT(nbrs.size() == 6); - TEST_ASSERT(feq(nbrs[0].get<0>(), 0.66412)); - TEST_ASSERT(nbrs[0].get<1>() == 0); - TEST_ASSERT(nbrs[0].get<2>() == 3); - TEST_ASSERT(feq(nbrs[1].get<0>(), 0.65289)); - TEST_ASSERT(nbrs[1].get<1>() == 1); - TEST_ASSERT(nbrs[1].get<2>() == 2); - TEST_ASSERT(feq(nbrs[2].get<0>(), 0.64341)); - TEST_ASSERT(nbrs[2].get<1>() == 2); - TEST_ASSERT(nbrs[2].get<2>() == 1); - TEST_ASSERT(feq(nbrs[3].get<0>(), 0.61940)); - TEST_ASSERT(nbrs[3].get<1>() == 1); - TEST_ASSERT(nbrs[3].get<2>() == 0); - TEST_ASSERT(feq(nbrs[4].get<0>(), 0.61905)); - TEST_ASSERT(nbrs[4].get<1>() == 0); - TEST_ASSERT(nbrs[4].get<2>() == 0); - TEST_ASSERT(feq(nbrs[5].get<0>(), 0.61344)); - TEST_ASSERT(nbrs[5].get<1>() == 0); - TEST_ASSERT(nbrs[5].get<2>() == 1); + TEST_ASSERT(feq(std::get<0>(nbrs[0]), 0.66412)); + TEST_ASSERT(std::get<1>(nbrs[0]) == 0); + TEST_ASSERT(std::get<2>(nbrs[0]) == 3); + TEST_ASSERT(feq(std::get<0>(nbrs[1]), 0.65289)); + TEST_ASSERT(std::get<1>(nbrs[1]) == 1); + TEST_ASSERT(std::get<2>(nbrs[1]) == 2); + TEST_ASSERT(feq(std::get<0>(nbrs[2]), 0.64341)); + TEST_ASSERT(std::get<1>(nbrs[2]) == 2); + TEST_ASSERT(std::get<2>(nbrs[2]) == 1); + TEST_ASSERT(feq(std::get<0>(nbrs[3]), 0.61940)); + TEST_ASSERT(std::get<1>(nbrs[3]) == 1); + TEST_ASSERT(std::get<2>(nbrs[3]) == 0); + TEST_ASSERT(feq(std::get<0>(nbrs[4]), 0.61905)); + TEST_ASSERT(std::get<1>(nbrs[4]) == 0); + TEST_ASSERT(std::get<2>(nbrs[4]) == 0); + TEST_ASSERT(feq(std::get<0>(nbrs[5]), 0.61344)); + TEST_ASSERT(std::get<1>(nbrs[5]) == 0); + TEST_ASSERT(std::get<2>(nbrs[5]) == 1); } #endif diff --git a/Code/ForceField/MMFF/TorsionAngle.cpp b/Code/ForceField/MMFF/TorsionAngle.cpp index 7921ce14c..8e65b39dd 100644 --- a/Code/ForceField/MMFF/TorsionAngle.cpp +++ b/Code/ForceField/MMFF/TorsionAngle.cpp @@ -1,8 +1,5 @@ -// $Id$ // -// Copyright (C) 2013 Paolo Tosco -// -// Copyright (C) 2004-2006 Rational Discovery LLC +// Copyright (C) 2013-2022 Paolo Tosco and other RDKit contributors // // @@ All Rights Reserved @@ // This file is part of the RDKit. @@ -35,10 +32,10 @@ double calcTorsionCosPhi(const RDGeom::Point3D &iPoint, return cosPhi; } -boost::tuple calcTorsionForceConstant( +std::tuple calcTorsionForceConstant( const MMFFTor *mmffTorParams) { - return boost::make_tuple(mmffTorParams->V1, mmffTorParams->V2, - mmffTorParams->V3); + return std::make_tuple(mmffTorParams->V1, mmffTorParams->V2, + mmffTorParams->V3); } double calcTorsionEnergy(const double V1, const double V2, const double V3, diff --git a/Code/ForceField/MMFF/TorsionAngle.h b/Code/ForceField/MMFF/TorsionAngle.h index c0b6cbe01..a4009ecc5 100644 --- a/Code/ForceField/MMFF/TorsionAngle.h +++ b/Code/ForceField/MMFF/TorsionAngle.h @@ -1,7 +1,5 @@ // -// Copyright (C) 2013 Paolo Tosco -// -// Copyright (C) 2004-2006 Rational Discovery LLC +// Copyright (C) 2013-2022 Paolo Tosco and other RDKit contributors // // @@ All Rights Reserved @@ // This file is part of the RDKit. @@ -10,11 +8,11 @@ // of the RDKit source tree. // #include -#ifndef __RD_MMFFTORSIONANGLE_H__ -#define __RD_MMFFTORSIONANGLE_H__ +#ifndef RD_MMFFTORSIONANGLE_H +#define RD_MMFFTORSIONANGLE_H #include -#include +#include namespace RDGeom { class Point3D; @@ -62,7 +60,7 @@ RDKIT_FORCEFIELD_EXPORT double calcTorsionCosPhi(const RDGeom::Point3D &iPoint, const RDGeom::Point3D &kPoint, const RDGeom::Point3D &lPoint); //! returns the 3-tuple of a torsion angle force constants -RDKIT_FORCEFIELD_EXPORT boost::tuple +RDKIT_FORCEFIELD_EXPORT std::tuple calcTorsionForceConstant(const MMFFTor *mmffTorParams); //! calculates and returns the torsional MMFF energy RDKIT_FORCEFIELD_EXPORT double calcTorsionEnergy(const double V1, diff --git a/Code/ForceField/UFF/Inversion.cpp b/Code/ForceField/UFF/Inversion.cpp index cae0bbf00..e00b2775c 100644 --- a/Code/ForceField/UFF/Inversion.cpp +++ b/Code/ForceField/UFF/Inversion.cpp @@ -1,8 +1,5 @@ -// $Id$ // -// Copyright (C) 2013 Paolo Tosco -// -// Copyright (C) 2004-2006 Rational Discovery LLC +// Copyright (C) 2013 Paolo Tosco and other RDKit contributors // // @@ All Rights Reserved @@ // This file is part of the RDKit. @@ -38,7 +35,7 @@ double calculateCosY(const RDGeom::Point3D &iPoint, return n.dotProduct(rJL); } -boost::tuple +std::tuple calcInversionCoefficientsAndForceConstant(int at2AtomicNum, bool isCBoundToO) { double res = 0.0; double C0 = 0.0; @@ -82,7 +79,7 @@ calcInversionCoefficientsAndForceConstant(int at2AtomicNum, bool isCBoundToO) { } res /= 3.0; - return boost::make_tuple(res, C0, C1, C2); + return std::make_tuple(res, C0, C1, C2); } } // end of namespace Utils @@ -103,14 +100,12 @@ InversionContrib::InversionContrib(ForceField *owner, unsigned int idx1, d_at3Idx = idx3; d_at4Idx = idx4; - boost::tuple invCoeffForceCon = - Utils::calcInversionCoefficientsAndForceConstant(at2AtomicNum, - isCBoundToO); - d_forceConstant = - oobForceScalingFactor * boost::tuples::get<0>(invCoeffForceCon); - d_C0 = boost::tuples::get<1>(invCoeffForceCon); - d_C1 = boost::tuples::get<2>(invCoeffForceCon); - d_C2 = boost::tuples::get<3>(invCoeffForceCon); + auto invCoeffForceCon = Utils::calcInversionCoefficientsAndForceConstant( + at2AtomicNum, isCBoundToO); + d_forceConstant = oobForceScalingFactor * std::get<0>(invCoeffForceCon); + d_C0 = std::get<1>(invCoeffForceCon); + d_C1 = std::get<2>(invCoeffForceCon); + d_C2 = std::get<3>(invCoeffForceCon); } double InversionContrib::getEnergy(double *pos) const { diff --git a/Code/ForceField/UFF/Inversion.h b/Code/ForceField/UFF/Inversion.h index 42c6f92ea..c259526d9 100644 --- a/Code/ForceField/UFF/Inversion.h +++ b/Code/ForceField/UFF/Inversion.h @@ -1,7 +1,5 @@ // -// Copyright (C) 2013 Paolo Tosco -// -// Copyright (C) 2004-2006 Rational Discovery LLC +// Copyright (C) 2013 Paolo Tosco and other RDKit contributors // // @@ All Rights Reserved @@ // This file is part of the RDKit. @@ -10,10 +8,10 @@ // of the RDKit source tree. // #include -#ifndef __RD_UFFINVERSION_H__ -#define __RD_UFFINVERSION_H__ +#ifndef RD_UFFINVERSION_H +#define RD_UFFINVERSION_H #include -#include +#include #include namespace ForceFields { @@ -73,7 +71,7 @@ RDKIT_FORCEFIELD_EXPORT double calculateCosY(const RDGeom::Point3D &iPoint, \return the force constant */ -RDKIT_FORCEFIELD_EXPORT boost::tuple +RDKIT_FORCEFIELD_EXPORT std::tuple calcInversionCoefficientsAndForceConstant(int at2AtomicNum, bool isCBoundToO); } // namespace Utils } // namespace UFF diff --git a/Code/GraphMol/Canon.cpp b/Code/GraphMol/Canon.cpp index 5ba811ae5..b1c665fe8 100644 --- a/Code/GraphMol/Canon.cpp +++ b/Code/GraphMol/Canon.cpp @@ -80,7 +80,7 @@ bool chiralAtomNeedsTagInversion(const RDKit::ROMol &mol, } auto _possibleCompare = [](const PossibleType &arg1, const PossibleType &arg2) { - return (arg1.get<0>() < arg2.get<0>()); + return (std::get<0>(arg1) < std::get<0>(arg2)); }; bool checkBondsInSameBranch(MolStack &molStack, Bond *dblBnd, Bond *dirBnd) { @@ -654,16 +654,16 @@ void dfsFindCycles(ROMol &mol, int atomIdx, int inBondIdx, std::sort(possibles.begin(), possibles.end(), _possibleCompare); // if (possibles.size()) // std::cerr << " aIdx1: " << atomIdx - // << " first: " << possibles.front().get<0>() << " " - // << possibles.front().get<1>() << std::endl; + // << " first: " << possibles.front()std:std::get<0>() << " " + // << possibles.front()std:std::get<1>() << std::endl; // // --------------------- // // Now work the children // // --------------------- for (auto &possible : possibles) { - int possibleIdx = possible.get<1>(); - Bond *bond = possible.get<2>(); + int possibleIdx = std::get<1>(possible); + Bond *bond = std::get<2>(possible); switch (colors[possibleIdx]) { case WHITE_NODE: // ----- @@ -825,8 +825,8 @@ void dfsBuildStack(ROMol &mol, int atomIdx, int inBondIdx, std::sort(possibles.begin(), possibles.end(), _possibleCompare); // if (possibles.size()) // std::cerr << " aIdx2: " << atomIdx - // << " first: " << possibles.front().get<0>() << " " - // << possibles.front().get<1>() << std::endl; + // << " first: " << possibles.front()std:std::get<0>() << " " + // << possibles.front()std:std::get<1>() << std::endl; // --------------------- // @@ -835,14 +835,14 @@ void dfsBuildStack(ROMol &mol, int atomIdx, int inBondIdx, // --------------------- for (auto possiblesIt = possibles.begin(); possiblesIt != possibles.end(); possiblesIt++) { - int possibleIdx = possiblesIt->get<1>(); + int possibleIdx = std::get<1>(*possiblesIt); if (colors[possibleIdx] != WHITE_NODE) { // we're either done or it's a ring-closure, which we already processed... // this test isn't strictly required, because we only added WHITE notes to // the possibles list, but it seems logical to document it continue; } - Bond *bond = possiblesIt->get<2>(); + Bond *bond = std::get<2>(*possiblesIt); Atom *otherAtom = mol.getAtomWithIdx(possibleIdx); // ww might have some residual data from earlier calls, clean that up: otherAtom->clearProp(common_properties::_TraversalBondIndexOrder); diff --git a/Code/GraphMol/Canon.h b/Code/GraphMol/Canon.h index 42ea0974b..a51320fad 100644 --- a/Code/GraphMol/Canon.h +++ b/Code/GraphMol/Canon.h @@ -1,5 +1,5 @@ // -// Copyright (C) 2004-2006 Rational Discovery LLC +// Copyright (C) 2004-2022 Greg Landrum and other RDKit contributors // // @@ All Rights Reserved @@ // This file is part of the RDKit. @@ -8,11 +8,11 @@ // of the RDKit source tree. // #include -#ifndef _RD_CANON_H_ -#define _RD_CANON_H_ +#ifndef RD_CANON_H +#define RD_CANON_H #include -#include +#include #include #include @@ -95,7 +95,7 @@ class RDKIT_GRAPHMOL_EXPORT MolStackElem { typedef std::vector MolStack; //! used to represent possible branches from an atom -typedef boost::tuple PossibleType; +typedef std::tuple PossibleType; //! constructs the canonical traversal order for a molecular fragment /*! diff --git a/Code/GraphMol/Fingerprints/FingerprintUtil.cpp b/Code/GraphMol/Fingerprints/FingerprintUtil.cpp index 89b27fc2b..93d9952e2 100644 --- a/Code/GraphMol/Fingerprints/FingerprintUtil.cpp +++ b/Code/GraphMol/Fingerprints/FingerprintUtil.cpp @@ -18,8 +18,6 @@ #include #include #include -#include -#include #include #include #include diff --git a/Code/GraphMol/Fingerprints/FingerprintUtil.h b/Code/GraphMol/Fingerprints/FingerprintUtil.h index e3c52e6f6..7bf8df7a7 100644 --- a/Code/GraphMol/Fingerprints/FingerprintUtil.h +++ b/Code/GraphMol/Fingerprints/FingerprintUtil.h @@ -16,7 +16,7 @@ #include #include #include - +#include #include #include #include @@ -95,8 +95,7 @@ class RDKIT_FINGERPRINTS_EXPORT ss_matcher { RDKit::ROMOL_SPTR m_matcher; }; -typedef boost::tuple, uint32_t, unsigned int> - AccumTuple; +typedef std::tuple, uint32_t, unsigned int> AccumTuple; RDKIT_FINGERPRINTS_EXPORT extern std::vector defaultFeatureSmarts; diff --git a/Code/GraphMol/Fingerprints/MorganFingerprints.cpp b/Code/GraphMol/Fingerprints/MorganFingerprints.cpp index c3f6defae..edbdd7251 100644 --- a/Code/GraphMol/Fingerprints/MorganFingerprints.cpp +++ b/Code/GraphMol/Fingerprints/MorganFingerprints.cpp @@ -41,8 +41,6 @@ #include #include -#include -#include #include #include @@ -245,8 +243,8 @@ void calcFingerprint(const ROMol &mol, unsigned int radius, } roundInvariants[atomIdx] = static_cast(invar); neighborhoodsThisRound.push_back( - boost::make_tuple(roundAtomNeighborhoods[atomIdx], - static_cast(invar), atomIdx)); + std::make_tuple(roundAtomNeighborhoods[atomIdx], + static_cast(invar), atomIdx)); if (!includeRedundantEnvironments && std::find(neighborhoods.begin(), neighborhoods.end(), roundAtomNeighborhoods[atomIdx]) != neighborhoods.end()) { @@ -265,28 +263,28 @@ void calcFingerprint(const ROMol &mol, unsigned int radius, // fingerprint: if (includeRedundantEnvironments || std::find(neighborhoods.begin(), neighborhoods.end(), - iter->get<0>()) == neighborhoods.end()) { - if (!onlyNonzeroInvariants || invariantCpy[iter->get<2>()]) { - if (includeAtoms[iter->get<2>()]) { - uint32_t bit = updateElement(res, iter->get<1>(), useCounts); + std::get<0>(*iter)) == neighborhoods.end()) { + if (!onlyNonzeroInvariants || invariantCpy[std::get<2>(*iter)]) { + if (includeAtoms[std::get<2>(*iter)]) { + uint32_t bit = updateElement(res, std::get<1>(*iter), useCounts); if (atomsSettingBits) { (*atomsSettingBits)[bit].push_back( - std::make_pair(iter->get<2>(), layer + 1)); + std::make_pair(std::get<2>(*iter), layer + 1)); } } if (!fromAtoms || std::find(fromAtoms->begin(), fromAtoms->end(), - iter->get<2>()) != fromAtoms->end()) { - neighborhoods.push_back(iter->get<0>()); + std::get<2>(*iter)) != fromAtoms->end()) { + neighborhoods.push_back(std::get<0>(*iter)); } } - // std::cerr<<" layer: "<get<2>()<<" " - // <get<0>()<< " " << iter->get<1>() << " " << - // deadAtoms[iter->get<2>()]<(*iter)<<" " + // <(*iter)<< " " << std::get<1>(*iter) << " " << + // deadAtoms[std::get<2>(*iter)]<get<2>()<<" is dead."<get<2>()] = 1; + // std::cerr<<" atom: "<< std::get<2>(*iter)<<" is dead."<(*iter)] = 1; } } diff --git a/Code/GraphMol/Fingerprints/MorganGenerator.cpp b/Code/GraphMol/Fingerprints/MorganGenerator.cpp index bd76e57ca..d4ea768fd 100644 --- a/Code/GraphMol/Fingerprints/MorganGenerator.cpp +++ b/Code/GraphMol/Fingerprints/MorganGenerator.cpp @@ -17,8 +17,7 @@ #include #include -#include -#include +#include #include #include @@ -320,8 +319,8 @@ MorganEnvGenerator::getEnvironments( // store the environment that generated this bit id along with the bit // id and the atom id allNeighborhoodsThisRound.push_back( - boost::make_tuple(roundAtomNeighborhoods[atomIdx], - static_cast(invar), atomIdx)); + std::make_tuple(roundAtomNeighborhoods[atomIdx], + static_cast(invar), atomIdx)); if (std::find(neighborhoods.begin(), neighborhoods.end(), roundAtomNeighborhoods[atomIdx]) != neighborhoods.end()) { // we have seen this exact environment before, this atom @@ -340,19 +339,19 @@ MorganEnvGenerator::getEnvironments( // result if (morganArguments->df_includeRedundantEnvironments || std::find(neighborhoods.begin(), neighborhoods.end(), - iter->get<0>()) == neighborhoods.end()) { + std::get<0>(*iter)) == neighborhoods.end()) { if (!morganArguments->df_onlyNonzeroInvariants || - (*atomInvariants)[iter->get<2>()]) { - if (includeAtoms[iter->get<2>()]) { + (*atomInvariants)[std::get<2>(*iter)]) { + if (includeAtoms[std::get<2>(*iter)]) { result.push_back(new MorganAtomEnv( - iter->get<1>(), iter->get<2>(), layer + 1)); - neighborhoods.push_back(iter->get<0>()); + std::get<1>(*iter), std::get<2>(*iter), layer + 1)); + neighborhoods.push_back(std::get<0>(*iter)); } } } else { // we have seen this exact environment before, this atom // is now out of consideration: - deadAtoms[iter->get<2>()] = 1; + deadAtoms[std::get<2>(*iter)] = 1; } } diff --git a/Code/GraphMol/ForceFieldHelpers/CrystalFF/TorsionAngleM6.h b/Code/GraphMol/ForceFieldHelpers/CrystalFF/TorsionAngleM6.h index 867e554bd..95c84b216 100644 --- a/Code/GraphMol/ForceFieldHelpers/CrystalFF/TorsionAngleM6.h +++ b/Code/GraphMol/ForceFieldHelpers/CrystalFF/TorsionAngleM6.h @@ -1,7 +1,5 @@ // -// Copyright (C) 2015 Sereina Riniker -// -// Copyright (C) 2004-2006 Rational Discovery LLC +// Copyright (C) 2015 Sereina Riniker and other RDKit contributors // // @@ All Rights Reserved @@ // This file is part of the RDKit. @@ -14,7 +12,7 @@ #define RD_TORSIONANGLEM6_H #include -#include +#include #include namespace RDGeom { diff --git a/Code/GraphMol/ForceFieldHelpers/MMFF/Builder.h b/Code/GraphMol/ForceFieldHelpers/MMFF/Builder.h index 268815fe7..2723cf363 100644 --- a/Code/GraphMol/ForceFieldHelpers/MMFF/Builder.h +++ b/Code/GraphMol/ForceFieldHelpers/MMFF/Builder.h @@ -1,7 +1,5 @@ // -// Copyright (C) 2013-2018 Paolo Tosco -// -// Copyright (C) 2004-2006 Rational Discovery LLC +// Copyright (C) 2013-2022 Paolo Tosco and other RDKit contributors // // @@ All Rights Reserved @@ // This file is part of the RDKit. @@ -21,7 +19,7 @@ #include #endif #include -#include +#include #include namespace ForceFields { diff --git a/Code/GraphMol/ForceFieldHelpers/UFF/AtomTyper.cpp b/Code/GraphMol/ForceFieldHelpers/UFF/AtomTyper.cpp index ce4ac063b..a0daf7c68 100644 --- a/Code/GraphMol/ForceFieldHelpers/UFF/AtomTyper.cpp +++ b/Code/GraphMol/ForceFieldHelpers/UFF/AtomTyper.cpp @@ -703,10 +703,10 @@ bool getUFFInversionParams(const ROMol &mol, unsigned int idx1, } if (res) { isBoundToSP2O = (isBoundToSP2O && (at2AtomicNum == 6)); - boost::tuple invCoeffForceCon = + auto invCoeffForceCon = UFF::Utils::calcInversionCoefficientsAndForceConstant(at2AtomicNum, isBoundToSP2O); - uffInversionParams.K = boost::tuples::get<0>(invCoeffForceCon); + uffInversionParams.K = std::get<0>(invCoeffForceCon); } return res; } diff --git a/Code/GraphMol/FragCatalog/FragCatalogEntry.cpp b/Code/GraphMol/FragCatalog/FragCatalogEntry.cpp index 94c725e9c..ccd05f4e3 100644 --- a/Code/GraphMol/FragCatalog/FragCatalogEntry.cpp +++ b/Code/GraphMol/FragCatalog/FragCatalogEntry.cpp @@ -1,6 +1,5 @@ -// $Id$ // -// Copyright (C) 2003-2009 Greg Landrum and Rational Discovery LLC +// Copyright (C) 2003-2022 Greg Landrum and other RDKit contributors // // @@ All Rights Reserved @@ // This file is part of the RDKit. @@ -22,6 +21,7 @@ #include #include #include +#include namespace RDKit { @@ -127,23 +127,12 @@ bool FragCatalogEntry::match(const FragCatalogEntry *other, double tol) const { Subgraphs::DiscrimTuple tdiscs, odiscs; odiscs = other->getDiscrims(); - // double x1 = boost::tuples::get<0>(odiscs); - // std::cout << x1 << "\n"; tdiscs = this->getDiscrims(); -#if 0 - std::cout << "DISCRIMS: " << d_descrip << " "; - std::cout << tdiscs.get<0>() << " " << tdiscs.get<1>() << " " << tdiscs.get<2>(); - std::cout << " -- "<() << " " << odiscs.get<1>() << " " << odiscs.get<2>(); - std::cout << std::endl; -#endif // REVIEW: need an overload of feq that handles tuples in MolOps, or wherever // DiscrimTuple is defined - if (!(feq(boost::tuples::get<0>(tdiscs), boost::tuples::get<0>(odiscs), - tol)) || - !(feq(boost::tuples::get<1>(tdiscs), boost::tuples::get<1>(odiscs), - tol)) || - !(feq(boost::tuples::get<2>(tdiscs), boost::tuples::get<2>(odiscs), - tol))) { + if (!(feq(std::get<0>(tdiscs), std::get<0>(odiscs), tol)) || + !(feq(std::get<1>(tdiscs), std::get<1>(odiscs), tol)) || + !(feq(std::get<2>(tdiscs), std::get<2>(odiscs), tol))) { return false; } diff --git a/Code/GraphMol/FragCatalog/Wrap/FragCatalog.cpp b/Code/GraphMol/FragCatalog/Wrap/FragCatalog.cpp index 9fc2293cd..16f0d2b7f 100644 --- a/Code/GraphMol/FragCatalog/Wrap/FragCatalog.cpp +++ b/Code/GraphMol/FragCatalog/Wrap/FragCatalog.cpp @@ -1,6 +1,5 @@ -// $Id$ // -// Copyright (C) 2003-2006 Rational Discovery LLC +// Copyright (C) 2003-2022 Greg Landrum and other RDKit contributors // // @@ All Rights Reserved @@ // This file is part of the RDKit. @@ -104,9 +103,9 @@ DOUBLE_VECT GetBitDiscrims(const FragCatalog *self, unsigned int idx) { DOUBLE_VECT res; const FragCatalogEntry *entry = self->getEntryWithBitId(idx); Subgraphs::DiscrimTuple tmp = entry->getDiscrims(); - res.push_back(tmp.get<0>()); - res.push_back(tmp.get<1>()); - res.push_back(tmp.get<2>()); + res.push_back(std::get<0>(tmp)); + res.push_back(std::get<1>(tmp)); + res.push_back(std::get<2>(tmp)); return res; } diff --git a/Code/GraphMol/MolDraw2D/MolDraw2D.cpp b/Code/GraphMol/MolDraw2D/MolDraw2D.cpp index 7e20c4956..b75b0bb19 100644 --- a/Code/GraphMol/MolDraw2D/MolDraw2D.cpp +++ b/Code/GraphMol/MolDraw2D/MolDraw2D.cpp @@ -44,7 +44,6 @@ #include #include -#include #include #include diff --git a/Code/GraphMol/MolDraw2D/MolDraw2DDetails.h b/Code/GraphMol/MolDraw2D/MolDraw2DDetails.h index a4fc5b0a6..d07eeb9a9 100644 --- a/Code/GraphMol/MolDraw2D/MolDraw2DDetails.h +++ b/Code/GraphMol/MolDraw2D/MolDraw2DDetails.h @@ -1,5 +1,5 @@ // -// Copyright (C) 2015-2020 Greg Landrum +// Copyright (C) 2015-2022 Greg Landrum and other RDKit contributors // // @@ All Rights Reserved @@ // This file is part of the RDKit. @@ -18,7 +18,7 @@ #include #include -#include +#include #include // **************************************************************************** diff --git a/Code/GraphMol/MolDraw2D/MolDraw2DUtils.h b/Code/GraphMol/MolDraw2D/MolDraw2DUtils.h index 749a9738c..b497d8a49 100644 --- a/Code/GraphMol/MolDraw2D/MolDraw2DUtils.h +++ b/Code/GraphMol/MolDraw2D/MolDraw2DUtils.h @@ -13,7 +13,7 @@ #define MOLDRAW2DUTILS_H #include -#include +#include // **************************************************************************** diff --git a/Code/GraphMol/StructChecker/Utilites.cpp b/Code/GraphMol/StructChecker/Utilites.cpp index e2aa99e59..82574498e 100644 --- a/Code/GraphMol/StructChecker/Utilites.cpp +++ b/Code/GraphMol/StructChecker/Utilites.cpp @@ -1,5 +1,6 @@ // -// Copyright (C) 2016 Novartis Institutes for BioMedical Research +// Copyright (C) 2016-2022 Novartis Institutes for BioMedical Research and +// other RDKit contributors // // @@ All Rights Reserved @@ // This file is part of the RDKit. @@ -11,6 +12,8 @@ #include "../../Geometry/point.h" #include "Utilites.h" #include +#include + namespace RDKit { namespace StructureCheck { @@ -56,7 +59,7 @@ bool getMolAtomPoints(const ROMol &mol, std::vector &atomPoint, return non_zero_z; } -typedef boost::tuple NbrData; +typedef std::tuple NbrData; bool lessTuple(const NbrData &left, const NbrData &right) { if (left.get<0>() < right.get<0>()) return true; diff --git a/Code/GraphMol/Subgraphs/SubgraphUtils.cpp b/Code/GraphMol/Subgraphs/SubgraphUtils.cpp index 9eb5b8c30..9a5878592 100644 --- a/Code/GraphMol/Subgraphs/SubgraphUtils.cpp +++ b/Code/GraphMol/Subgraphs/SubgraphUtils.cpp @@ -17,7 +17,6 @@ #include #include #include -#include #include namespace RDKit { @@ -218,7 +217,7 @@ DiscrimTuple calcPathDiscriminators(const ROMol &mol, const PATH_TYPE &path, // also include the path size (bond count) and number of atoms // in the discriminator - return boost::make_tuple(pathInvar, path.size(), nAtoms); + return std::make_tuple(pathInvar, path.size(), nAtoms); } // diff --git a/Code/GraphMol/Subgraphs/SubgraphUtils.h b/Code/GraphMol/Subgraphs/SubgraphUtils.h index eee3bd6f1..bd76772bb 100644 --- a/Code/GraphMol/Subgraphs/SubgraphUtils.h +++ b/Code/GraphMol/Subgraphs/SubgraphUtils.h @@ -1,5 +1,5 @@ // -// Copyright (C) 2003-2009 Greg Landrum and Rational Discovery LLC +// Copyright (C) 2003-2022 Greg Landrum and other RDKit contributors // // @@ All Rights Reserved @@ // This file is part of the RDKit. @@ -8,12 +8,12 @@ // of the RDKit source tree. // #include -#ifndef _RD_SUBGRAPHUTILS_H_ -#define _RD_SUBGRAPHUTILS_H_ +#ifndef RD_SUBGRAPHUTILS_H +#define RD_SUBGRAPHUTILS_H #include "Subgraphs.h" #include -#include +#include #include #include @@ -23,8 +23,7 @@ class ROMol; namespace Subgraphs { //! used to return path discriminators (three unsigned ints): -typedef boost::tuples::tuple - DiscrimTuple; +typedef std::tuple DiscrimTuple; RDKIT_SUBGRAPHS_EXPORT DiscrimTuple calcPathDiscriminators( const ROMol &mol, const PATH_TYPE &path, bool useBO = true, diff --git a/Code/JavaWrappers/MolDraw2D.i b/Code/JavaWrappers/MolDraw2D.i index 2108264b6..67208dd81 100644 --- a/Code/JavaWrappers/MolDraw2D.i +++ b/Code/JavaWrappers/MolDraw2D.i @@ -29,11 +29,10 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -%include "boost_tuple.i" %include "std_vector.i" %include "std_map.i" %include "std_pair.i" -%include "boost_tuple.i" +%include "std_tuple.i" %{ #include #include diff --git a/Code/JavaWrappers/Subgraphs.i b/Code/JavaWrappers/Subgraphs.i index 150449b4e..064945621 100644 --- a/Code/JavaWrappers/Subgraphs.i +++ b/Code/JavaWrappers/Subgraphs.i @@ -41,9 +41,9 @@ std::vector calcPathDiscriminators(RDKit::ROMol &mol,RDKit::PATH_TYPE &path){ std::vector res(3); RDKit::Subgraphs::DiscrimTuple tpl=RDKit::Subgraphs::calcPathDiscriminators(mol,path); - res[0]=boost::get<0>(tpl); - res[1]=boost::get<1>(tpl); - res[2]=boost::get<2>(tpl); + res[0]=std::get<0>(tpl); + res[1]=std::get<1>(tpl); + res[2]=std::get<2>(tpl); return res; } %} diff --git a/Code/JavaWrappers/boost_tuple.i b/Code/JavaWrappers/boost_tuple.i deleted file mode 100644 index 6f3544687..000000000 --- a/Code/JavaWrappers/boost_tuple.i +++ /dev/null @@ -1,64 +0,0 @@ -/* -* -* -* Copyright (c) 2015, Greg Landrum -* 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. -* -* taken from this stackexchange answer: http://stackoverflow.com/a/12768318 -*/ -%{ -#include -%} - -namespace boost { - template - struct tuple; - - template <> - struct tuple { - }; - - template - struct tuple { - tuple(T1); - %extend { - T1 first() const { - return boost::get<0>(*$self); - } - } - }; - - template - struct tuple { - tuple(T1,T2); - %extend { - T1 first() const { - return boost::get<0>(*$self); - } - T2 second() const { - return boost::get<1>(*$self); - } - } - }; - - template - struct tuple { - tuple(T1,T2,T3); - %extend { - T1 first() const { - return boost::get<0>(*$self); - } - T2 second() const { - return boost::get<1>(*$self); - } - T3 third() const { - return boost::get<2>(*$self); - } - } - }; -} diff --git a/Code/JavaWrappers/std_tuple.i b/Code/JavaWrappers/std_tuple.i new file mode 100644 index 000000000..3e306b4b2 --- /dev/null +++ b/Code/JavaWrappers/std_tuple.i @@ -0,0 +1,63 @@ +/* +* +* +* Copyright (c) 2015-2022, Greg Landrum +* 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. +* +* adapted from this stackexchange answer: https://stackoverflow.com/a/72849351 +*/ +// [1] +%{ +#include +#include +%} + +// [2] +#define make_getter(pos, type) const type& get##pos() const { return std::get(*$self); } +#define make_setter(pos, type) void set##pos(const type& val) { std::get(*$self) = val; } +#define make_ctorargN(pos, type) , type v##pos +#define make_ctorarg(first, ...) const first& v0 FOR_EACH(make_ctorargN, __VA_ARGS__) + +// [3] +#define FE_0(...) +#define FE_1(action,a1) action(0,a1) +#define FE_2(action,a1,a2) action(0,a1) action(1,a2) +#define FE_3(action,a1,a2,a3) action(0,a1) action(1,a2) action(2,a3) +#define FE_4(action,a1,a2,a3,a4) action(0,a1) action(1,a2) action(2,a3) action(3,a4) +#define FE_5(action,a1,a2,a3,a4,a5) action(0,a1) action(1,a2) action(2,a3) action(3,a4) action(4,a5) + +#define GET_MACRO(_1,_2,_3,_4,_5,NAME,...) NAME +%define FOR_EACH(action,...) + GET_MACRO(__VA_ARGS__, FE_5, FE_4, FE_3, FE_2, FE_1, FE_0)(action,__VA_ARGS__) +%enddef + +// [4] +%define %std_tuple(Name, ...) +%rename(Name) std::tuple<__VA_ARGS__>; +namespace std { + struct tuple<__VA_ARGS__> { + // [5] + tuple(make_ctorarg(__VA_ARGS__)); + %extend { + // [6] + FOR_EACH(make_getter, __VA_ARGS__) + FOR_EACH(make_setter, __VA_ARGS__) + size_t __len__() const { return std::tuple_size>{}; } + %pythoncode %{ + # [7] + def __getitem__(self, n): + if n >= len(self): raise IndexError() + return getattr(self, 'get%d' % n)() + def __setitem__(self, n, val): + if n >= len(self): raise IndexError() + getattr(self, 'set%d' % n)(val) + %} + } + }; +} +%enddef \ No newline at end of file diff --git a/External/INCHI-API/inchi.cpp b/External/INCHI-API/inchi.cpp index b44f3e8ad..37e88a018 100644 --- a/External/INCHI-API/inchi.cpp +++ b/External/INCHI-API/inchi.cpp @@ -1,5 +1,6 @@ // -// Copyright (c) 2011, Novartis Institutes for BioMedical Research Inc. +// Copyright (c) 2011-2022 Novartis Institutes for BioMedical Research Inc. and +// other RDkit contributors // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -70,7 +71,7 @@ #include #include -#include +#include #include //#define DEBUG 1 @@ -1277,7 +1278,7 @@ RWMol* InchiToMol(const std::string& inchi, ExtraInchiReturnValues& rv, } // for isotopes of H - typedef std::vector> + typedef std::vector> ISOTOPES_t; ISOTOPES_t isotopes; if (retcode == inchi_Ret_OKAY || retcode == inchi_Ret_WARNING) { @@ -1314,11 +1315,11 @@ RWMol* InchiToMol(const std::string& inchi, ExtraInchiReturnValues& rv, // number of hydrogens atom->setNumExplicitHs(inchiAtom->num_iso_H[0]); if (inchiAtom->num_iso_H[1]) { - isotopes.push_back(boost::make_tuple(1, i, inchiAtom->num_iso_H[1])); + isotopes.push_back(std::make_tuple(1, i, inchiAtom->num_iso_H[1])); } else if (inchiAtom->num_iso_H[2]) { - isotopes.push_back(boost::make_tuple(2, i, inchiAtom->num_iso_H[2])); + isotopes.push_back(std::make_tuple(2, i, inchiAtom->num_iso_H[2])); } else if (inchiAtom->num_iso_H[3]) { - isotopes.push_back(boost::make_tuple(3, i, inchiAtom->num_iso_H[3])); + isotopes.push_back(std::make_tuple(3, i, inchiAtom->num_iso_H[3])); } // at this point the molecule has all Hs it should have. Set the // noImplicit flag so @@ -1397,8 +1398,7 @@ RWMol* InchiToMol(const std::string& inchi, ExtraInchiReturnValues& rv, // adding isotopes at the end for (auto& ii : isotopes) { - unsigned int isotope, aid, repeat; - boost::tie(isotope, aid, repeat) = ii; + auto [isotope, aid, repeat] = ii; aid = indexToAtomIndexMapping[aid]; for (unsigned int i = 0; i < repeat; i++) { // create atom