Sha256: 59c838ae1d4c94cf00b2633dd4f939bbb638d55da7e68a36719ed20427c7f958

Contents?: true

Size: 1.22 KB

Versions: 10

Compression:

Stored size: 1.22 KB

Contents

module RGL

  class EdgePropertiesMap

    def initialize(edge_properties_map, directed)
      @edge_properties_map = edge_properties_map
      @directed = directed

      check_properties
    end

    def edge_property(u, v)
      if @directed
        property = @edge_properties_map[[u, v]]
      else
        property = @edge_properties_map[[u, v]] || @edge_properties_map[[v, u]]
      end

      validate_property(property, u, v)

      property
    end

    private

    def check_properties
      @edge_properties_map.each { |(u, v), property| validate_property(property, u, v) } if @edge_properties_map.respond_to?(:each)
    end

    def validate_property(property, u, v)
      report_missing_property(property, u, v)
    end

    def report_missing_property(property, u, v)
      raise ArgumentError.new("property of edge (#{u}, #{v}) is not defined") unless property
    end

  end # EdgePropertiesMap

  class NonNegativeEdgePropertiesMap < EdgePropertiesMap

    private

    def validate_property(property, u, v)
      super
      report_negative_property(property, u, v)
    end

    def report_negative_property(property, u, v)
      raise ArgumentError.new("property of edge (#{u}, #{v}) is negative") if property < 0
    end

  end

end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
rgl-0.5.10 lib/rgl/edge_properties_map.rb
rgl-0.5.9 lib/rgl/edge_properties_map.rb
rgl-0.5.8 lib/rgl/edge_properties_map.rb
rgl-0.5.7 lib/rgl/edge_properties_map.rb
rgl-0.5.6 lib/rgl/edge_properties_map.rb
rgl-0.5.4 lib/rgl/edge_properties_map.rb
rgl-0.5.3 lib/rgl/edge_properties_map.rb
rgl-0.5.2 lib/rgl/edge_properties_map.rb
rgl-0.5.1 lib/rgl/edge_properties_map.rb
rgl-0.5.0 lib/rgl/edge_properties_map.rb