Class: NanocRust::DirectedGraph

Inherits:
Object
  • Object
show all
Defined in:
lib/nanoc-rust.rb

Instance Method Summary collapse

Constructor Details

#initialize(vertices) ⇒ DirectedGraph

Returns a new instance of DirectedGraph.



44
45
46
47
48
49
50
51
52
# File 'lib/nanoc-rust.rb', line 44

def initialize(vertices)
  raw = NanocRust::FFI.digraph_create
  @wrapped = ::FFI::AutoPointer.new(raw, NanocRust::FFI.method(:digraph_destroy))

  @_props = {}
  @_next_prop_idx = 1

  vertices.each { |v| add_vertex(v) }
end

Instance Method Details

#add_edge(v1, v2, props: nil) ⇒ Object



67
68
69
70
71
# File 'lib/nanoc-rust.rb', line 67

def add_edge(v1, v2, props: nil)
  @_props[@_next_prop_idx] = props
  NanocRust::FFI.digraph_add_edge(@wrapped, v1, v2, @_next_prop_idx)
  @_next_prop_idx += 1
end

#add_vertex(v) ⇒ Object

mutating



63
64
65
# File 'lib/nanoc-rust.rb', line 63

def add_vertex(v)
  NanocRust::FFI.digraph_add_vertex(@wrapped, v)
end

#delete_edges_to(v) ⇒ Object



73
74
75
# File 'lib/nanoc-rust.rb', line 73

def delete_edges_to(v)
  NanocRust::FFI.digraph_delete_edges_to(@wrapped, v)
end

#direct_predecessors_of(v) ⇒ Object

querying



79
80
81
82
83
# File 'lib/nanoc-rust.rb', line 79

def direct_predecessors_of(v)
  count_ptr = new_count_ptr
  ptr = NanocRust::FFI.digraph_direct_predecessors_of(@wrapped, v, count_ptr)
  ptr_to_array_of_strings(ptr, count_ptr)
end

#direct_successors_of(v) ⇒ Object



91
92
93
94
95
# File 'lib/nanoc-rust.rb', line 91

def direct_successors_of(v)
  count_ptr = new_count_ptr
  ptr = NanocRust::FFI.digraph_direct_successors_of(@wrapped, v, count_ptr)
  ptr_to_array_of_strings(ptr, count_ptr)
end

#edgesObject



109
110
111
112
113
# File 'lib/nanoc-rust.rb', line 109

def edges
  count_ptr = new_count_ptr
  ptr = NanocRust::FFI.digraph_edges(@wrapped, count_ptr)
  ptr_to_array_of_u32_tuples(ptr, count_ptr)
end

#inspectObject



54
55
56
57
58
59
# File 'lib/nanoc-rust.rb', line 54

def inspect
  ptr = NanocRust::FFI.digraph_inspect(@wrapped)
  s = ptr.read_string
  ::NanocRust::FFI.drop_string(ptr)
  s
end

#predecessors_of(v) ⇒ Object



85
86
87
88
89
# File 'lib/nanoc-rust.rb', line 85

def predecessors_of(v)
  count_ptr = new_count_ptr
  ptr = NanocRust::FFI.digraph_predecessors_of(@wrapped, v, count_ptr)
  ptr_to_array_of_strings(ptr, count_ptr)
end

#props_for(v1, v2) ⇒ Object



115
116
117
118
# File 'lib/nanoc-rust.rb', line 115

def props_for(v1, v2)
  idx = NanocRust::FFI.digraph_props_for(@wrapped, v1, v2)
  @_props[idx]
end

#successors_of(v) ⇒ Object



97
98
99
100
101
# File 'lib/nanoc-rust.rb', line 97

def successors_of(v)
  count_ptr = new_count_ptr
  ptr = NanocRust::FFI.digraph_successors_of(@wrapped, v, count_ptr)
  ptr_to_array_of_strings(ptr, count_ptr)
end

#verticesObject



103
104
105
106
107
# File 'lib/nanoc-rust.rb', line 103

def vertices
  count_ptr = new_count_ptr
  ptr = NanocRust::FFI.digraph_vertices(@wrapped, count_ptr)
  ptr_to_array_of_u32_tuples(ptr, count_ptr)
end