abstract_graph 1.1.0 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/Rakefile +11 -1
- data/lib/abstract_graph.rb +1 -0
- data/lib/abstract_graph/composition.rb +1 -1
- data/lib/abstract_graph/composition/edge.rb +5 -0
- data/lib/abstract_graph/composition/edge/initialize.rb +6 -0
- data/lib/abstract_graph/composition/edge/is_coincident.rb +5 -2
- data/lib/abstract_graph/composition/unique_name_collection.rb +28 -0
- data/lib/abstract_graph/composition/unique_name_collection/add.rb +23 -0
- data/lib/abstract_graph/composition/unique_name_collection/delete.rb +20 -0
- data/lib/abstract_graph/composition/unique_name_collection/dup.rb +24 -0
- data/lib/abstract_graph/composition/unique_name_collection/each.rb +18 -0
- data/lib/abstract_graph/composition/unique_name_collection/find.rb +18 -0
- data/lib/abstract_graph/composition/unique_name_collection/initialize.rb +22 -0
- data/lib/abstract_graph/composition/unique_name_collection/link.rb +42 -0
- data/lib/abstract_graph/composition/unique_name_collection/method_missing.rb +18 -0
- data/lib/abstract_graph/composition/unique_name_collection/rename.rb +34 -0
- data/lib/abstract_graph/composition/unique_name_collection/ticket.rb +18 -0
- data/lib/abstract_graph/composition/unique_name_collection/ticket/get.rb +20 -0
- data/lib/abstract_graph/composition/unique_name_collection/ticket/initialize.rb +20 -0
- data/lib/abstract_graph/composition/unique_name_collection/ticket/set.rb +20 -0
- data/lib/abstract_graph/composition/vertex.rb +5 -1
- data/lib/abstract_graph/composition/vertex/initialize.rb +6 -0
- data/lib/abstract_graph/graph.rb +1 -0
- data/lib/abstract_graph/graph/add_edge.rb +9 -8
- data/lib/abstract_graph/graph/add_vertex.rb +5 -2
- data/lib/abstract_graph/graph/adjacency_list.rb +8 -3
- data/lib/abstract_graph/graph/change_edge_name.rb +6 -4
- data/lib/abstract_graph/graph/change_vertex_name.rb +5 -3
- data/lib/abstract_graph/graph/connected.rb +36 -0
- data/lib/abstract_graph/graph/delete_edge.rb +5 -4
- data/lib/abstract_graph/graph/delete_vertex.rb +5 -4
- data/lib/abstract_graph/graph/dup.rb +8 -3
- data/lib/abstract_graph/graph/get_edge_name.rb +7 -4
- data/lib/abstract_graph/graph/has_edge.rb +6 -3
- data/lib/abstract_graph/graph/has_vertex.rb +6 -3
- data/lib/abstract_graph/graph/initialize.rb +5 -1
- data/lib/abstract_graph/graph/is_adjacent.rb +9 -7
- data/lib/abstract_graph/graph/merge_vertices.rb +16 -14
- data/lib/abstract_graph/graph/split_vertex.rb +10 -7
- data/lib/abstract_graph/graph/templates/complete_bipartite_graph.rb +7 -5
- data/lib/abstract_graph/graph/templates/complete_graph.rb +8 -6
- data/lib/abstract_graph/graph/templates/cycle_graph.rb +6 -5
- data/lib/abstract_graph/graph/templates/path_graph.rb +6 -4
- data/lib/abstract_graph/graph/templates/petersen_graph.rb +8 -2
- data/lib/abstract_graph/version.rb +1 -1
- data/spec/abstract_graph/composition/{uniquenamecollection → unique_name_collection}/add_spec.rb +0 -0
- data/spec/abstract_graph/composition/{uniquenamecollection → unique_name_collection}/dup_spec.rb +0 -0
- data/spec/abstract_graph/composition/unique_name_collection/each_spec.rb +38 -0
- data/spec/abstract_graph/composition/unique_name_collection/find_spec.rb +33 -0
- data/spec/abstract_graph/composition/{uniquenamecollection → unique_name_collection}/initialize_spec.rb +0 -0
- data/spec/abstract_graph/composition/{uniquenamecollection → unique_name_collection}/link_spec.rb +0 -0
- data/spec/abstract_graph/composition/{uniquenamecollection → unique_name_collection}/method_missing_spec.rb +4 -15
- data/spec/abstract_graph/composition/{uniquenamecollection → unique_name_collection}/rename_spec.rb +1 -1
- data/spec/abstract_graph/composition/{uniquenamecollection_spec.rb → unique_name_collection_spec.rb} +0 -0
- data/spec/abstract_graph/graph/add_edge_spec.rb +1 -1
- data/spec/abstract_graph/graph/connected_spec.rb +39 -0
- data/tasks/benchmark.rb +47 -0
- data/tasks/create_method.rb +64 -0
- data/tasks/list_methods.rb +5 -0
- metadata +45 -32
- data/lib/abstract_graph/composition/uniquenamecollection.rb +0 -22
- data/lib/abstract_graph/composition/uniquenamecollection/add.rb +0 -19
- data/lib/abstract_graph/composition/uniquenamecollection/dup.rb +0 -20
- data/lib/abstract_graph/composition/uniquenamecollection/initialize.rb +0 -14
- data/lib/abstract_graph/composition/uniquenamecollection/link.rb +0 -32
- data/lib/abstract_graph/composition/uniquenamecollection/method_missing.rb +0 -14
- data/lib/abstract_graph/composition/uniquenamecollection/rename.rb +0 -28
- data/lib/abstract_graph/composition/vertex/delete.rb +0 -12
- data/spec/abstract_graph/composition/vertex/delete_spec.rb +0 -12
@@ -1,22 +0,0 @@
|
|
1
|
-
# required in "abstract_graph/composition"
|
2
|
-
|
3
|
-
module AbstractGraph
|
4
|
-
module Composition
|
5
|
-
|
6
|
-
# public UniqueNameCollection class
|
7
|
-
# Note that the collection of this
|
8
|
-
# class must implement #name
|
9
|
-
class UniqueNameCollection
|
10
|
-
attr_accessor :collection
|
11
|
-
attr_accessor :otherUnique
|
12
|
-
end
|
13
|
-
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
require "abstract_graph/composition/uniquenamecollection/initialize"
|
18
|
-
require "abstract_graph/composition/uniquenamecollection/add"
|
19
|
-
require "abstract_graph/composition/uniquenamecollection/dup"
|
20
|
-
require "abstract_graph/composition/uniquenamecollection/method_missing"
|
21
|
-
require "abstract_graph/composition/uniquenamecollection/link"
|
22
|
-
require "abstract_graph/composition/uniquenamecollection/rename"
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# required in "abstract_graph/composition/uniquenamecollection"
|
2
|
-
|
3
|
-
module AbstractGraph
|
4
|
-
module Composition
|
5
|
-
class UniqueNameCollection
|
6
|
-
|
7
|
-
# adds an object o into the collection
|
8
|
-
# p: Object o that implements #name
|
9
|
-
def add( o )
|
10
|
-
# note that otherUnique includes ourself
|
11
|
-
@otherUnique.each do |unc|
|
12
|
-
raise IndexError if unc[o.name]
|
13
|
-
end
|
14
|
-
@collection[o.name] = o
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# required in "abstract_graph/composition/uniquenamecollection"
|
2
|
-
|
3
|
-
module AbstractGraph
|
4
|
-
module Composition
|
5
|
-
class UniqueNameCollection
|
6
|
-
|
7
|
-
# does a deep copy of the object, in otherwords
|
8
|
-
# copies every object in the collection
|
9
|
-
def dup
|
10
|
-
other = self.class.new
|
11
|
-
# copy each object in our collection over
|
12
|
-
@collection.each_value do |o|
|
13
|
-
other.add o
|
14
|
-
end
|
15
|
-
other
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# required in "abstract_graph/composition/uniquenamecollection"
|
2
|
-
|
3
|
-
module AbstractGraph
|
4
|
-
module Composition
|
5
|
-
class UniqueNameCollection
|
6
|
-
|
7
|
-
# links two collections together so that their names
|
8
|
-
# will be mutually unique
|
9
|
-
# p: UniqueNameCollection unc is the other collection
|
10
|
-
# we want to link
|
11
|
-
# r: false if the two collections are not already
|
12
|
-
# mutually unique
|
13
|
-
def link( unc )
|
14
|
-
# note that either otherUnique may be alot
|
15
|
-
combinedUnique = @otherUnique | unc.otherUnique
|
16
|
-
|
17
|
-
# check if there are already any duplicates
|
18
|
-
allNames = []
|
19
|
-
combinedUnique.each do |tunc|
|
20
|
-
return nil if not ( tunc.keys & allNames ).empty?
|
21
|
-
allNames |= tunc.keys
|
22
|
-
end
|
23
|
-
|
24
|
-
# set each one to have the same uniquespace
|
25
|
-
combinedUnique.each do |tunc|
|
26
|
-
tunc.otherUnique = combinedUnique
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
# required in "abstract_graph/composition/uniquenamecollection"
|
2
|
-
|
3
|
-
module AbstractGraph
|
4
|
-
module Composition
|
5
|
-
class UniqueNameCollection
|
6
|
-
|
7
|
-
# pass all methods into the hash
|
8
|
-
def method_missing( m, *args, &block )
|
9
|
-
@collection.send( m.to_sym, *args, &block )
|
10
|
-
end
|
11
|
-
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
# required in "abstract_graph/composition/uniquenamecollection"
|
2
|
-
|
3
|
-
module AbstractGraph
|
4
|
-
module Composition
|
5
|
-
class UniqueNameCollection
|
6
|
-
|
7
|
-
# Change the name of a vertex in our graph
|
8
|
-
# p: String oldname represents the current vertex's name
|
9
|
-
# String newname represents the new name of our vertex
|
10
|
-
# note: the object needs to implement #name=
|
11
|
-
def rename( oldname, newname )
|
12
|
-
return nil if @collection[oldname].nil?
|
13
|
-
|
14
|
-
@otherUnique.each do |unc|
|
15
|
-
throw Exception if unc[newname]
|
16
|
-
end
|
17
|
-
|
18
|
-
# rename the object itself
|
19
|
-
@collection[oldname].name = newname
|
20
|
-
# remap the name
|
21
|
-
@collection[newname] = @collection[oldname]
|
22
|
-
# clear the old name
|
23
|
-
@collection.delete oldname
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|