abstract_graph 1.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. checksums.yaml +13 -5
  2. data/Rakefile +11 -1
  3. data/lib/abstract_graph.rb +1 -0
  4. data/lib/abstract_graph/composition.rb +1 -1
  5. data/lib/abstract_graph/composition/edge.rb +5 -0
  6. data/lib/abstract_graph/composition/edge/initialize.rb +6 -0
  7. data/lib/abstract_graph/composition/edge/is_coincident.rb +5 -2
  8. data/lib/abstract_graph/composition/unique_name_collection.rb +28 -0
  9. data/lib/abstract_graph/composition/unique_name_collection/add.rb +23 -0
  10. data/lib/abstract_graph/composition/unique_name_collection/delete.rb +20 -0
  11. data/lib/abstract_graph/composition/unique_name_collection/dup.rb +24 -0
  12. data/lib/abstract_graph/composition/unique_name_collection/each.rb +18 -0
  13. data/lib/abstract_graph/composition/unique_name_collection/find.rb +18 -0
  14. data/lib/abstract_graph/composition/unique_name_collection/initialize.rb +22 -0
  15. data/lib/abstract_graph/composition/unique_name_collection/link.rb +42 -0
  16. data/lib/abstract_graph/composition/unique_name_collection/method_missing.rb +18 -0
  17. data/lib/abstract_graph/composition/unique_name_collection/rename.rb +34 -0
  18. data/lib/abstract_graph/composition/unique_name_collection/ticket.rb +18 -0
  19. data/lib/abstract_graph/composition/unique_name_collection/ticket/get.rb +20 -0
  20. data/lib/abstract_graph/composition/unique_name_collection/ticket/initialize.rb +20 -0
  21. data/lib/abstract_graph/composition/unique_name_collection/ticket/set.rb +20 -0
  22. data/lib/abstract_graph/composition/vertex.rb +5 -1
  23. data/lib/abstract_graph/composition/vertex/initialize.rb +6 -0
  24. data/lib/abstract_graph/graph.rb +1 -0
  25. data/lib/abstract_graph/graph/add_edge.rb +9 -8
  26. data/lib/abstract_graph/graph/add_vertex.rb +5 -2
  27. data/lib/abstract_graph/graph/adjacency_list.rb +8 -3
  28. data/lib/abstract_graph/graph/change_edge_name.rb +6 -4
  29. data/lib/abstract_graph/graph/change_vertex_name.rb +5 -3
  30. data/lib/abstract_graph/graph/connected.rb +36 -0
  31. data/lib/abstract_graph/graph/delete_edge.rb +5 -4
  32. data/lib/abstract_graph/graph/delete_vertex.rb +5 -4
  33. data/lib/abstract_graph/graph/dup.rb +8 -3
  34. data/lib/abstract_graph/graph/get_edge_name.rb +7 -4
  35. data/lib/abstract_graph/graph/has_edge.rb +6 -3
  36. data/lib/abstract_graph/graph/has_vertex.rb +6 -3
  37. data/lib/abstract_graph/graph/initialize.rb +5 -1
  38. data/lib/abstract_graph/graph/is_adjacent.rb +9 -7
  39. data/lib/abstract_graph/graph/merge_vertices.rb +16 -14
  40. data/lib/abstract_graph/graph/split_vertex.rb +10 -7
  41. data/lib/abstract_graph/graph/templates/complete_bipartite_graph.rb +7 -5
  42. data/lib/abstract_graph/graph/templates/complete_graph.rb +8 -6
  43. data/lib/abstract_graph/graph/templates/cycle_graph.rb +6 -5
  44. data/lib/abstract_graph/graph/templates/path_graph.rb +6 -4
  45. data/lib/abstract_graph/graph/templates/petersen_graph.rb +8 -2
  46. data/lib/abstract_graph/version.rb +1 -1
  47. data/spec/abstract_graph/composition/{uniquenamecollection → unique_name_collection}/add_spec.rb +0 -0
  48. data/spec/abstract_graph/composition/{uniquenamecollection → unique_name_collection}/dup_spec.rb +0 -0
  49. data/spec/abstract_graph/composition/unique_name_collection/each_spec.rb +38 -0
  50. data/spec/abstract_graph/composition/unique_name_collection/find_spec.rb +33 -0
  51. data/spec/abstract_graph/composition/{uniquenamecollection → unique_name_collection}/initialize_spec.rb +0 -0
  52. data/spec/abstract_graph/composition/{uniquenamecollection → unique_name_collection}/link_spec.rb +0 -0
  53. data/spec/abstract_graph/composition/{uniquenamecollection → unique_name_collection}/method_missing_spec.rb +4 -15
  54. data/spec/abstract_graph/composition/{uniquenamecollection → unique_name_collection}/rename_spec.rb +1 -1
  55. data/spec/abstract_graph/composition/{uniquenamecollection_spec.rb → unique_name_collection_spec.rb} +0 -0
  56. data/spec/abstract_graph/graph/add_edge_spec.rb +1 -1
  57. data/spec/abstract_graph/graph/connected_spec.rb +39 -0
  58. data/tasks/benchmark.rb +47 -0
  59. data/tasks/create_method.rb +64 -0
  60. data/tasks/list_methods.rb +5 -0
  61. metadata +45 -32
  62. data/lib/abstract_graph/composition/uniquenamecollection.rb +0 -22
  63. data/lib/abstract_graph/composition/uniquenamecollection/add.rb +0 -19
  64. data/lib/abstract_graph/composition/uniquenamecollection/dup.rb +0 -20
  65. data/lib/abstract_graph/composition/uniquenamecollection/initialize.rb +0 -14
  66. data/lib/abstract_graph/composition/uniquenamecollection/link.rb +0 -32
  67. data/lib/abstract_graph/composition/uniquenamecollection/method_missing.rb +0 -14
  68. data/lib/abstract_graph/composition/uniquenamecollection/rename.rb +0 -28
  69. data/lib/abstract_graph/composition/vertex/delete.rb +0 -12
  70. 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,14 +0,0 @@
1
- # required in "abstract_graph/composition/uniquenamecollection"
2
-
3
- module AbstractGraph
4
- module Composition
5
- class UniqueNameCollection
6
-
7
- def initialize
8
- @collection = Hash.new
9
- @otherUnique = [self]
10
- end
11
-
12
- end
13
- end
14
- 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
@@ -1,12 +0,0 @@
1
- # required in "abstract_graph/composition/vertex"
2
-
3
- module AbstractGraph
4
- module Composition
5
- class Vertex
6
-
7
- def delete
8
- end
9
-
10
- end
11
- end
12
- end
@@ -1,12 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module AbstractGraph
4
- module Composition
5
- describe Vertex do
6
-
7
- describe "#delete" do
8
-
9
- end
10
- end
11
- end
12
- end