Class: Bitfifo

Inherits:
Object
  • Object
show all
Defined in:
lib/bitfifo.rb,
lib/bitfifo/version.rb

Constant Summary collapse

VERSION =
"0.2.1"

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeBitfifo

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

#countObject



77
78
79
# File 'lib/bitfifo.rb', line 77

def count
  @size
end

#emptyObject



81
82
83
84
85
86
# File 'lib/bitfifo.rb', line 81

def empty
  rtn = @bits
  @bits = 0
  @size = 0
  rtn
end

#empty?Boolean

Returns:

  • (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

#sizeObject



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