Graph.Edge (multigraph v0.16.1-mg.2)

Copy Markdown

This module defines the struct used to represent edges and associated metadata about them.

Used internally, v1 and v2 typically hold vertex ids, not the vertex itself, but all public APIs which return Graph.Edge structs, return them with the actual vertices.

Summary

Functions

Defines a new edge and accepts optional values for weight, label, and properties.

Types

edge_opt()

@type edge_opt() ::
  {:weight, integer() | float()} | {:label, term()} | {:properties, map()}

edge_opts()

@type edge_opts() :: [edge_opt()]

t()

@type t() :: %Graph.Edge{
  label: term(),
  properties: map(),
  v1: Graph.vertex(),
  v2: Graph.vertex(),
  weight: integer() | float()
}

Functions

new(v1, v2, opts \\ [])

@spec new(Graph.vertex(), Graph.vertex(), [edge_opt()]) :: t() | no_return()

Defines a new edge and accepts optional values for weight, label, and properties.

Options

  • :weight - the weight of the edge (integer or float, default: 1)
  • :label - the label for the edge (default: nil)
  • :properties - an arbitrary map of additional metadata (default: %{})

An error will be thrown if weight is not an integer or float.

Examples

iex> edge = Graph.Edge.new(:a, :b, label: :foo, weight: 2, properties: %{color: "red"})
...> {edge.label, edge.weight, edge.properties}
{:foo, 2, %{color: "red"}}

iex> Graph.new |> Graph.add_edge(Graph.Edge.new(:a, :b, weight: "1"))
** (ArgumentError) invalid value for :weight, must be an integer