mirror of
https://github.com/rdkit/rdkit.git
synced 2026-06-03 21:44:30 +08:00
mem fixes (#8276)
This commit is contained in:
committed by
GitHub
parent
ed4a44280a
commit
1a67fefcc6
@@ -837,16 +837,19 @@ bool embedPoints(RDGeom::PointPtrVect *positions, detail::EmbedArgs eargs,
|
||||
embedParams.basinThresh = 1e8;
|
||||
}
|
||||
|
||||
std::unique_ptr<RDKit::rng_type> generator;
|
||||
std::unique_ptr<RDKit::uniform_double> distrib;
|
||||
std::unique_ptr<RDKit::double_source_type> rngMgr;
|
||||
|
||||
RDKit::double_source_type *rng = nullptr;
|
||||
RDKit::rng_type *generator = nullptr;
|
||||
RDKit::uniform_double *distrib = nullptr;
|
||||
CHECK_INVARIANT(seed >= -1,
|
||||
"random seed must either be positive, zero, or negative one");
|
||||
if (seed > -1) {
|
||||
generator = new RDKit::rng_type(42u);
|
||||
generator.reset(new RDKit::rng_type(42u));
|
||||
generator->seed(seed);
|
||||
distrib = new RDKit::uniform_double(0.0, 1.0);
|
||||
rng = new RDKit::double_source_type(*generator, *distrib);
|
||||
distrib.reset(new RDKit::uniform_double(0.0, 1.0));
|
||||
rngMgr.reset(new RDKit::double_source_type(*generator, *distrib));
|
||||
rng = rngMgr.get();
|
||||
} else {
|
||||
rng = &RDKit::getDoubleRandomSource();
|
||||
}
|
||||
@@ -987,11 +990,7 @@ bool embedPoints(RDGeom::PointPtrVect *positions, detail::EmbedArgs eargs,
|
||||
}
|
||||
|
||||
} // while
|
||||
if (seed > -1) {
|
||||
delete rng;
|
||||
delete generator;
|
||||
delete distrib;
|
||||
}
|
||||
|
||||
return gotCoords;
|
||||
}
|
||||
|
||||
|
||||
@@ -464,7 +464,8 @@ TEST_CASE("github #6679: suspicious value for atom pair code calculation") {
|
||||
{"C[I]", 7918328}, {"C[Te]", 7918456}, {"C[Sb]", 7918584},
|
||||
{"C[Sn]", 7918200}, {"C[Xe]", 7918200}, {"C[Li]", 7918200},
|
||||
};
|
||||
auto fpg = AtomPair::getAtomPairGenerator<std::uint64_t>();
|
||||
std::unique_ptr<FingerprintGenerator<std::uint64_t>> fpg{
|
||||
AtomPair::getAtomPairGenerator<std::uint64_t>()};
|
||||
for (const auto &pr : data) {
|
||||
auto mol = v2::SmilesParse::MolFromSmiles(pr.first);
|
||||
REQUIRE(mol);
|
||||
|
||||
31
External/INCHI-API/inchi.cpp
vendored
31
External/INCHI-API/inchi.cpp
vendored
@@ -1760,7 +1760,7 @@ std::string MolToInchi(const ROMol &mol, ExtraInchiReturnValues &rv,
|
||||
unsigned int nBonds = m->getNumBonds();
|
||||
|
||||
// Make array of inchi_atom (storage space)
|
||||
auto *inchiAtoms = new inchi_Atom[nAtoms];
|
||||
std::unique_ptr<inchi_Atom[]> inchiAtoms(new inchi_Atom[nAtoms]);
|
||||
// and a vector for stereo0D
|
||||
std::vector<inchi_Stereo0D> stereo0DEntries;
|
||||
|
||||
@@ -2048,24 +2048,23 @@ std::string MolToInchi(const ROMol &mol, ExtraInchiReturnValues &rv,
|
||||
}
|
||||
|
||||
// create stereo0D
|
||||
inchi_Stereo0D *stereo0Ds;
|
||||
std::unique_ptr<inchi_Stereo0D[]> stereo0Ds;
|
||||
if (stereo0DEntries.size()) {
|
||||
stereo0Ds = new inchi_Stereo0D[stereo0DEntries.size()];
|
||||
stereo0Ds.reset(new inchi_Stereo0D[stereo0DEntries.size()]);
|
||||
for (unsigned int i = 0; i < stereo0DEntries.size(); i++) {
|
||||
stereo0Ds[i] = stereo0DEntries[i];
|
||||
}
|
||||
} else {
|
||||
stereo0Ds = nullptr;
|
||||
}
|
||||
|
||||
// create input
|
||||
inchi_Input input;
|
||||
input.atom = inchiAtoms;
|
||||
input.stereo0D = stereo0Ds;
|
||||
input.atom = inchiAtoms.get();
|
||||
input.stereo0D = stereo0Ds.get();
|
||||
std::unique_ptr<char[]> _options;
|
||||
if (options) {
|
||||
char *_options = new char[strlen(options) + 1];
|
||||
fixOptionSymbol(options, _options);
|
||||
input.szOptions = _options;
|
||||
_options.reset(new char[strlen(options) + 1]);
|
||||
fixOptionSymbol(options, _options.get());
|
||||
input.szOptions = _options.get();
|
||||
} else {
|
||||
input.szOptions = nullptr;
|
||||
}
|
||||
@@ -2098,14 +2097,6 @@ std::string MolToInchi(const ROMol &mol, ExtraInchiReturnValues &rv,
|
||||
// clean up
|
||||
FreeINCHI(&output);
|
||||
}
|
||||
if (input.szOptions) {
|
||||
delete[] input.szOptions;
|
||||
}
|
||||
|
||||
delete[] inchiAtoms;
|
||||
if (stereo0Ds) {
|
||||
delete[] stereo0Ds;
|
||||
}
|
||||
|
||||
return inchi;
|
||||
}
|
||||
@@ -2153,7 +2144,9 @@ std::string InchiToInchiKey(const std::string &inchi) {
|
||||
char inchiKey[29];
|
||||
char xtra1[65], xtra2[65];
|
||||
int ret = 0;
|
||||
{ ret = GetINCHIKeyFromINCHI(inchi.c_str(), 0, 0, inchiKey, xtra1, xtra2); }
|
||||
{
|
||||
ret = GetINCHIKeyFromINCHI(inchi.c_str(), 0, 0, inchiKey, xtra1, xtra2);
|
||||
}
|
||||
std::string error;
|
||||
switch (ret) {
|
||||
case INCHIKEY_OK:
|
||||
|
||||
Reference in New Issue
Block a user