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.
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