Module: Geospatial::Interleave
- Defined in:
- lib/geospatial/interleave.rb
Class Method Summary collapse
Class Method Details
.map(index, bits) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/geospatial/interleave.rb', line 30 def self.map(index, bits) result = 0 index.each_with_index do |x, i| offset = index.size - (i+1) bits.times do |j| result |= (x & 1) << (j*index.size+offset) x >>= 1 break if x == 0 end end return result end |
.unmap(integral, width) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/geospatial/interleave.rb', line 48 def self.unmap(integral, width) result = [0] * width mask = (1 << width) - 1 offset = 0 while integral != 0 # N times, look at each bit and append width.times do |i| bit = (integral >> i) & 1 result[-1-i] |= bit << offset end # Pop first n bits integral >>= width offset += 1 end return result end |