### Home Classes Methods

### In Files

- lib/data-structures.rb

### Parent

Object

### Methods

- ::new
- #clone
- #get_next
- #get_node_i
- #insert_node
- #reset_iterator

### Files

- LessThan5BlueLabels.txt
- AtLeast2LargeSegments.txt

### Class Index

Quicksearch

- AddLabelTool
- AllRulesAppliedGoal
- Area
- AreaConstraint
- Array
- BalancedBinaryTree
- BalancedBinaryTreeNode
- CloseObserver
- Constants
- Constraint
- CurrentLabelledShape
- DistinctShapeConstraint
- Execution
- Goal
- Grammar
- Label
- LabelledShape
- LineDescriptor
- LinearLinkedList
- LinearLinkedListNode
- NoLabelsGoal
- NoMoreRulesGoal
- NoScalesConstraint
- Numeric
- Object
- OrderedPoint
- PiList
- Point
- Project
- Robot
- Rule
- RuleGroupsObserver
- RuleLabelledShape
- RuleShapeObserver
- Segment
- ShaDeLayersObserver
- Shade
- ShadeUtils
- UndoObserver

No matching classes.

# PiList

Author | Manuela Ruiz (mruiz@lcc.uma.es)

This class represents a linked list used for the pi permutation of CurrentLabelledShape

### Attributes

first[RW]

First node of the list (LinearLinkedListNode)

size[RW]

Number of nodes in the list

current_node[RW]

Current node for getting the nodes in order

### Public Class Methods

new() click to toggle source

Initializing

         # File lib/data-structures.rb, line 302
    302:         def initialize

    303:                 @first = nil

    304:                 @size = 0

    305:                 @current_node = Constants::START

    306:         end

### Public Instance Methods

clone() click to toggle source

returns | an identical PiList object to this

         # File lib/data-structures.rb, line 375
    375:         def clone()

    376:                 new_lllist = PiList.new

    377:                 current = @first

    378:                 while current

    379:                         new_node = current.clone

    380:                         new_lllist.insert_node(new_node)

    381:                         current = current._next

    382:                 end

    383:                 return new_lllist

    384:         end

get_next() click to toggle source

returns | returns, in each invocation, the next node, in order, in the list

         # File lib/data-structures.rb, line 357
    357:         def get_next()

    358:                 if @current_node == Constants::START

    359:                         @current_node = @first

    360:                 elsif @current_node

    361:                         @current_node = @current_node._next

    362:                 else

    363:                         self.reset_iterator

    364:                 end

    365:                 result = @current_node

    366:                 return result

    367:         end

get_node_i(i) click to toggle source

i::index ofthe node to be retrieved

returns | the node in the position i, or nil if i >= size of the list

         # File lib/data-structures.rb, line 344
    344:         def get_node_i(i)

    345:                 if (i < @size)

    346:                         j = 0

    347:                         result = @first

    348:                         while (j < i)

    349:                                 result = result._next

    350:                                 j += 1

    351:                         end

    352:                 end

    353:                 return result

    354:         end

insert_node(n) click to toggle source

n | LinearLinkedListNode to add

Inserts the node, maintaining the order of the list. Doesn’t matter if keys are repeated

         # File lib/data-structures.rb, line 311
    311:         def insert_node(n)

    312:                 previous = nil

    313:                 current = @first

    314:                 found = false

    315:                 while (current && !found)

    316:                         if (n.key < current.key)

    317:                                 found = true

    318:                         elsif (n.key == current.key)

    319:                                 found = true

    320:                         else

    321:                                 previous = current

    322:                                 current = current._next

    323:                         end

    324:                 end

    325:

    326:                 if !previous #Is the first node

    327:                         n._next = @first

    328:                         @first = n

    329:                         @current_node = Constants::START

    330:                 else # General case (or last to be added if !found)

    331:                         previous._next = n

    332:                         n._next = current

    333:                 end

    334:

    335:                 @size += 1

    336:                 result =  n

    337:

    338:                 return result

    339:         end

reset_iterator() click to toggle source

resets the iterator used by get_next()

         # File lib/data-structures.rb, line 370
    370:         def reset_iterator()

    371:                 @current_node = Constants::START

    372:         end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.