lemongraph 0.0.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 (161) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +8 -0
  3. data/LICENSE +674 -0
  4. data/README.md +6 -0
  5. data/ext/lemon-1.3.1/AUTHORS +26 -0
  6. data/ext/lemon-1.3.1/CMakeLists.txt +371 -0
  7. data/ext/lemon-1.3.1/INSTALL +167 -0
  8. data/ext/lemon-1.3.1/LICENSE +32 -0
  9. data/ext/lemon-1.3.1/NEWS +337 -0
  10. data/ext/lemon-1.3.1/README +50 -0
  11. data/ext/lemon-1.3.1/cmake/FindCOIN.cmake +110 -0
  12. data/ext/lemon-1.3.1/cmake/FindGLPK.cmake +55 -0
  13. data/ext/lemon-1.3.1/cmake/FindGhostscript.cmake +10 -0
  14. data/ext/lemon-1.3.1/cmake/FindILOG.cmake +102 -0
  15. data/ext/lemon-1.3.1/cmake/FindSOPLEX.cmake +23 -0
  16. data/ext/lemon-1.3.1/cmake/LEMONConfig.cmake.in +13 -0
  17. data/ext/lemon-1.3.1/cmake/nsis/lemon.ico +0 -0
  18. data/ext/lemon-1.3.1/cmake/nsis/uninstall.ico +0 -0
  19. data/ext/lemon-1.3.1/cmake/version.cmake +1 -0
  20. data/ext/lemon-1.3.1/cmake/version.cmake.in +1 -0
  21. data/ext/lemon-1.3.1/contrib/CMakeLists.txt +19 -0
  22. data/ext/lemon-1.3.1/lemon/CMakeLists.txt +91 -0
  23. data/ext/lemon-1.3.1/lemon/adaptors.h +3638 -0
  24. data/ext/lemon-1.3.1/lemon/arg_parser.cc +474 -0
  25. data/ext/lemon-1.3.1/lemon/arg_parser.h +440 -0
  26. data/ext/lemon-1.3.1/lemon/assert.h +214 -0
  27. data/ext/lemon-1.3.1/lemon/base.cc +37 -0
  28. data/ext/lemon-1.3.1/lemon/bellman_ford.h +1116 -0
  29. data/ext/lemon-1.3.1/lemon/bfs.h +1754 -0
  30. data/ext/lemon-1.3.1/lemon/bin_heap.h +347 -0
  31. data/ext/lemon-1.3.1/lemon/binomial_heap.h +445 -0
  32. data/ext/lemon-1.3.1/lemon/bits/alteration_notifier.h +472 -0
  33. data/ext/lemon-1.3.1/lemon/bits/array_map.h +351 -0
  34. data/ext/lemon-1.3.1/lemon/bits/bezier.h +174 -0
  35. data/ext/lemon-1.3.1/lemon/bits/default_map.h +182 -0
  36. data/ext/lemon-1.3.1/lemon/bits/edge_set_extender.h +627 -0
  37. data/ext/lemon-1.3.1/lemon/bits/enable_if.h +131 -0
  38. data/ext/lemon-1.3.1/lemon/bits/graph_adaptor_extender.h +401 -0
  39. data/ext/lemon-1.3.1/lemon/bits/graph_extender.h +1332 -0
  40. data/ext/lemon-1.3.1/lemon/bits/lock.h +65 -0
  41. data/ext/lemon-1.3.1/lemon/bits/map_extender.h +332 -0
  42. data/ext/lemon-1.3.1/lemon/bits/path_dump.h +177 -0
  43. data/ext/lemon-1.3.1/lemon/bits/solver_bits.h +194 -0
  44. data/ext/lemon-1.3.1/lemon/bits/traits.h +388 -0
  45. data/ext/lemon-1.3.1/lemon/bits/variant.h +494 -0
  46. data/ext/lemon-1.3.1/lemon/bits/vector_map.h +244 -0
  47. data/ext/lemon-1.3.1/lemon/bits/windows.cc +166 -0
  48. data/ext/lemon-1.3.1/lemon/bits/windows.h +44 -0
  49. data/ext/lemon-1.3.1/lemon/bucket_heap.h +594 -0
  50. data/ext/lemon-1.3.1/lemon/capacity_scaling.h +1014 -0
  51. data/ext/lemon-1.3.1/lemon/cbc.cc +460 -0
  52. data/ext/lemon-1.3.1/lemon/cbc.h +129 -0
  53. data/ext/lemon-1.3.1/lemon/christofides_tsp.h +254 -0
  54. data/ext/lemon-1.3.1/lemon/circulation.h +807 -0
  55. data/ext/lemon-1.3.1/lemon/clp.cc +464 -0
  56. data/ext/lemon-1.3.1/lemon/clp.h +164 -0
  57. data/ext/lemon-1.3.1/lemon/color.cc +44 -0
  58. data/ext/lemon-1.3.1/lemon/color.h +204 -0
  59. data/ext/lemon-1.3.1/lemon/concept_check.h +77 -0
  60. data/ext/lemon-1.3.1/lemon/concepts/bpgraph.h +1029 -0
  61. data/ext/lemon-1.3.1/lemon/concepts/digraph.h +491 -0
  62. data/ext/lemon-1.3.1/lemon/concepts/graph.h +788 -0
  63. data/ext/lemon-1.3.1/lemon/concepts/graph_components.h +2134 -0
  64. data/ext/lemon-1.3.1/lemon/concepts/heap.h +324 -0
  65. data/ext/lemon-1.3.1/lemon/concepts/maps.h +223 -0
  66. data/ext/lemon-1.3.1/lemon/concepts/path.h +312 -0
  67. data/ext/lemon-1.3.1/lemon/config.h.in +22 -0
  68. data/ext/lemon-1.3.1/lemon/connectivity.h +1688 -0
  69. data/ext/lemon-1.3.1/lemon/core.h +2506 -0
  70. data/ext/lemon-1.3.1/lemon/cost_scaling.h +1607 -0
  71. data/ext/lemon-1.3.1/lemon/counter.h +249 -0
  72. data/ext/lemon-1.3.1/lemon/cplex.cc +994 -0
  73. data/ext/lemon-1.3.1/lemon/cplex.h +292 -0
  74. data/ext/lemon-1.3.1/lemon/cycle_canceling.h +1230 -0
  75. data/ext/lemon-1.3.1/lemon/dfs.h +1637 -0
  76. data/ext/lemon-1.3.1/lemon/dheap.h +352 -0
  77. data/ext/lemon-1.3.1/lemon/dijkstra.h +1303 -0
  78. data/ext/lemon-1.3.1/lemon/dim2.h +726 -0
  79. data/ext/lemon-1.3.1/lemon/dimacs.h +448 -0
  80. data/ext/lemon-1.3.1/lemon/edge_set.h +1420 -0
  81. data/ext/lemon-1.3.1/lemon/edmonds_karp.h +556 -0
  82. data/ext/lemon-1.3.1/lemon/elevator.h +982 -0
  83. data/ext/lemon-1.3.1/lemon/error.h +276 -0
  84. data/ext/lemon-1.3.1/lemon/euler.h +287 -0
  85. data/ext/lemon-1.3.1/lemon/fib_heap.h +475 -0
  86. data/ext/lemon-1.3.1/lemon/fractional_matching.h +2139 -0
  87. data/ext/lemon-1.3.1/lemon/full_graph.h +1082 -0
  88. data/ext/lemon-1.3.1/lemon/glpk.cc +1012 -0
  89. data/ext/lemon-1.3.1/lemon/glpk.h +263 -0
  90. data/ext/lemon-1.3.1/lemon/gomory_hu.h +568 -0
  91. data/ext/lemon-1.3.1/lemon/graph_to_eps.h +1186 -0
  92. data/ext/lemon-1.3.1/lemon/greedy_tsp.h +251 -0
  93. data/ext/lemon-1.3.1/lemon/grid_graph.h +699 -0
  94. data/ext/lemon-1.3.1/lemon/grosso_locatelli_pullan_mc.h +840 -0
  95. data/ext/lemon-1.3.1/lemon/hao_orlin.h +1015 -0
  96. data/ext/lemon-1.3.1/lemon/hartmann_orlin_mmc.h +654 -0
  97. data/ext/lemon-1.3.1/lemon/howard_mmc.h +651 -0
  98. data/ext/lemon-1.3.1/lemon/hypercube_graph.h +459 -0
  99. data/ext/lemon-1.3.1/lemon/insertion_tsp.h +533 -0
  100. data/ext/lemon-1.3.1/lemon/karp_mmc.h +590 -0
  101. data/ext/lemon-1.3.1/lemon/kruskal.h +324 -0
  102. data/ext/lemon-1.3.1/lemon/lemon.pc.in +10 -0
  103. data/ext/lemon-1.3.1/lemon/lgf_reader.h +3854 -0
  104. data/ext/lemon-1.3.1/lemon/lgf_writer.h +2687 -0
  105. data/ext/lemon-1.3.1/lemon/list_graph.h +2510 -0
  106. data/ext/lemon-1.3.1/lemon/lp.h +95 -0
  107. data/ext/lemon-1.3.1/lemon/lp_base.cc +30 -0
  108. data/ext/lemon-1.3.1/lemon/lp_base.h +2147 -0
  109. data/ext/lemon-1.3.1/lemon/lp_skeleton.cc +143 -0
  110. data/ext/lemon-1.3.1/lemon/lp_skeleton.h +234 -0
  111. data/ext/lemon-1.3.1/lemon/maps.h +4057 -0
  112. data/ext/lemon-1.3.1/lemon/matching.h +3505 -0
  113. data/ext/lemon-1.3.1/lemon/math.h +77 -0
  114. data/ext/lemon-1.3.1/lemon/max_cardinality_search.h +794 -0
  115. data/ext/lemon-1.3.1/lemon/min_cost_arborescence.h +808 -0
  116. data/ext/lemon-1.3.1/lemon/nagamochi_ibaraki.h +702 -0
  117. data/ext/lemon-1.3.1/lemon/nauty_reader.h +113 -0
  118. data/ext/lemon-1.3.1/lemon/nearest_neighbor_tsp.h +238 -0
  119. data/ext/lemon-1.3.1/lemon/network_simplex.h +1659 -0
  120. data/ext/lemon-1.3.1/lemon/opt2_tsp.h +367 -0
  121. data/ext/lemon-1.3.1/lemon/pairing_heap.h +474 -0
  122. data/ext/lemon-1.3.1/lemon/path.h +1164 -0
  123. data/ext/lemon-1.3.1/lemon/planarity.h +2754 -0
  124. data/ext/lemon-1.3.1/lemon/preflow.h +985 -0
  125. data/ext/lemon-1.3.1/lemon/quad_heap.h +343 -0
  126. data/ext/lemon-1.3.1/lemon/radix_heap.h +438 -0
  127. data/ext/lemon-1.3.1/lemon/radix_sort.h +487 -0
  128. data/ext/lemon-1.3.1/lemon/random.cc +29 -0
  129. data/ext/lemon-1.3.1/lemon/random.h +1005 -0
  130. data/ext/lemon-1.3.1/lemon/smart_graph.h +1344 -0
  131. data/ext/lemon-1.3.1/lemon/soplex.cc +465 -0
  132. data/ext/lemon-1.3.1/lemon/soplex.h +158 -0
  133. data/ext/lemon-1.3.1/lemon/static_graph.h +476 -0
  134. data/ext/lemon-1.3.1/lemon/suurballe.h +776 -0
  135. data/ext/lemon-1.3.1/lemon/time_measure.h +610 -0
  136. data/ext/lemon-1.3.1/lemon/tolerance.h +242 -0
  137. data/ext/lemon-1.3.1/lemon/unionfind.h +1824 -0
  138. data/ext/lemon-1.3.1/scripts/unify-sources.sh +390 -0
  139. data/ext/lemon-1.3.1/scripts/valgrind-wrapper.sh +22 -0
  140. data/ext/lemongraph/arc_map.cc +1007 -0
  141. data/ext/lemongraph/digraph.cc +282 -0
  142. data/ext/lemongraph/digraph_arc.cc +153 -0
  143. data/ext/lemongraph/digraph_node.cc +277 -0
  144. data/ext/lemongraph/edge_map.cc +770 -0
  145. data/ext/lemongraph/extconf.rb +53 -0
  146. data/ext/lemongraph/graph.cc +351 -0
  147. data/ext/lemongraph/graph_arc.cc +95 -0
  148. data/ext/lemongraph/graph_edge.cc +153 -0
  149. data/ext/lemongraph/graph_item.cc +76 -0
  150. data/ext/lemongraph/graph_node.cc +321 -0
  151. data/ext/lemongraph/lemongraph.cc +260 -0
  152. data/ext/lemongraph/lemongraph.hh +295 -0
  153. data/ext/lemongraph/lemongraph.map +6 -0
  154. data/ext/lemongraph/lemongraph_export.hh +31 -0
  155. data/ext/lemongraph/node_map.cc +1011 -0
  156. data/lemongraph.gemspec +176 -0
  157. data/lib/lemongraph/graphviz.rb +240 -0
  158. data/lib/lemongraph/version.rb +4 -0
  159. data/lib/lemongraph.rb +21 -0
  160. data/samples/lemondeps.rb +38 -0
  161. metadata +202 -0
