%module openbabel_R %{ #include // 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 #include #include %} #ifdef HAVE_EIGEN %{ #include #include #include %} #endif %include "std_map.i" %include "std_vector.i" %include "std_string.i" %include "std_pair.i" %include "cpointer.i" %pointer_class(std::string,stringp) %typemap("rtype") const std::string & "character"; //add typemap for const references %typemap("rtype") std::string *, std::string &; // remove erroneous typemap in swig libraries %typemap(scoercein) const std::string & %{ $input = as($input, "character"); %} %typemap(scoercein) std::string *, std::string &; %inline %{ #include std::istream* istreamFromString(std::string str){ return new std::istringstream(str); } std::istream* istreamFromFile(const char *filename) { return new std::ifstream(filename); } std::ostream* ostreamToString(){ return new std::ostringstream(); } std::ostream* ostreamToFile(const char *filename) { return new std::ofstream(filename); } const std::string stringFromOstream(const std::ostringstream* os){ // return (os->str()).c_str(); return os->str(); } %} 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 >::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::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 >::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 %{ // cant use macro -- AliasData not OBAliasData OpenBabel::AliasData *toAliasData(OpenBabel::OBGenericData *data) { return (OpenBabel::AliasData*) data; } %} 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) %ignore *::operator=; %ignore *::operator==; %ignore *::operator!=; %ignore *::operator<<; %ignore *::operator(); %ignore *::operator*; %ignore *::operator*=; %ignore *::operator+; %ignore *::operator+=; %ignore *::operator-; %ignore *::operator-=; %ignore *::operator++; %ignore *::operator--; %ignore *::operator/; %ignore *::operator/=; %ignore *::operator bool; %ignore *::operator[]; %import %warnfilter(516) OpenBabel::OBElementTable; // Ignoring std::string methods in favour of char* ones %include %include %include %warnfilter(516) OpenBabel::vector3; // Using the const x(), y() and z() in favour of the non-const %include %warnfilter(503) OpenBabel::matrix3x3; // Not wrapping any of the overloaded operators %include %include %warnfilter(516) OpenBabel::SpaceGroup; // Ignoring std::string methods in favour of char* ones %include # CloneData should be used instead of the following method %ignore OpenBabel::OBBase::SetData; %ignore OpenBabel::OBBase::GetData(char const *); %ignore OpenBabel::OBBase::HasData(char const *); %include %warnfilter(516) OpenBabel::OBPairData; // Ignoring std::string methods in favour of char* ones %warnfilter(516) OpenBabel::OBSetData; %warnfilter(516) OpenBabel::OBCommentData; %warnfilter(516) OpenBabel::OBUnitCell; // Ignoring const methods in favour of non-const ones %include %include %include %include // To avoid warning in plugin.h about "Nothing known about std::binary_function" namespace std { template class binary_function {}; } %template(dummy) std::binary_function ; %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 %ignore OpenBabel::OBConversion::FindFormat(const char *); %ignore OpenBabel::OBConversion::FormatFromExt(const char *); %include %include %include %typemap(javacode) OpenBabel::OBAtom %{ private int currentDepth = 0; public void SetCurrentDepth(int d) {currentDepth = d;} public int GetCurrentDepth() {return currentDepth;} %} %ignore OpenBabel::OBAtom::GetVector() const; %ignore OpenBabel::OBAtom::IsHydrogen const; %ignore OpenBabel::OBAtom::SetType(char const *); %include %ignore OpenBabel::OBBond::GetBeginAtom() const; %ignore OpenBabel::OBBond::GetEndAtom() const; %include %include // Remove C++ iterators %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 %warnfilter(516) OpenBabel::OBSmartsPattern; // Using non-const versions of GetSMARTS %include %warnfilter(516) OpenBabel::AliasData; // Ignoring std::string methods in favour of char* ones %include %include %ignore OpenBabel::FptIndex; %include %ignore OpenBabel::OBDescriptor::LessThan; %include %include %include %include %include %include %include %include %include %warnfilter(503) OpenBabel::OBBitVec; // Not wrapping any of the overloaded operators %include # Ignore shadowed method %ignore OpenBabel::OBRotor::GetRotAtoms() const; %include %ignore OpenBabel::Swab; %include %include #ifdef HAVE_EIGEN # Ignore shadowed methods %ignore OpenBabel::OBForceField::VectorSubtract(const double *const, const double *const, double *); %ignore OpenBabel::OBForceField::VectorMultiply(const double *const, const double, double *); %warnfilter(516) OpenBabel::OBForceField; // Ignoring std::string methods in favour of char* ones %include %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 &); %ignore SpaceGroup::RegisterSpaceGroup; %define WRAPITERATOR(NAME, RETURNS, OPTIONAL) %rename(_next) OpenBabel::NAME::next; %rename(inc) OpenBabel::NAME::operator++; %rename(HasMore) OpenBabel::NAME::operator bool; %typemap(javainterfaces) OpenBabel::NAME "Iterable, Iterator"; %typemap(javaimports) OpenBabel::NAME " import org.openbabel.RETURNS; import java.util.Iterator;" %typemap(javacode) OpenBabel::NAME %{ public Iterator iterator() { return this; } public boolean hasNext() { return HasMore(); } public RETURNS next() { RETURNS atom = __ref__(); OPTIONAL inc(); return atom; } public void remove() { } %} %enddef WRAPITERATOR(OBMolAtomIter, OBAtom, ); WRAPITERATOR(OBMolAtomDFSIter, OBAtom, ); WRAPITERATOR(OBMolAtomBFSIter, OBAtom, atom.SetCurrentDepth(CurrentDepth());); WRAPITERATOR(OBMolBondIter, OBBond, ); WRAPITERATOR(OBMolAngleIter, vectorUnsignedInt, ); WRAPITERATOR(OBAtomAtomIter, OBAtom, ) WRAPITERATOR(OBAtomBondIter, OBBond, ); WRAPITERATOR(OBMolRingIter, OBRing, ); WRAPITERATOR(OBMolTorsionIter, vectorUnsignedInt, ); WRAPITERATOR(OBResidueIter, OBResidue, ); WRAPITERATOR(OBResidueAtomIter, OBAtom, ); WRAPITERATOR(OBMolPairIter, vectorUnsignedInt, ); %include %include "stereo.i"