Class: PrettyPrint::GroupQueue

Inherits:
Object
  • Object
show all
Defined in:
lib/prettyprint.rb

Overview

The GroupQueue class is used for managing the queue of Group to be pretty printed.

This queue groups the Group objects, based on their depth.

This class is intended for internal use of the PrettyPrint buffers.

Instance Method Summary collapse

Constructor Details

#initialize(*groups) ⇒ GroupQueue

Create a GroupQueue object

Arguments:

  • groups - one or more PrettyPrint::Group objects



447
448
449
450
# File 'lib/prettyprint.rb', line 447

def initialize(*groups)
  @queue = []
  groups.each {|g| enq g}
end

Instance Method Details

#delete(group) ⇒ Object

Remote group from this queue



479
480
481
# File 'lib/prettyprint.rb', line 479

def delete(group)
  @queue[group.depth].delete(group)
end

#deqObject

Returns the outer group of the queue



463
464
465
466
467
468
469
470
471
472
473
474
475
476
# File 'lib/prettyprint.rb', line 463

def deq
  @queue.each {|gs|
    (gs.length-1).downto(0) {|i|
      unless gs[i].breakables.empty?
        group = gs.slice!(i, 1).first
        group.break
        return group
      end
    }
    gs.each {|group| group.break}
    gs.clear
  }
  return nil
end

#enq(group) ⇒ Object

Enqueue group

This does not strictly append the group to the end of the queue, but instead adds it in line, base on the group.depth



456
457
458
459
460
# File 'lib/prettyprint.rb', line 456

def enq(group)
  depth = group.depth
  @queue << [] until depth < @queue.length
  @queue[depth] << group
end