@@ -0,0 +1,249 @@
1
+ /* -*- mode: C++; indent-tabs-mode: nil; -*-
2
+ *
3
+ * This file is a part of LEMON, a generic C++ optimization library.
4
+ *
5
+ * Copyright (C) 2003-2009
6
+ * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
7
+ * (Egervary Research Group on Combinatorial Optimization, EGRES).
8
+ *
9
+ * Permission to use, modify and distribute this software is granted
10
+ * provided that this copyright notice appears in all copies. For
11
+ * precise terms see the accompanying LICENSE file.
12
+ *
13
+ * This software is provided "AS IS" with no warranty of any kind,
14
+ * express or implied, and with no claim as to its suitability for any
15
+ * purpose.
16
+ *
17
+ */
18
+
19
+ #ifndef LEMON_COUNTER_H
20
+ #define LEMON_COUNTER_H
21
+
22
+ #include <string>
23
+ #include <iostream>
24
+
25
+ ///\ingroup timecount
26
+ ///\file
27
+ ///\brief Tools for counting steps and events
28
+
29
+ namespace lemon
30
+ {
31
+
32
+ template<class P> class _NoSubCounter;
33
+
34
+ template<class P>
35
+ class _SubCounter
36
+ {
37
+ P &_parent;
38
+ std::string _title;
39
+ std::ostream &_os;
40
+ int count;
41
+ public:
42
+
43
+ typedef _SubCounter<_SubCounter<P> > SubCounter;
44
+ typedef _NoSubCounter<_SubCounter<P> > NoSubCounter;
45
+
46
+ _SubCounter(P &parent)
47
+ : _parent(parent), _title(), _os(std::cerr), count(0) {}
48
+ _SubCounter(P &parent,std::string title,std::ostream &os=std::cerr)
49
+ : _parent(parent), _title(title), _os(os), count(0) {}
50
+ _SubCounter(P &parent,const char *title,std::ostream &os=std::cerr)
51
+ : _parent(parent), _title(title), _os(os), count(0) {}
52
+ ~_SubCounter() {
53
+ _os << _title << count <<std::endl;
54
+ _parent+=count;
55
+ }
56
+ _SubCounter &operator++() { count++; return *this;}
57
+ int operator++(int) { return count++; }
58
+ _SubCounter &operator--() { count--; return *this;}
59
+ int operator--(int) { return count--; }
60
+ _SubCounter &operator+=(int c) { count+=c; return *this;}
61
+ _SubCounter &operator-=(int c) { count-=c; return *this;}
62
+ operator int() {return count;}
63
+ };
64
+
65
+ template<class P>
66
+ class _NoSubCounter
67
+ {
68
+ P &_parent;
69
+ public:
70
+ typedef _NoSubCounter<_NoSubCounter<P> > SubCounter;
71
+ typedef _NoSubCounter<_NoSubCounter<P> > NoSubCounter;
72
+
73
+ _NoSubCounter(P &parent) :_parent(parent) {}
74
+ _NoSubCounter(P &parent,std::string,std::ostream &)
75
+ :_parent(parent) {}
76
+ _NoSubCounter(P &parent,std::string)
77
+ :_parent(parent) {}
78
+ _NoSubCounter(P &parent,const char *,std::ostream &)
79
+ :_parent(parent) {}
80
+ _NoSubCounter(P &parent,const char *)
81
+ :_parent(parent) {}
82
+ ~_NoSubCounter() {}
83
+ _NoSubCounter &operator++() { ++_parent; return *this;}
84
+ int operator++(int) { _parent++; return 0;}
85
+ _NoSubCounter &operator--() { --_parent; return *this;}
86
+ int operator--(int) { _parent--; return 0;}
87
+ _NoSubCounter &operator+=(int c) { _parent+=c; return *this;}
88
+ _NoSubCounter &operator-=(int c) { _parent-=c; return *this;}
89
+ operator int() {return 0;}
90
+ };
91
+
92
+
93
+ /// \addtogroup timecount
94
+ /// @{
95
+
96
+ /// A counter class
97
+
98
+ /// This class makes it easier to count certain events (e.g. for debug
99
+ /// reasons).
100
+ /// You can increment or decrement the counter using \c operator++,
101
+ /// \c operator--, \c operator+= and \c operator-=. You can also
102
+ /// define subcounters for the different phases of the algorithm or
103
+ /// for different types of operations.
104
+ /// A report containing the given title and the value of the counter
105
+ /// is automatically printed on destruction.
106
+ ///
107
+ /// The following example shows the usage of counters and subcounters.
108
+ /// \code
109
+ /// // Bubble sort
110
+ /// std::vector<T> v;
111
+ /// ...
112
+ /// Counter op("Operations: ");
113
+ /// Counter::SubCounter as(op, "Assignments: ");
114
+ /// Counter::SubCounter co(op, "Comparisons: ");
115
+ /// for (int i = v.size()-1; i > 0; --i) {
116
+ /// for (int j = 0; j < i; ++j) {
117
+ /// if (v[j] > v[j+1]) {
118
+ /// T tmp = v[j];
119
+ /// v[j] = v[j+1];
120
+ /// v[j+1] = tmp;
121
+ /// as += 3; // three assignments
122
+ /// }
123
+ /// ++co; // one comparison
124
+ /// }
125
+ /// }
126
+ /// \endcode
127
+ ///
128
+ /// This code prints out something like that:
129
+ /// \code
130
+ /// Comparisons: 45
131
+ /// Assignments: 57
132
+ /// Operations: 102
133
+ /// \endcode
134
+ ///
135
+ /// \sa NoCounter
136
+ class Counter
137
+ {
138
+ std::string _title;
139
+ std::ostream &_os;
140
+ int count;
141
+ public:
142
+
143
+ /// SubCounter class
144
+
145
+ /// This class can be used to setup subcounters for a \ref Counter
146
+ /// to have finer reports. A subcounter provides exactly the same
147
+ /// operations as the main \ref Counter, but it also increments and
148
+ /// decrements the value of its parent.
149
+ /// Subcounters can also have subcounters.
150
+ ///
151
+ /// The parent counter must be given as the first parameter of the
152
+ /// constructor. Apart from that a title and an \c ostream object
153
+ /// can also be given just like for the main \ref Counter.
154
+ ///
155
+ /// A report containing the given title and the value of the
156
+ /// subcounter is automatically printed on destruction. If you
157
+ /// would like to turn off this report, use \ref NoSubCounter
158
+ /// instead.
159
+ ///
160
+ /// \sa NoSubCounter
161
+ typedef _SubCounter<Counter> SubCounter;
162
+
163
+ /// SubCounter class without printing report on destruction
164
+
165
+ /// This class can be used to setup subcounters for a \ref Counter.
166
+ /// It is the same as \ref SubCounter but it does not print report
167
+ /// on destruction. (It modifies the value of its parent, so 'No'
168
+ /// only means 'do not print'.)
169
+ ///
170
+ /// Replacing \ref SubCounter "SubCounter"s with \ref NoSubCounter
171
+ /// "NoSubCounter"s makes it possible to turn off reporting
172
+ /// subcounter values without actually removing the definitions
173
+ /// and the increment or decrement operators.
174
+ ///
175
+ /// \sa SubCounter
176
+ typedef _NoSubCounter<Counter> NoSubCounter;
177
+
178
+ /// Constructor.
179
+ Counter() : _title(), _os(std::cerr), count(0) {}
180
+ /// Constructor.
181
+ Counter(std::string title,std::ostream &os=std::cerr)
182
+ : _title(title), _os(os), count(0) {}
183
+ /// Constructor.
184
+ Counter(const char *title,std::ostream &os=std::cerr)
185
+ : _title(title), _os(os), count(0) {}
186
+ /// Destructor. Prints the given title and the value of the counter.
187
+ ~Counter() {
188
+ _os << _title << count <<std::endl;
189
+ }
190
+ ///\e
191
+ Counter &operator++() { count++; return *this;}
192
+ ///\e
193
+ int operator++(int) { return count++;}
194
+ ///\e
195
+ Counter &operator--() { count--; return *this;}
196
+ ///\e
197
+ int operator--(int) { return count--;}
198
+ ///\e
199
+ Counter &operator+=(int c) { count+=c; return *this;}
200
+ ///\e
201
+ Counter &operator-=(int c) { count-=c; return *this;}
202
+ /// Resets the counter to the given value.
203
+
204
+ /// Resets the counter to the given value.
205
+ /// \note This function does not reset the values of
206
+ /// \ref SubCounter "SubCounter"s but it resets \ref NoSubCounter
207
+ /// "NoSubCounter"s along with the main counter.
208
+ void reset(int c=0) {count=c;}
209
+ /// Returns the value of the counter.
210
+ operator int() {return count;}
211
+ };
212
+
213
+ /// 'Do nothing' version of Counter.
214
+
215
+ /// This class can be used in the same way as \ref Counter, but it
216
+ /// does not count at all and does not print report on destruction.
217
+ ///
218
+ /// Replacing a \ref Counter with a \ref NoCounter makes it possible
219
+ /// to turn off all counting and reporting (SubCounters should also
220
+ /// be replaced with NoSubCounters), so it does not affect the
221
+ /// efficiency of the program at all.
222
+ ///
223
+ /// \sa Counter
224
+ class NoCounter
225
+ {
226
+ public:
227
+ typedef _NoSubCounter<NoCounter> SubCounter;
228
+ typedef _NoSubCounter<NoCounter> NoSubCounter;
229
+
230
+ NoCounter() {}
231
+ NoCounter(std::string,std::ostream &) {}
232
+ NoCounter(const char *,std::ostream &) {}
233
+ NoCounter(std::string) {}
234
+ NoCounter(const char *) {}
235
+ NoCounter &operator++() { return *this; }
236
+ int operator++(int) { return 0; }
237
+ NoCounter &operator--() { return *this; }
238
+ int operator--(int) { return 0; }
239
+ NoCounter &operator+=(int) { return *this;}
240
+ NoCounter &operator-=(int) { return *this;}
241
+ void reset(int) {}
242
+ void reset() {}
243
+ operator int() {return 0;}
244
+ };
245
+
246
+ ///@}
247
+ }
248
+
249
+ #endif