Sha256: 1f89b4ba1c2fbd3f2bb2988c01a71cd0a882cdad7f706629fbe8afb7b9d3703e

Contents?: true

Size: 1.83 KB

Versions: 37

Compression:

Stored size: 1.83 KB

Contents

module Pacer
  module Pipes
    class VisitorPipe < Pacer::Pipes::RubyPipe
      attr_reader :visitor, :queue, :in_section

      attr_accessor :use_on_element, :use_replace_element,
        :use_after_element, :use_reset, :use_hasNext, :use_next

      def initialize(visitor = nil)
        super()
        self.visitor = visitor if visitor
        @queue          = []
        @in_section = false
      end

      def visitor=(visitor)
        if visitor.respond_to? :on_pipe
          @visitor = visitor.on_pipe(self)
        else
          @visitor = visitor
        end
        @use_hasNext         = visitor.respond_to? :hasNext
        @use_next            = visitor.respond_to? :next
        @use_on_element      = visitor.respond_to? :on_element
        @use_replace_element = visitor.respond_to? :replace_element
        @use_after_element   = visitor.respond_to? :after_element
        @use_reset           = visitor.respond_to? :reset
      end

      def processNextStart
        while true
          visitor.after_element if use_after_element and in_section
          if use_next and (not use_hasNext or visitor.hasNext)
            return visitor.next
          elsif queue.any?
            return queue.shift
          else
            current = starts.next
            @in_section = true unless in_section
            visitor.on_element(current) if use_on_element
            if use_replace_element
              visitor.replace_element(current) do |e|
                queue << e
              end
            else
              return current
            end
          end
        end
      rescue EmptyPipe, java.util.NoSuchElementException
        @in_section = false
        raise EmptyPipe.instance
      end

      def reset
        visitor.reset if use_reset
        @in_section = false
        @queue = []
        super
      end
    end
  end
end

Version data entries

37 entries across 37 versions & 1 rubygems

Version Path
pacer-2.0.24-java lib/pacer/pipe/visitor_pipe.rb
pacer-2.0.22-java lib/pacer/pipe/visitor_pipe.rb
pacer-2.0.20-java lib/pacer/pipe/visitor_pipe.rb
pacer-2.0.19-java lib/pacer/pipe/visitor_pipe.rb
pacer-2.0.18-java lib/pacer/pipe/visitor_pipe.rb
pacer-2.0.17-java lib/pacer/pipe/visitor_pipe.rb
pacer-2.0.16-java lib/pacer/pipe/visitor_pipe.rb
pacer-2.0.15-java lib/pacer/pipe/visitor_pipe.rb
pacer-2.0.14-java lib/pacer/pipe/visitor_pipe.rb
pacer-2.0.13-java lib/pacer/pipe/visitor_pipe.rb
pacer-2.0.12-java lib/pacer/pipe/visitor_pipe.rb
pacer-2.0.10-java lib/pacer/pipe/visitor_pipe.rb
pacer-2.0.10.pre-java lib/pacer/pipe/visitor_pipe.rb
pacer-2.0.8-java lib/pacer/pipe/visitor_pipe.rb
pacer-2.0.6-java lib/pacer/pipe/visitor_pipe.rb
pacer-2.0.4.pre-java lib/pacer/pipe/visitor_pipe.rb
pacer-2.0.0.pre-java lib/pacer/pipe/visitor_pipe.rb
pacer-1.6.0-java lib/pacer/pipe/visitor_pipe.rb
pacer-1.5.4-java lib/pacer/pipe/visitor_pipe.rb
pacer-1.5.3-java lib/pacer/pipe/visitor_pipe.rb