Sha256: 253dcaaa80ee9ec49d1ce020326231e8d8521432c5b5dd317dc4ef94d3305293

Contents?: true

Size: 1003 Bytes

Versions: 9

Compression:

Stored size: 1003 Bytes

Contents

# Copyright (c) 2015 Sqreen. All Rights Reserved.
# Please refer to our terms for more information: https://www.sqreen.com/terms.html

# TODO: move to Sqreen::IP::Trie

module Sqreen
  # bit starts at 0 (most significant)
  Node = Struct.new(:bit, :prefix, :l, :r, :parent) do
    def initialize(*args)
      super
      raise ArgumentError, 'no bit given' if bit.nil?
    end

    def empty?
      prefix.nil?
    end

    # cover the whole tree
    def walk(max_bits, empty_nodes = false)
      xstack = Array.new(max_bits + 1)
      sidx = 0 # stack index
      xhead = self
      xcur = xhead
      until xcur.nil?
        yield xcur unless xcur.empty? && !empty_nodes

        if xcur.l
          if xcur.r
            xstack[sidx] = xcur.r
            sidx += 1
          end
          xcur = xcur.l
        elsif xcur.r
          xcur = xcur.r
        elsif sidx.nonzero?
          sidx -= 1
          xcur = xstack[sidx]
        else
          xcur = nil
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
sqreen-1.18.6-java lib/sqreen/node.rb
sqreen-1.18.6 lib/sqreen/node.rb
sqreen-1.18.5-java lib/sqreen/node.rb
sqreen-1.18.5 lib/sqreen/node.rb
sqreen-1.18.4-java lib/sqreen/node.rb
sqreen-1.18.4 lib/sqreen/node.rb
sqreen-1.18.3-java lib/sqreen/node.rb
sqreen-1.18.3 lib/sqreen/node.rb
sqreen-1.18.3.beta2 lib/sqreen/node.rb