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  <baoilleach@gmail.com>
  
  	* 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  <baoilleach@gmail.com>
  
  	* 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 <limits> 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 <limits> to hopefully help Noel with his compile problems.
........
This commit is contained in:
Geoffrey Hutchison
2009-03-24 20:49:13 +00:00
parent c6ae29846f
commit 2b849f4282
3 changed files with 93 additions and 9 deletions
+49 -1
View File
@@ -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 <openbabel/obiter.h>
+28 -7
View File
@@ -37,6 +37,8 @@
#include <openbabel/alias.h>
#include <openbabel/atomclass.h>
#include <openbabel/kinetics.h>
#include <openbabel/rotamer.h>
%}
@@ -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