class CW::Stream

Attributes

active_region[RW]
stream[RW]

Public Class Methods

new() click to toggle source
# File lib/cw/stream.rb, line 11
def initialize
  @active_region = 6
  empty
end

Public Instance Methods

add_char(char) click to toggle source
# File lib/cw/stream.rb, line 26
def add_char char
  @stream[@last_element] = char
  @success[@last_element] = nil
  inc_last_element
end
empty() click to toggle source
# File lib/cw/stream.rb, line 16
def empty
  @stream, @success, @first_element, @last_element = {},{}, 0, 0
end
fail_unmarked_inactive_elements() click to toggle source
# File lib/cw/stream.rb, line 52
def fail_unmarked_inactive_elements
  if(( ! stream_empty?) && (count > @active_region))
    @first_element.upto(inactive_region) do |count|
      @success[count] = false unless @success[count] == true
    end
  end
end
first() click to toggle source
# File lib/cw/stream.rb, line 60
def first
  @stream[@first_element]
end
inactive_region() click to toggle source
# File lib/cw/stream.rb, line 48
def inactive_region
  stream_empty? ? nil : @last_element - @active_region - 1
end
mark(element, type) click to toggle source
# File lib/cw/stream.rb, line 32
def mark(element, type)
  @success[element] = type
end
mark_fail(element) click to toggle source
# File lib/cw/stream.rb, line 40
def mark_fail element
  mark element, false
end
mark_success(element) click to toggle source
# File lib/cw/stream.rb, line 36
def mark_success element
  mark element, true
end
pop() click to toggle source
# File lib/cw/stream.rb, line 64
def pop
  unless stream_empty?
    ele = @first_element
    inc_first_element
    success = @success.delete(ele)
    success = success == nil ? false : success
    { :value => @stream.delete(ele),
      :success => success
    }
  else
    nil
  end
end
pop_next_marked() click to toggle source

def pop_marked

return_val = {}
fail_unmarked_inactive_elements
@first_element.upto(@last_element) do |ele|
  unless stream_empty?
    if(ele < inactive_region)
      val = pop

      return_val[ele] = {pop => @success[ele]}
    elsif(@success[ele] == true || @success[ele] == false)
      return_val[ele] = {pop => @success[ele]}
    else
      break
    end
  end
end
return_val == {} ? nil : return_val

end

# File lib/cw/stream.rb, line 97
def pop_next_marked
  fail_unmarked_inactive_elements
  unless stream_empty?
    if(@first_element < inactive_region)
      pop
    elsif(@success[@first_element] == true || @success[@first_element] == false)
      pop
    end
  end
end
push(word) click to toggle source
# File lib/cw/stream.rb, line 20
def push word
  @stream[@last_element] = word.strip
  @success[@last_element] = nil
  inc_last_element
end
stream_empty?() click to toggle source
# File lib/cw/stream.rb, line 44
def stream_empty?
  @first_element == @last_element
end