Changeset 3087 for trunk


Ignore:
Timestamp:
Apr 28, 2013, 10:57:26 AM (6 years ago)
Author:
cameron
Message:

pablo.match library support

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/pabloSupport.hpp

    r3021 r3087  
    118118}
    119119
    120 
     120IDISA_ALWAYS_INLINE BitBlock pablo_blk_match(uint8_t bytedata[], const char match_str[], BitBlock v, int len) {
     121        union {BitBlock bitblock; ScanWord elems[sizeof(BitBlock)/sizeof(ScanWord)];} u;
     122        u.bitblock = v;
     123        int pos;
     124        ScanWord s, t, bit;
     125        for (unsigned int i = 0; i < sizeof(BitBlock)/sizeof(ScanWord); i++) {
     126                s = u.elems[i];
     127                while (s != 0) {
     128                        pos = scan_forward_zeroes(s);
     129                        t = s;
     130                        s = s & (s - 1); // clear rightmost bit
     131                        if (memcmp((void *) &bytedata[pos], (void *) match_str, len)) {
     132                                // Strings do not match; filter the result.
     133                                bit = s ^ t;
     134                                u.elems[i] ^= bit;
     135                        }
     136                }
     137        }
     138        return u.bitblock;
     139}
    121140
    122141#endif // PABLOSUPPORT_HPP_
Note: See TracChangeset for help on using the changeset viewer.