klao@962: /* -*- C++ -*- klao@962: * klao@962: * src/lemon/concept/undir_graph_component.h - Part of LEMON, a generic klao@962: * C++ optimization library klao@962: * klao@962: * Copyright (C) 2004 Egervary Jeno Kombinatorikus Optimalizalasi klao@962: * Kutatocsoport (Egervary Combinatorial Optimization Research Group, klao@962: * EGRES). klao@962: * klao@962: * Permission to use, modify and distribute this software is granted klao@962: * provided that this copyright notice appears in all copies. For klao@962: * precise terms see the accompanying LICENSE file. klao@962: * klao@962: * This software is provided "AS IS" with no warranty of any kind, klao@962: * express or implied, and with no claim as to its suitability for any klao@962: * purpose. klao@962: * klao@962: */ klao@962: klao@962: ///\ingroup concept klao@962: ///\file klao@962: ///\brief Undirected graphs and components of. klao@962: klao@962: klao@962: #ifndef LEMON_CONCEPT_UNDIR_GRAPH_H klao@962: #define LEMON_CONCEPT_UNDIR_GRAPH_H klao@962: klao@962: #include klao@962: klao@962: namespace lemon { klao@962: namespace concept { klao@962: klao@962: /// \todo to be done klao@962: class BaseIterableUndirGraph; klao@962: klao@962: template klao@962: struct BaseIterableUndirGraphConcept { klao@962: typedef typename Graph::UndirEdge UndirEdge; klao@962: typedef typename Graph::Edge Edge; klao@962: typedef typename Graph::Node Node; deba@989: klao@962: void constraints() { deba@989: checkConcept(); deba@989: checkConcept, UndirEdge >(); klao@962: klao@962: /// \bug this should be base_and_derived: klao@962: UndirEdge ue = e; klao@962: ue = e; klao@962: klao@962: Node n; alpar@986: n = graph.target(ue); alpar@986: n = graph.source(ue); klao@962: klao@962: graph.first(ue); klao@962: graph.next(ue); klao@962: } klao@962: const Graph &graph; klao@962: Edge e; klao@962: }; klao@962: klao@962: template klao@962: struct IterableUndirGraphConcept { klao@962: void constraints() { deba@989: /// \todo we don't need the iterable component should base iterable deba@989: // checkConcept< BaseIterableUndirGraph, Graph > (); deba@989: checkConcept< IterableGraphComponent, Graph > (); klao@962: klao@962: typedef typename Graph::UndirEdge UndirEdge; klao@962: typedef typename Graph::UndirEdgeIt UndirEdgeIt; klao@962: deba@989: checkConcept< GraphIterator, UndirEdgeIt >(); klao@962: } klao@962: }; klao@962: klao@962: } klao@962: klao@962: } klao@962: klao@962: #endif