17 */ |
17 */ |
18 |
18 |
19 #ifndef LEMON_EDGE_SET_H |
19 #ifndef LEMON_EDGE_SET_H |
20 #define LEMON_EDGE_SET_H |
20 #define LEMON_EDGE_SET_H |
21 |
21 |
22 #include <lemon/bits/erasable_graph_extender.h> |
22 |
23 #include <lemon/bits/clearable_graph_extender.h> |
23 #include <lemon/bits/edge_set_extender.h> |
24 #include <lemon/bits/extendable_graph_extender.h> |
|
25 #include <lemon/bits/iterable_graph_extender.h> |
|
26 #include <lemon/bits/alteration_notifier.h> |
|
27 #include <lemon/bits/default_map.h> |
|
28 #include <lemon/bits/graph_extender.h> |
|
29 |
24 |
30 /// \ingroup graphs |
25 /// \ingroup graphs |
31 /// \file |
26 /// \file |
32 /// \brief EdgeSet classes. |
27 /// \brief EdgeSet classes. |
33 /// |
28 /// |
227 /// "StaticGraph" concept. |
222 /// "StaticGraph" concept. |
228 /// |
223 /// |
229 /// In the edge extension and removing it conforms to the |
224 /// In the edge extension and removing it conforms to the |
230 /// \ref concept::ErasableGraph "ErasableGraph" concept. |
225 /// \ref concept::ErasableGraph "ErasableGraph" concept. |
231 template <typename _Graph> |
226 template <typename _Graph> |
232 class ListEdgeSet : |
227 class ListEdgeSet : public EdgeSetExtender<ListEdgeSetBase<_Graph> > { |
233 public ErasableEdgeSetExtender< |
228 |
234 ClearableEdgeSetExtender< |
229 public: |
235 ExtendableEdgeSetExtender< |
230 |
236 MappableEdgeSetExtender< |
231 typedef EdgeSetExtender<ListEdgeSetBase<_Graph> > Parent; |
237 IterableGraphExtender< |
|
238 AlterableEdgeSetExtender< |
|
239 GraphExtender< |
|
240 ListEdgeSetBase<_Graph> > > > > > > > { |
|
241 |
|
242 public: |
|
243 |
|
244 typedef ErasableEdgeSetExtender< |
|
245 ClearableEdgeSetExtender< |
|
246 ExtendableEdgeSetExtender< |
|
247 MappableEdgeSetExtender< |
|
248 IterableGraphExtender< |
|
249 AlterableEdgeSetExtender< |
|
250 GraphExtender< |
|
251 ListEdgeSetBase<_Graph> > > > > > > > Parent; |
|
252 |
232 |
253 typedef typename Parent::Node Node; |
233 typedef typename Parent::Node Node; |
254 typedef typename Parent::Edge Edge; |
234 typedef typename Parent::Edge Edge; |
255 |
235 |
256 typedef _Graph Graph; |
236 typedef _Graph Graph; |
334 /// "StaticGraph" concept. |
314 /// "StaticGraph" concept. |
335 /// |
315 /// |
336 /// In the edge extension and removing it conforms to the |
316 /// In the edge extension and removing it conforms to the |
337 /// \ref concept::ErasableUGraph "ErasableUGraph" concept. |
317 /// \ref concept::ErasableUGraph "ErasableUGraph" concept. |
338 template <typename _Graph> |
318 template <typename _Graph> |
339 class ListUEdgeSet : |
319 class ListUEdgeSet |
340 public ErasableUEdgeSetExtender< |
320 : public UEdgeSetExtender<UGraphBaseExtender<ListEdgeSetBase<_Graph> > > { |
341 ClearableUEdgeSetExtender< |
321 |
342 ExtendableUEdgeSetExtender< |
322 public: |
343 MappableUEdgeSetExtender< |
323 |
344 IterableUGraphExtender< |
324 typedef UEdgeSetExtender<UGraphBaseExtender< |
345 AlterableUEdgeSetExtender< |
325 ListEdgeSetBase<_Graph> > > Parent; |
346 UGraphExtender< |
|
347 ListEdgeSetBase<_Graph> > > > > > > > { |
|
348 |
|
349 public: |
|
350 |
|
351 typedef ErasableUEdgeSetExtender< |
|
352 ClearableUEdgeSetExtender< |
|
353 ExtendableUEdgeSetExtender< |
|
354 MappableUEdgeSetExtender< |
|
355 IterableUGraphExtender< |
|
356 AlterableUEdgeSetExtender< |
|
357 UGraphExtender< |
|
358 ListEdgeSetBase<_Graph> > > > > > > > Parent; |
|
359 |
326 |
360 typedef typename Parent::Node Node; |
327 typedef typename Parent::Node Node; |
361 typedef typename Parent::Edge Edge; |
328 typedef typename Parent::Edge Edge; |
362 |
329 |
363 typedef _Graph Graph; |
330 typedef _Graph Graph; |
565 /// "StaticGraph" concept. |
532 /// "StaticGraph" concept. |
566 /// |
533 /// |
567 /// In the edge extension and removing it conforms to the |
534 /// In the edge extension and removing it conforms to the |
568 /// \ref concept::ExtendableGraph "ExtendableGraph" concept. |
535 /// \ref concept::ExtendableGraph "ExtendableGraph" concept. |
569 template <typename _Graph> |
536 template <typename _Graph> |
570 class SmartEdgeSet : |
537 class SmartEdgeSet : public EdgeSetExtender<SmartEdgeSetBase<_Graph> > { |
571 public ClearableEdgeSetExtender< |
538 |
572 ExtendableEdgeSetExtender< |
539 public: |
573 MappableEdgeSetExtender< |
540 |
574 IterableGraphExtender< |
541 typedef EdgeSetExtender<SmartEdgeSetBase<_Graph> > Parent; |
575 AlterableEdgeSetExtender< |
|
576 GraphExtender< |
|
577 SmartEdgeSetBase<_Graph> > > > > > > { |
|
578 |
|
579 public: |
|
580 |
|
581 typedef ClearableEdgeSetExtender< |
|
582 ExtendableEdgeSetExtender< |
|
583 MappableEdgeSetExtender< |
|
584 IterableGraphExtender< |
|
585 AlterableEdgeSetExtender< |
|
586 GraphExtender< |
|
587 SmartEdgeSetBase<_Graph> > > > > > > Parent; |
|
588 |
542 |
589 typedef typename Parent::Node Node; |
543 typedef typename Parent::Node Node; |
590 typedef typename Parent::Edge Edge; |
544 typedef typename Parent::Edge Edge; |
591 |
545 |
592 typedef _Graph Graph; |
546 typedef _Graph Graph; |
669 /// "StaticGraph" concept. |
623 /// "StaticGraph" concept. |
670 /// |
624 /// |
671 /// In the edge extension and removing it conforms to the |
625 /// In the edge extension and removing it conforms to the |
672 /// \ref concept::ExtendableUGraph "ExtendableUGraph" concept. |
626 /// \ref concept::ExtendableUGraph "ExtendableUGraph" concept. |
673 template <typename _Graph> |
627 template <typename _Graph> |
674 class SmartUEdgeSet : |
628 class SmartUEdgeSet |
675 public ClearableUEdgeSetExtender< |
629 : public UEdgeSetExtender<UGraphBaseExtender<SmartEdgeSetBase<_Graph> > > { |
676 ExtendableUEdgeSetExtender< |
630 |
677 MappableUEdgeSetExtender< |
631 public: |
678 IterableUGraphExtender< |
632 |
679 AlterableUEdgeSetExtender< |
633 typedef UEdgeSetExtender<UGraphBaseExtender< |
680 UGraphExtender< |
634 SmartEdgeSetBase<_Graph> > > Parent; |
681 SmartEdgeSetBase<_Graph> > > > > > > { |
|
682 |
|
683 public: |
|
684 |
|
685 typedef ClearableUEdgeSetExtender< |
|
686 ExtendableUEdgeSetExtender< |
|
687 MappableUEdgeSetExtender< |
|
688 IterableUGraphExtender< |
|
689 AlterableUEdgeSetExtender< |
|
690 UGraphExtender< |
|
691 SmartEdgeSetBase<_Graph> > > > > > > Parent; |
|
692 |
635 |
693 typedef typename Parent::Node Node; |
636 typedef typename Parent::Node Node; |
694 typedef typename Parent::Edge Edge; |
637 typedef typename Parent::Edge Edge; |
695 |
638 |
696 typedef _Graph Graph; |
639 typedef _Graph Graph; |