%module openbabel %{ // used to set import/export for Cygwin DLLs #ifdef WIN32 #define USING_OBDLL #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include %} #ifdef HAVE_EIGEN3 %{ #include #include %} #endif %include "std_map.i" %include "std_vector.i" %include "std_string.i" %include "std_pair.i" namespace std { %define VVTEMPLATE_WRAP(name, T) %feature("ignore") vector< vector >::append; %feature("ignore") vector< vector >::assign; %feature("ignore") vector< vector >::back; %feature("ignore") vector< vector >::begin; %feature("ignore") vector< vector >::capacity; %feature("ignore") vector< vector >::clear; %feature("ignore") vector< vector >::empty; %feature("ignore") vector< vector >::end; %feature("ignore") vector< vector >::erase; %feature("ignore") vector< vector >::front; %feature("ignore") vector< vector >::get_allocator; %feature("ignore") vector< vector >::insert; %feature("ignore") vector< vector >::pop; %feature("ignore") vector< vector >::pop_back; %feature("ignore") vector< vector >::push_back; %feature("ignore") vector< vector >::rbegin; %feature("ignore") vector< vector >::rend; %feature("ignore") vector< vector >::reserve; %feature("ignore") vector< vector >::resize; //%feature("ignore") vector< vector >::size; %feature("ignore") vector< vector >::swap; %template(vectorv ## name) vector< vector >; %enddef %define VECTORTEMPLATE_WRAP(vectorname, T) %feature("ignore") vector::append; %feature("ignore") vector::assign; %feature("ignore") vector::back; %feature("ignore") vector::begin; %feature("ignore") vector::capacity; %feature("ignore") vector::clear; %feature("ignore") vector::empty; %feature("ignore") vector::end; %feature("ignore") vector::erase; %feature("ignore") vector::front; %feature("ignore") vector::get_allocator; %feature("ignore") vector::insert; %feature("ignore") vector::pop; %feature("ignore") vector::pop_back; %feature("ignore") vector::push_back; %feature("ignore") vector::rbegin; %feature("ignore") vector::rend; %feature("ignore") vector::reserve; %feature("ignore") vector::resize; //%feature("ignore") vector::size; %feature("ignore") vector::swap; %template(vector ## vectorname) vector; %enddef %define VECTORPAIRTEMPLATE_WRAP(vectorname, T1, T2) %feature("ignore") vector< pair >::append; %feature("ignore") vector< pair >::assign; %feature("ignore") vector< pair >::back; %feature("ignore") vector< pair >::begin; %feature("ignore") vector< pair >::capacity; %feature("ignore") vector< pair >::clear; %feature("ignore") vector< pair >::empty; %feature("ignore") vector< pair >::end; %feature("ignore") vector< pair >::erase; %feature("ignore") vector< pair >::front; %feature("ignore") vector< pair >::get_allocator; %feature("ignore") vector< pair >::insert; %feature("ignore") vector< pair >::pop; %feature("ignore") vector< pair >::pop_back; %feature("ignore") vector< pair >::push_back; %feature("ignore") vector< pair >::rbegin; %feature("ignore") vector< pair >::rend; %feature("ignore") vector< pair >::reserve; %feature("ignore") vector< pair >::resize; //%feature("ignore") vector< pair >::size; %feature("ignore") vector< pair >::swap; %template(vpair ## vectorname) vector< pair >; %enddef VECTORTEMPLATE_WRAP(Int, int) VECTORTEMPLATE_WRAP(UnsignedInt, unsigned int) VVTEMPLATE_WRAP(Int, int) VECTORTEMPLATE_WRAP(Double, double) VECTORTEMPLATE_WRAP(String, std::string) VECTORTEMPLATE_WRAP(Vector3, OpenBabel::vector3) VVTEMPLATE_WRAP(Vector3, OpenBabel::vector3) VECTORTEMPLATE_WRAP(OBMol, OpenBabel::OBMol) VECTORTEMPLATE_WRAP(OBBond, OpenBabel::OBBond) VECTORTEMPLATE_WRAP(OBResidue, OpenBabel::OBResidue) VECTORTEMPLATE_WRAP(OBRing, OpenBabel::OBRing) VECTORTEMPLATE_WRAP(pOBRing, OpenBabel::OBRing*) VECTORTEMPLATE_WRAP(pOBGenericData, OpenBabel::OBGenericData*) VECTORTEMPLATE_WRAP(pOBInternalCoord, OpenBabel::OBInternalCoord*) %template(pairUIntUInt) pair; VECTORPAIRTEMPLATE_WRAP(UIntUInt, unsigned int, unsigned int); %template(vvpairUIntUInt) vector< vector< pair > >; } %define CAST_GENERICDATA_TO(subclass) %inline %{ OpenBabel::OB ## subclass *to ## subclass(OpenBabel::OBGenericData *data) { return (OpenBabel::OB ## subclass *) data; } %} %enddef %inline %{ // can't use macro -- AliasData not OBAliasData OpenBabel::AliasData *toAliasData(OpenBabel::OBGenericData *data) { return (OpenBabel::AliasData*) data; } %} CAST_GENERICDATA_TO(AngleData) 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) %rename(add) *::operator+=; %ignore *::operator=; %ignore *::operator[]; %import %include %include %include %warnfilter(503) OpenBabel::matrix3x3; // Not wrapping any of the overloaded operators %include %include %include %warnfilter(503) OpenBabel::OBBitVec; // Not wrapping any of the overloaded operators %include // CloneData should be used instead of the following method %ignore OpenBabel::OBBase::SetData; %include %include %include %include %include %include %include // To avoid warning in oberror.h about "Nothing known about std::stringbuf" namespace std { class stringbuf {}; } %warnfilter(503) OpenBabel::OBError; // Not wrapping any of the overloaded operators %include %include %include %include %include %include %include %include %define IGNORE_ITER(parent, iteree) %ignore OpenBabel::parent::Begin ## iteree ## s; %ignore OpenBabel::parent::End ## iteree ## s; %ignore OpenBabel::parent::Begin ## iteree; %ignore OpenBabel::parent::Next ## iteree; %enddef IGNORE_ITER(OBMol, Bond) IGNORE_ITER(OBMol, Atom) IGNORE_ITER(OBMol, Residue) %include %include %include %include %ignore OpenBabel::FptIndex; %include %ignore OpenBabel::OBDescriptor::LessThan; %include // Ignore shadowed methods %ignore OpenBabel::OBForceField::VectorSubtract(const double *const, const double *const, double *); %ignore OpenBabel::OBForceField::VectorMultiply(const double *const, const double, double *); %include %include %include %include %include %include %include %include %include // Ignore shadowed method %ignore OpenBabel::OBRotor::GetRotAtoms() const; %include %ignore OpenBabel::Swab; %include %include #ifdef HAVE_EIGEN3 %include %include #endif // The following %ignores avoid warning messages due to shadowed classes. // This does not imply a loss of functionality as (in this case) // the shadowed class is identical (from the point of view of SWIG) to // the shadowing class. // This is because C++ references (&) are transformed by SWIG back into // pointers, so that OBAtomIter(OBMol &) would be treated the same as // OBAtomIter(OBMol *). %ignore OBAtomAtomIter(OBAtom &); %ignore OBAtomBondIter(OBAtom &); %ignore OBMolAngleIter(OBMol &); %ignore OBMolAtomIter(OBMol &); %ignore OBMolAtomBFSIter(OBMol &); %ignore OBMolAtomDFSIter(OBMol &); %ignore OBMolAtomBFSIter(OBMol &, int); %ignore OBMolAtomDFSIter(OBMol &, int); %ignore OBMolBondIter(OBMol &); %ignore OBMolBondBFSIter(OBMol &); %ignore OBMolBondBFSIter(OBMol &, int); %ignore OBMolPairIter(OBMol &); %ignore OBMolRingIter(OBMol &); %ignore OBMolTorsionIter(OBMol &); %ignore OBResidueIter(OBMol &); %ignore OBResidueAtomIter(OBResidue &); %include // Functions to set the log file to std::cout and std::cerr %ignore OBForceField::SetLogFile(std::ostream *pos); %extend OpenBabel::OBForceField { void SetLogToStdOut() { self->SetLogFile(&std::cout); } void SetLogToStdErr() { self->SetLogFile(&std::cerr); } }; %extend OpenBabel::OBMol { void SetTorsion(int i, int j, int k, int l, double ang) { self->SetTorsion(self->GetAtom(i), self->GetAtom(j), self->GetAtom(k), self->GetAtom(l), ang); } };