Labelling

By default, a vertex is identified by its internal identifier. However, a user can assign labels of any arbitrary Julia type to identify vertices. However, these labels can be used only externally. Internally, the vertices will still be identified by their integer ids. This is done has vertex label resolution can impose a significant overhead.

The following example demonstrates the Labelling API:

julia> using Graft

julia> g = completegraph(10)
Graph(10 vertices, 90 edges, Symbol[] vertex properties, Symbol[] edge properties)

julia> # Set labels "1", "2" ... "10" to the vertices
       setlabel!(g, map(string, 1 : 10))

julia> # Translate labels into vertex identifiers
       decode(g, "1")
1

julia> # Decode a labelled edge
       decode(g, "1"=>"2")
1=>2

julia> # Translate vertex identifiers into labels
       encode(g, 1)
"1"

julia> # Encode an edge
       encode(g, 1=>2)
"1"=>"2"

julia> # Relabel a vertex
       relabel!(g, 1, "ONE")

julia> # Remove all vertex labels (Use vertex identifiers instead)
       setlabel!(g)

julia> # Display all vertex labels (defaults to vertex identifiers in this case)
       encode(g)
10-element Array{Int64,1}:
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10

Detailed documentation:

setlabel!(::Graph, ::Vector)
setlabel!(::Graph)
decode(::Graph, ::Any)
decode(::Graph, ::Pair)
encode(::Graph, ::Int)
encode(::Graph, ::Pair{Int,Int})
encode(::Graph)
relabel!(::Graph, ::Int, ::Any)
relabel!(::Graph, ::AbstractVector{Int}, ::Vector)