gravatar
kpeter (Peter Kovacs)
kpeter@inf.elte.hu
Simplify the interface of MinMeanCycle (#179) Remove init() and reset(), and move their content into findMinMean().
0 1 0
default
1 file changed with 18 insertions and 45 deletions:
↑ Collapse diff ↑
Ignore white space 6 line context
... ...
@@ -122,7 +122,7 @@
122 122
    /// found cycle.
123 123
    ///
124 124
    /// If you don't call this function before calling \ref run() or
125
    /// \ref init(), it will allocate a local \ref Path "path"
125
    /// \ref findMinMean(), it will allocate a local \ref Path "path"
126 126
    /// structure. The destuctor deallocates this automatically
127 127
    /// allocated object, of course.
128 128
    ///
... ...
@@ -144,71 +144,45 @@
144 144
    /// \name Execution control
145 145
    /// The simplest way to execute the algorithm is to call the \ref run()
146 146
    /// function.\n
147
    /// If you only need the minimum mean length, you may call \ref init()
148
    /// and \ref findMinMean().
149
    /// If you would like to run the algorithm again (e.g. the underlying
150
    /// digraph and/or the arc lengths has been modified), you may not
151
    /// create a new instance of the class, rather call \ref reset(),
152
    /// \ref findMinMean() and \ref findCycle() instead.
147
    /// If you only need the minimum mean length, you may call
148
    /// \ref findMinMean().
153 149

	
154 150
    /// @{
155 151

	
156 152
    /// \brief Run the algorithm.
157 153
    ///
158 154
    /// This function runs the algorithm.
155
    /// It can be called more than once (e.g. if the underlying digraph
156
    /// and/or the arc lengths have been modified).
159 157
    ///
160 158
    /// \return \c true if a directed cycle exists in the digraph.
161 159
    ///
162
    /// \note Apart from the return value, <tt>mmc.run()</tt> is just a
163
    /// shortcut of the following code.
160
    /// \note <tt>mmc.run()</tt> is just a shortcut of the following code.
164 161
    /// \code
165
    ///   mmc.init();
166
    ///   mmc.findMinMean();
167
    ///   mmc.findCycle();
162
    ///   return mmc.findMinMean() && mmc.findCycle();
168 163
    /// \endcode
169 164
    bool run() {
170
      init();
171 165
      return findMinMean() && findCycle();
172 166
    }
173 167

	
174
    /// \brief Initialize the internal data structures.
168
    /// \brief Find the minimum cycle mean.
175 169
    ///
176
    /// This function initializes the internal data structures.
170
    /// This function finds the minimum mean length of the directed
171
    /// cycles in the digraph.
177 172
    ///
178
    /// \sa reset()
179
    void init() {
173
    /// \return \c true if a directed cycle exists in the digraph.
174
    bool findMinMean() {
175
      // Initialize
180 176
      _tol.epsilon(1e-6);
181 177
      if (!_cycle_path) {
182 178
        _local_path = true;
183 179
        _cycle_path = new Path;
184 180
      }
181
      _cycle_path->clear();
185 182
      _cycle_found = false;
183

	
184
      // Find the minimum cycle mean in the components
186 185
      _comp_num = stronglyConnectedComponents(_gr, _comp);
187
    }
188

	
189
    /// \brief Reset the internal data structures.
190
    ///
191
    /// This function resets the internal data structures so that
192
    /// findMinMean() and findCycle() can be called again (e.g. when the
193
    /// underlying digraph and/or the arc lengths has been modified).
194
    ///
195
    /// \sa init()
196
    void reset() {
197
      if (_cycle_path) _cycle_path->clear();
198
      _cycle_found = false;
199
      _comp_num = stronglyConnectedComponents(_gr, _comp);
200
    }
201

	
202
    /// \brief Find the minimum cycle mean.
203
    ///
204
    /// This function computes all the required data and finds the
205
    /// minimum mean length of the directed cycles in the digraph.
206
    ///
207
    /// \return \c true if a directed cycle exists in the digraph.
208
    ///
209
    /// \pre \ref init() must be called before using this function.
210
    bool findMinMean() {
211
      // Find the minimum cycle mean in the components
212 186
      for (int comp = 0; comp < _comp_num; ++comp) {
213 187
        if (!initCurrentComponent(comp)) continue;
214 188
        while (true) {
... ...
@@ -227,8 +201,7 @@
227 201
    ///
228 202
    /// \return \c true if a directed cycle exists in the digraph.
229 203
    ///
230
    /// \pre \ref init() and \ref findMinMean() must be called before
231
    /// using this function.
204
    /// \pre \ref findMinMean() must be called before using this function.
232 205
    bool findCycle() {
233 206
      if (!_cycle_found) return false;
234 207
      _cycle_path->addBack(_policy[_cycle_node]);
... ...
@@ -242,7 +215,7 @@
242 215
    /// @}
243 216

	
244 217
    /// \name Query Functions
245
    /// The result of the algorithm can be obtained using these
218
    /// The results of the algorithm can be obtained using these
246 219
    /// functions.\n
247 220
    /// The algorithm should be executed before using them.
248 221

	
0 comments (0 inline)