/* * call-seq: * bv.to_a * * Iterate through all the set bits in the bit-vector adding the index of * each set bit to an array. This is useful if you want to perform array * methods on the bit-vecter. If you want to convert an array to a bit_vector * simply do this; * * bv = [1, 12, 45, 367, 455].inject(BitVector.new) {|bv, i| bv.set(i)} */ VALUE frt_bv_to_a(VALUE self) { BitVector *bv; int bit; VALUE ary; GET_BV(bv, self); ary = rb_ary_new(); bv_scan_reset(bv); if (bv->extends_as_ones) { while ((bit = bv_scan_next_unset(bv)) >= 0) { rb_ary_push(ary, INT2FIX(bit)); } } else { while ((bit = bv_scan_next(bv)) >= 0) { rb_ary_push(ary, INT2FIX(bit)); } } return ary; }