/fingerprint/R/ops.R

http://github.com/rajarshi/cdkr · R · 54 lines · 46 code · 8 blank · 0 comment · 8 complexity · 8972e18553803e569bf2eb11d586f7af MD5 · raw file

  1. setMethod("&", c("fingerprint", "fingerprint"),
  2. function(e1, e2) {
  3. if (e1@nbit != e2@nbit)
  4. stop("fp1 & fp2 must of the same bit length")
  5. andbits <- intersect(e1@bits, e2@bits)
  6. new("fingerprint",
  7. bits=andbits,
  8. nbit=e1@nbit,
  9. provider="R")
  10. })
  11. setMethod("|", c("fingerprint", "fingerprint"),
  12. function(e1, e2) {
  13. if (e1@nbit != e2@nbit)
  14. stop("fp1 & fp2 must of the same bit length")
  15. orbits <- union(e1@bits, e2@bits)
  16. new("fingerprint",
  17. bits=orbits,
  18. nbit=e1@nbit,
  19. provider="R")
  20. })
  21. setMethod("!", c("fingerprint"),
  22. function(x) {
  23. bs <- 1:(x@nbit)
  24. if (length(x@bits) > 0) b <- bs[ -x@bits ]
  25. else b <- bs
  26. ret <- new("fingerprint",
  27. bits=b,
  28. nbit=x@nbit,
  29. provider="R")
  30. return(ret)
  31. })
  32. setMethod("xor", c("fingerprint", "fingerprint"),
  33. function(x,y) {
  34. if (x@nbit != y@nbit)
  35. stop("e1 & e2 must of the same bit length")
  36. tmp1 <- rep(FALSE, x@nbit)
  37. tmp2 <- rep(FALSE, y@nbit)
  38. tmp1[x@bits] <- TRUE
  39. tmp2[y@bits] <- TRUE
  40. tmp3 <- xor(tmp1,tmp2)
  41. xorbits <- which(tmp3)
  42. new("fingerprint",
  43. bits=xorbits,
  44. nbit=x@nbit,
  45. provider="R")
  46. })