diff --git a/Code/JavaWrappers/ExplicitBitVect.i b/Code/JavaWrappers/ExplicitBitVect.i index b6d5b0230..2d33dbd03 100644 --- a/Code/JavaWrappers/ExplicitBitVect.i +++ b/Code/JavaWrappers/ExplicitBitVect.i @@ -43,6 +43,34 @@ %ignore ExplicitBitVect::dp_bits; %ignore ExplicitBitVect::getOnBits (IntVect& v) const; %ignore ExplicitBitVect::ExplicitBitVect(unsigned int,bool); + +#ifdef SWIGJAVA + +%template(UChar_Vect) std::vector; +%typemap(jni) std::string ExplicitBitVect::toByteArray "jbyteArray" +%typemap(jtype) std::string ExplicitBitVect::toByteArray "byte[]" +%typemap(jstype) std::string ExplicitBitVect::toByteArray "byte[]" +%typemap(javaout) std::string ExplicitBitVect::toByteArray { + return $jnicall; +} +%typemap(out) std::string ExplicitBitVect::toByteArray { + $result = JCALL1(NewByteArray, jenv, $1.size()); + JCALL4(SetByteArrayRegion, jenv, $result, 0, $1.size(), (const jbyte*)$1.c_str()); +} + +#endif + +%typemap(javacode) ExplicitBitVect %{ + public static ExplicitBitVect fromByteArray(byte[] fp) { + UChar_Vect vec = new UChar_Vect(); + vec.reserve(fp.length); + for (int size=0;size %newobject ExplicitBitVect::getOnBits; %extend ExplicitBitVect { @@ -53,3 +81,18 @@ } } +#ifdef SWIGJAVA + +%extend ExplicitBitVect { + const std::string toByteArray() { + return ($self)->toString(); + } + + ExplicitBitVect(const std::vector & data ) { + std::string str(data.begin(), data.end()); + return new ExplicitBitVect(str); + } +} + +#endif + diff --git a/Code/JavaWrappers/MorganFingerprints.i b/Code/JavaWrappers/MorganFingerprints.i index f79c0b7fd..53b0bf218 100644 --- a/Code/JavaWrappers/MorganFingerprints.i +++ b/Code/JavaWrappers/MorganFingerprints.i @@ -62,5 +62,9 @@ SWIG_STD_VECTOR_SPECIALIZE_MINIMUM(UInt_Pair_Vect, std::vector< std::pair; %template(TanimotoSimilaritySIVi32) RDKit::TanimotoSimilarity; %template(TanimotoSimilaritySIVi64) RDKit::TanimotoSimilarity; +%template(TverskySimilarity) RDKit::TverskySimilarity; +%template(TverskySimilarity) RDKit::TverskySimilarity; +%template(TverskySimilarity) RDKit::TverskySimilarity; + %include "MorganFingerprints.h" diff --git a/Code/JavaWrappers/gmwrapper/src-test/org/RDKit/FingerprintsTests.java b/Code/JavaWrappers/gmwrapper/src-test/org/RDKit/FingerprintsTests.java index 7ebfea9a1..c1a06c23e 100644 --- a/Code/JavaWrappers/gmwrapper/src-test/org/RDKit/FingerprintsTests.java +++ b/Code/JavaWrappers/gmwrapper/src-test/org/RDKit/FingerprintsTests.java @@ -39,6 +39,7 @@ import org.junit.Test; public class FingerprintsTests extends GraphMolTest { public void compareVectors(Int_Vect v1, Int_Vect v2) { + assertEquals(v1.size(), v2.size()); for (int i = 0; i < v1.size(); i++) { assertEquals(v1.get(i),v2.get(i)); } @@ -138,6 +139,18 @@ public class FingerprintsTests extends GraphMolTest { } } + @Test + public void testToByteArray() { + String smiles = "Cc2nc1ccccc1o2"; + ROMol mol = RWMol.MolFromSmiles(smiles); + ExplicitBitVect fp1 = RDKFuncs.PatternFingerprintMol(mol, 2048); + byte[] fpBytes = fp1.toByteArray(); + ExplicitBitVect fp2 = ExplicitBitVect.fromByteArray(fpBytes); + Int_Vect fp1Bits = fp1.getOnBits(); + Int_Vect fp2Bits = fp2.getOnBits(); + compareVectors(fp1Bits, fp2Bits); + } + public static void main(String args[]) { org.junit.runner.JUnitCore.main("org.RDKit.FingerprintsTests"); }