X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=code_ruby%2Flib%2Fmaasha%2Fseq%2Flevenshtein.rb;h=2e34de0712831f51e6b48fe91abcd07db5720a6d;hb=575ecca03ff868d1834be3390b2ffdf5965eec08;hp=b9f824308751ce19af2806346d8a459ec5c1dec3;hpb=b2ea0b5a51a558478af60e9df4c643dd58552086;p=biopieces.git diff --git a/code_ruby/lib/maasha/seq/levenshtein.rb b/code_ruby/lib/maasha/seq/levenshtein.rb index b9f8243..2e34de0 100644 --- a/code_ruby/lib/maasha/seq/levenshtein.rb +++ b/code_ruby/lib/maasha/seq/levenshtein.rb @@ -23,11 +23,14 @@ # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< require 'inline' +require 'maasha/seq/ambiguity' # Class to calculate the Levenshtein distance between two # given strings. # http://en.wikipedia.org/wiki/Levenshtein_distance class Levenshtein + extend Ambiguity + BYTES_IN_INT = 4 def self.distance(s, t) @@ -45,34 +48,7 @@ class Levenshtein # >>>>>>>>>>>>>>> RubyInline C code <<<<<<<<<<<<<<< inline do |builder| - # Macro for matching nucleotides including ambiguity codes. - builder.prefix %{ - #define MATCH(A,B) ((bitmap[A] & bitmap[B]) != 0) - } - - # Bitmap for matching nucleotides including ambiguity codes. - # For each value bits are set from the left: bit pos 1 for A, - # bit pos 2 for T, bit pos 3 for C, and bit pos 4 for G. - builder.prefix %{ - char bitmap[256] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1,14, 4,11, 0, 0, 8, 7, 0, 0,10, 0, 5,15, 0, - 0, 0, 9,12, 2, 2,13, 3, 0, 6, 0, 0, 0, 0, 0, 0, - 0, 1,14, 4,11, 0, 0, 8, 7, 0, 0,10, 0, 5,15, 0, - 0, 0, 9,12, 2, 2,13, 3, 0, 6, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }; - } + add_ambiguity_macro(builder) builder.prefix %{ unsigned int min(unsigned int a, unsigned int b, unsigned int c)