Class: Bitfifo
- Inherits:
-
Object
- Object
- Bitfifo
- Defined in:
- lib/bitfifo.rb,
lib/bitfifo/version.rb
Constant Summary collapse
- VERSION =
"0.2.1"
Class Method Summary collapse
Instance Method Summary collapse
- #count ⇒ Object
- #empty ⇒ Object
- #empty? ⇒ Boolean
- #get(nb = 1) ⇒ Object
-
#initialize ⇒ Bitfifo
constructor
A new instance of Bitfifo.
- #put(data, nb = nil) ⇒ Object
- #rget(nb = 1) ⇒ Object
- #rput(data, nb = nil) ⇒ Object
- #size ⇒ Object
- #to_i(reduce = true) ⇒ Object
- #unget(nb = 1) ⇒ Object
Constructor Details
#initialize ⇒ Bitfifo
Returns a new instance of Bitfifo.
16 17 18 19 20 |
# File 'lib/bitfifo.rb', line 16 def initialize @bits = 0 @size = 0 self end |
Class Method Details
.reverse(data, nb) ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 |
# File 'lib/bitfifo.rb', line 4 def self.reverse(data,nb) return nil if data.nil? data &= (1 << nb) - 1 rtn = 0 nb.times do |ii| rtn <<= 1 rtn |= (data & 1) data >>= 1 end rtn end |
Instance Method Details
#count ⇒ Object
77 78 79 |
# File 'lib/bitfifo.rb', line 77 def count @size end |
#empty ⇒ Object
81 82 83 84 85 86 |
# File 'lib/bitfifo.rb', line 81 def empty rtn = @bits @bits = 0 @size = 0 rtn end |
#empty? ⇒ Boolean
88 89 90 |
# File 'lib/bitfifo.rb', line 88 def empty? @size==0 end |
#get(nb = 1) ⇒ Object
48 49 50 51 52 53 54 55 56 57 |
# File 'lib/bitfifo.rb', line 48 def get(nb=1) mask = (1 << nb) - 1 rtn = (@bits & (mask << (@size-nb))) >> (@size-nb) @size -= nb if @size < 0 @size=0 return nil end rtn end |
#put(data, nb = nil) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/bitfifo.rb', line 32 def put(data, nb=nil) if nb.nil? data=1 if data==true data=0 if data==false @bits <<= 1 @bits |= data & 1 @size += 1 else mask = (1 << nb) - 1 data &= mask @bits <<= nb @bits |= data @size += nb end end |
#rget(nb = 1) ⇒ Object
69 70 71 |
# File 'lib/bitfifo.rb', line 69 def rget(nb=1) self.class.reverse(get(nb),nb) end |
#rput(data, nb = nil) ⇒ Object
64 65 66 67 |
# File 'lib/bitfifo.rb', line 64 def rput(data, nb=nil) return put(data) if nb.nil? put(self.class.reverse(data,nb),nb) end |
#size ⇒ Object
73 74 75 |
# File 'lib/bitfifo.rb', line 73 def size @size end |
#to_i(reduce = true) ⇒ Object
22 23 24 25 26 27 28 29 30 |
# File 'lib/bitfifo.rb', line 22 def to_i(reduce=true) if reduce size = @size rtn = get(size) unget(size) return rtn end return @bits end |
#unget(nb = 1) ⇒ Object
59 60 61 62 |
# File 'lib/bitfifo.rb', line 59 def unget(nb=1) @size += nb self end |