gravatar
kpeter (Peter Kovacs)
kpeter@inf.elte.hu
Extend the interface of StaticDigraph (#68) with index(), arc() and node() functions similarly to other static graph structures.
0 2 0
default
2 files changed with 57 insertions and 6 deletions:
↑ Collapse diff ↑
Ignore white space 6 line context
... ...
@@ -236,31 +236,71 @@
236 236
  /// values for each arc. Moreover it provides faster item iteration than
237 237
  /// \ref ListDigraph and \ref SmartDigraph, especially using \c OutArcIt
238 238
  /// iterators, since its arcs are stored in an appropriate order.
239 239
  /// However it only provides build() and clear() functions and does not
240 240
  /// support any other modification of the digraph.
241 241
  ///
242
  /// Since this digraph structure is completely static, its nodes and arcs
243
  /// can be indexed with integers from the ranges <tt>[0..nodeNum()-1]</tt>
244
  /// and <tt>[0..arcNum()-1]</tt>, respectively. 
245
  /// The index of an item is the same as its ID, it can be obtained
246
  /// using the corresponding \ref index() or \ref concepts::Digraph::id()
247
  /// "id()" function. A node or arc with a certain index can be obtained
248
  /// using node() or arc().
249
  ///
242 250
  /// This type fully conforms to the \ref concepts::Digraph "Digraph concept".
243 251
  /// Most of its member functions and nested classes are documented
244 252
  /// only in the concept class.
245 253
  ///
246 254
  /// \sa concepts::Digraph
247 255
  class StaticDigraph : public ExtendedStaticDigraphBase {
248 256
  public:
249 257

	
250 258
    typedef ExtendedStaticDigraphBase Parent;
251 259
  
252 260
  public:
253 261
  
254
    /// \brief Clear the digraph.
262
    /// \brief Constructor
255 263
    ///
256
    /// This function erases all nodes and arcs from the digraph.
257
    void clear() {
258
      Parent::clear();
259
    }
260
    
264
    /// Default constructor.
265
    StaticDigraph() : Parent() {}
266

	
267
    /// \brief The node with the given index.
268
    ///
269
    /// This function returns the node with the given index.
270
    /// \sa index()
271
    Node node(int ix) const { return Parent::nodeFromId(ix); }
272

	
273
    /// \brief The arc with the given index.
274
    ///
275
    /// This function returns the arc with the given index.
276
    /// \sa index()
277
    Arc arc(int ix) const { return Parent::arcFromId(ix); }
278

	
279
    /// \brief The index of the given node.
280
    ///
281
    /// This function returns the index of the the given node.
282
    /// \sa node()
283
    int index(Node node) const { return Parent::id(node); }
284

	
285
    /// \brief The index of the given arc.
286
    ///
287
    /// This function returns the index of the the given arc.
288
    /// \sa arc()
289
    int index(Arc arc) const { return Parent::id(arc); }
290

	
291
    /// \brief Number of nodes.
292
    ///
293
    /// This function returns the number of nodes.
294
    int nodeNum() const { return node_num; }
295

	
296
    /// \brief Number of arcs.
297
    ///
298
    /// This function returns the number of arcs.
299
    int arcNum() const { return arc_num; }
300

	
261 301
    /// \brief Build the digraph copying another digraph.
262 302
    ///
263 303
    /// This function builds the digraph copying another digraph of any
264 304
    /// kind. It can be called more than once, but in such case, the whole
265 305
    /// structure and all maps will be cleared and rebuilt.
266 306
    ///
... ...
@@ -285,12 +325,18 @@
285 325
    template <typename Digraph, typename NodeRefMap, typename ArcRefMap>
286 326
    void build(const Digraph& digraph, NodeRefMap& nodeRef, ArcRefMap& arcRef) {
287 327
      if (built) Parent::clear();
288 328
      Parent::build(digraph, nodeRef, arcRef);
289 329
    }
290 330
  
331
    /// \brief Clear the digraph.
332
    ///
333
    /// This function erases all nodes and arcs from the digraph.
334
    void clear() {
335
      Parent::clear();
336
    }
291 337

	
292 338
  protected:
293 339

	
294 340
    using Parent::fastFirstOut;
295 341
    using Parent::fastNextOut;
296 342
    using Parent::fastLastOut;
Ignore white space 12 line context
... ...
@@ -442,12 +442,17 @@
442 442
  checkGraphConArcList(G, 4);
443 443

	
444 444
  checkNodeIds(G);
445 445
  checkArcIds(G);
446 446
  checkGraphNodeMap(G);
447 447
  checkGraphArcMap(G);
448
  
449
  int n = G.nodeNum();
450
  int m = G.arcNum();
451
  check(G.index(G.node(n-1)) == n-1, "Wrong index.");
452
  check(G.index(G.arc(m-1)) == m-1, "Wrong index.");
448 453
}
449 454

	
450 455
void checkFullDigraph(int num) {
451 456
  typedef FullDigraph Digraph;
452 457
  DIGRAPH_TYPEDEFS(Digraph);
453 458
  Digraph G(num);
0 comments (0 inline)