Sha256: 1067468522876d53f4ec02bd2f87e87609269de99f33ac59da4b2bee06c242a5

Contents?: true

Size: 1.48 KB

Versions: 3

Compression:

Stored size: 1.48 KB

Contents

##
#
##

module SknUtils
  module Lists

    class LinkNode
      attr_accessor :prev, :next, :value

      def initialize(val, anchor_node=nil, strategy=:after)
        @value = val
        @prev = nil
        @next = nil

        case strategy
          when :single # after logic
            anchor_node.next = self if anchor_node
          when :before
            @prev = anchor_node.prev if anchor_node
            @next = anchor_node
            anchor_node.prev = self if anchor_node
          when :after
            @prev = anchor_node
            @next = anchor_node.next if anchor_node
            anchor_node.next = self if anchor_node
            @next.prev = self if @next
          when :circle_before
            @prev = anchor_node ? anchor_node.prev : self
            @next = anchor_node ? anchor_node : self
            anchor_node.prev = self if anchor_node
            @prev.next = self if anchor_node
          when :circle_after
            @prev = anchor_node ? anchor_node : self
            @next = anchor_node ? anchor_node.next : self
            anchor_node.next = self if anchor_node
            @next.prev = self if anchor_node
        end
      end

      def match_by_value(other_value)
        self.value === other_value
      end

      # returns next node
      def remove!
        next_node = @next
        @value = nil
        @prev = nil
        @next = nil
        next_node
      end

      def to_s
        "Node with value: #{@value}"
      end
    end
  end # module
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
skn_utils-3.3.2 lib/skn_utils/lists/link_node.rb
skn_utils-3.3.1 lib/skn_utils/lists/link_node.rb
skn_utils-3.3.0 lib/skn_utils/lists/link_node.rb