Changeset 3274 for trunk


Ignore:
Timestamp:
Jun 5, 2013, 9:16:05 PM (6 years ago)
Author:
cameron
Message:

get_last_pos, clear_from scanner operations

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/bitblock_iterator.hpp

    r3216 r3274  
    116116                BitBlock mask_i = simd_not(simd<sizeof(scanfield_t)*8>::eq(simd<1>::constant<0>(), b));
    117117                mask |= ((scanblock_t) hsimd<sizeof(scanfield_t)*8>::signmask(mask_i)) << (i * sizeof(bitblock_t)/sizeof(scanfield_t));
     118                printf("mask_%i = %lx\n", i, mask);
    118119        }
    119120
    120121        IDISA_ALWAYS_INLINE bool has_next() {
    121                
    122122                     return mask != 0;
    123123        }
    124124
    125125        IDISA_ALWAYS_INLINE int scan_to_next() {
    126                
    127126                     int item_pos = scan_forward_zeroes(mask);
    128127                     scanfield_t scan_item = remaining._scanfield[item_pos];
     
    135134        }
    136135
     136        IDISA_ALWAYS_INLINE int get_final_pos() {
     137                     int item_pos = sizeof(scanblock_t) * 8 - scan_backward_zeroes((scanblock_t) mask) - 1;
     138                     scanfield_t scan_item = remaining._scanfield[item_pos];
     139                     int bitpos = sizeof(scanblock_t)  * 8 - scan_backward_zeroes((scanblock_t) scan_item) - 1;
     140                     int pos = item_pos * sizeof(scanfield_t) * 8 + bitpos;
     141                     return pos;
     142        }
     143
     144        IDISA_ALWAYS_INLINE void clear_from(int pos) {
     145                     int item_pos = pos / (sizeof(scanfield_t) * 8);
     146                     int bitpos = pos % (sizeof(scanfield_t) * 8);
     147                     remaining._scanfield[item_pos] &= (1 << bitpos) - 1;
     148                     item_pos += remaining._scanfield[item_pos] == 0 ? 0 : 1;
     149                     mask = mask & (((scanblock_t) 1) << item_pos) - 1;
     150        }
    137151private:
    138152        union {bitblock_t _bitblock[bitblock_count];
Note: See TracChangeset for help on using the changeset viewer.