Sha256: d0a5dac7827d3cd9fbffc42f1ef53154627b4c9762e015bbff8114ba952ff88a

Contents?: true

Size: 1.07 KB

Versions: 3

Compression:

Stored size: 1.07 KB

Contents

# frozen_string_literal: true

module MSSMT
  # Leaf node within a MS-SMT that commit to a value and some integer value (the sum) associated with the value.
  class LeafNode
    attr_reader :value, :sum

    # Constructor
    # @param [String] value node value with binary format.
    # @param [Integer] sum integer value associated with the value
    # @raise [MSSMT::OverflowError]
    def initialize(value, sum)
      @value = value
      if sum > Tree::MAX_SUM_VALUE
        raise OverflowError, "sum: #{sum} is overflow"
      end
      @sum = sum
    end

    # Generate empty leaf node.
    # @return [MSSMT::LeafNode]
    def self.empty_leaf
      LeafNode.new(nil, 0)
    end

    # Calculate node hash.
    # @return [String] hash value.
    def node_hash
      Digest::SHA256.digest("#{value}#{[sum].pack("Q>")}")
    end

    # Check whether value and sum is empty.
    # @return [Boolean]
    def empty?
      (value.nil? or value.empty?) && sum.zero?
    end

    def ==(other)
      return false unless other.is_a?(LeafNode)
      node_hash == other.node_hash
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
mssmt-0.4.2 lib/mssmt/leaf_node.rb
mssmt-0.4.1 lib/mssmt/leaf_node.rb
mssmt-0.4.0 lib/mssmt/leaf_node.rb