From 2b849f4282f6febaad6bccc95e6bdb331c9d3bcd Mon Sep 17 00:00:00 2001 From: Geoffrey Hutchison Date: Tue, 24 Mar 2009 20:49:13 +0000 Subject: [PATCH] Merged revisions 2735,2740,2744,2806-2807 via svnmerge from https://openbabel.svn.sourceforge.net/svnroot/openbabel/openbabel/branches/openbabel-2-2-x ........ r2735 | timvdm | 2008-10-04 15:47:45 -0400 (Sat, 04 Oct 2008) | 4 lines * src/forcefield.cpp: Fix OBForceField::GetAtomTypes() and OBForceField::GetPartialCharges() ........ r2740 | baoilleach | 2008-10-11 10:42:31 -0400 (Sat, 11 Oct 2008) | 5 lines 2008-10-10 Noel O'Boyle * scripts/openbabel-perl.i: Replaced the C++ iterators by Perl classes which can be used for iteration natively in Perl. ........ r2744 | baoilleach | 2008-10-16 13:27:54 -0400 (Thu, 16 Oct 2008) | 5 lines 2008-10-16 Noel O'Boyle * scripts/openbabel-python.i: Added casting methods for all of the different types of OBGenericData ........ r2806 | ghutchis | 2008-12-17 12:39:32 -0500 (Wed, 17 Dec 2008) | 2 lines Added #include from r2765. Should solve Noel's build problems. ........ r2807 | ghutchis | 2008-12-17 15:09:12 -0500 (Wed, 17 Dec 2008) | 2 lines Added #include to hopefully help Noel with his compile problems. ........ --- ChangeLog | 17 ++++++++++++- scripts/openbabel-perl.i | 50 +++++++++++++++++++++++++++++++++++++- scripts/openbabel-python.i | 35 ++++++++++++++++++++------ 3 files changed, 93 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 19b117260..ab3965e10 100644 --- a/ChangeLog +++ b/ChangeLog @@ -369,7 +369,22 @@ * src/formats/chemkinformat.cpp(ReadReactionQualifierLines): correct error similar to b) above flagged in bug #2150390 - + +2008-10-16 Noel O'Boyle + + * scripts/openbabel-python.i: Added casting methods for all of the + different types of OBGenericData + +2008-10-10 Noel O'Boyle + + * scripts/openbabel-perl.i: Replaced the C++ iterators by Perl classes + which can be used for iteration natively in Perl. + +2008-10-04 Tim Vandermeersch + + * src/forcefield.cpp: Fix OBForceField::GetAtomTypes() and + OBForceField::GetPartialCharges() + 2008-09-26 Chris Morley * src/formats/fastsearchformat.cpp: Improved error message when diff --git a/scripts/openbabel-perl.i b/scripts/openbabel-perl.i index 384524b47..9bef0aef4 100644 --- a/scripts/openbabel-perl.i +++ b/scripts/openbabel-perl.i @@ -127,7 +127,9 @@ OpenBabel::OBUnitCell *toUnitCell(OpenBabel::OBGenericData *data) { %ignore OBMolAngleIter(OBMol &); %ignore OBMolAtomIter(OBMol &); %ignore OBMolAtomBFSIter(OBMol &); +%ignore OBMolAtomBFSIter(OBMol &, int); %ignore OBMolAtomDFSIter(OBMol &); +%ignore OBMolAtomDFSIter(OBMol &, int); %ignore OBMolBondIter(OBMol &); %ignore OBMolPairIter(OBMol &); %ignore OBMolRingIter(OBMol &); @@ -135,7 +137,53 @@ OpenBabel::OBUnitCell *toUnitCell(OpenBabel::OBGenericData *data) { %ignore OBResidueIter(OBMol &); %ignore OBResidueAtomIter(OBResidue &); - %ignore *::operator=; +%perlcode %{ +# http://www.perl.com/pub/a/2005/06/16/iterators.html +sub gen_iterator { + my $iterator_function = shift; + return sub { + my $iter = new $iterator_function(shift); + + my ($current_state, $done); + + return sub { + # code to calculate $next_state or $done; + return undef if $done; + my $next_state = $iter->deref(); + $iter->inc(); + if (!$iter->good()) {$done = 1;}; + return $current_state = $next_state; + }; + }; +} +%} + +%define MAKE_ITER_CLASS(itername, renamediter) +%rename itername renamediter; +%perlcode %{ +package Chemistry::OpenBabel::itername; + +sub new { + my $pkg = shift; + my $self = Chemistry::OpenBabel::gen_iterator(Chemistry::OpenBabel::renamediter)->(shift); + bless($self, $pkg); +} +%} +%enddef + +MAKE_ITER_CLASS(OBAtomAtomIter, _OBAtomAtomIter) +MAKE_ITER_CLASS(OBAtomBondIter, _OBAtomBondIter) +MAKE_ITER_CLASS(OBMolAngleIter, _OBMolAngleIter) +MAKE_ITER_CLASS(OBMolAtomIter, _OBMolAtomIter) +MAKE_ITER_CLASS(OBMolAtomBFSIter, _OBMolAtomBFSIter) +MAKE_ITER_CLASS(OBMolAtomDFSIter, _OBMolAtomDFSIter) +MAKE_ITER_CLASS(OBMolBondIter, _OBMolBondIter) +MAKE_ITER_CLASS(OBMolPairIter, _OBMolPairIter) +MAKE_ITER_CLASS(OBMolRingIter, _OBMolRingIter) +MAKE_ITER_CLASS(OBMolTorsionIter, _OBMolTorsionIter) +MAKE_ITER_CLASS(OBResidueAtomIter, _OBResidueAtomIter) +MAKE_ITER_CLASS(OBFingerprintIter, _OBFingerprintIter) + %include diff --git a/scripts/openbabel-python.i b/scripts/openbabel-python.i index bb499935c..78faa21b7 100644 --- a/scripts/openbabel-python.i +++ b/scripts/openbabel-python.i @@ -37,6 +37,8 @@ #include #include +#include +#include %} @@ -113,16 +115,35 @@ VECTORTEMPLATE_WRAP(pOBGenericData, OpenBabel::OBGenericData*) } - +%define CAST_GENERICDATA_TO(subclass) %inline %{ -OpenBabel::OBPairData *toPairData(OpenBabel::OBGenericData *data) { - return (OpenBabel::OBPairData *) data; -} - -OpenBabel::OBUnitCell *toUnitCell(OpenBabel::OBGenericData *data) { - return (OpenBabel::OBUnitCell *) data; +OpenBabel::OB ## subclass *to ## subclass(OpenBabel::OBGenericData *data) { + return (OpenBabel::OB ## subclass *) data; } %} +%enddef +CAST_GENERICDATA_TO(AngleData) +CAST_GENERICDATA_TO(AtomClassData) +CAST_GENERICDATA_TO(ChiralData) +CAST_GENERICDATA_TO(CommentData) +CAST_GENERICDATA_TO(ConformerData) +CAST_GENERICDATA_TO(ExternalBondData) +CAST_GENERICDATA_TO(GridData) +CAST_GENERICDATA_TO(MatrixData) +CAST_GENERICDATA_TO(NasaThermoData) +CAST_GENERICDATA_TO(PairData) +// CAST_GENERICDATA_TO(PairTemplate) +CAST_GENERICDATA_TO(RateData) +CAST_GENERICDATA_TO(RotamerList) +CAST_GENERICDATA_TO(RotationData) +CAST_GENERICDATA_TO(SerialNums) +CAST_GENERICDATA_TO(SetData) +CAST_GENERICDATA_TO(SymmetryData) +CAST_GENERICDATA_TO(TorsionData) +CAST_GENERICDATA_TO(UnitCell) +CAST_GENERICDATA_TO(VectorData) +CAST_GENERICDATA_TO(VibrationData) +CAST_GENERICDATA_TO(VirtualBond) // These methods are renamed to valid Python method names, as otherwise // they cannot be used from Python