diff -r 6e1b62d42d94 -r 2115143eceea lemon/traits.h --- a/lemon/traits.h Wed Mar 01 12:46:52 2006 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,300 +0,0 @@ -/* -*- C++ -*- - * - * This file is a part of LEMON, a generic C++ optimization library - * - * Copyright (C) 2003-2006 - * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport - * (Egervary Research Group on Combinatorial Optimization, EGRES). - * - * Permission to use, modify and distribute this software is granted - * provided that this copyright notice appears in all copies. For - * precise terms see the accompanying LICENSE file. - * - * This software is provided "AS IS" with no warranty of any kind, - * express or implied, and with no claim as to its suitability for any - * purpose. - * - */ - -#ifndef LEMON_TRAITS_H -#define LEMON_TRAITS_H - -#include - -///\file -///\brief Traits for graphs and maps -/// - -namespace lemon { - template - class ItemSetTraits {}; - - - template - struct NodeNotifierIndicator { - typedef InvalidType Type; - }; - template - struct NodeNotifierIndicator< - Graph, - typename enable_if::type - > { - typedef typename Graph::NodeNotifier Type; - }; - - template - class ItemSetTraits<_Graph, typename _Graph::Node> { - public: - - typedef _Graph Graph; - - typedef typename Graph::Node Item; - typedef typename Graph::NodeIt ItemIt; - - typedef typename NodeNotifierIndicator::Type ItemNotifier; - - template - class Map : public Graph::template NodeMap<_Value> { - public: - typedef typename Graph::template NodeMap<_Value> Parent; - typedef typename Parent::Value Value; - - Map(const Graph& _graph) : Parent(_graph) {} - Map(const Graph& _graph, const Value& _value) - : Parent(_graph, _value) {} - - }; - - }; - - template - struct EdgeNotifierIndicator { - typedef InvalidType Type; - }; - template - struct EdgeNotifierIndicator< - Graph, - typename enable_if::type - > { - typedef typename Graph::EdgeNotifier Type; - }; - - template - class ItemSetTraits<_Graph, typename _Graph::Edge> { - public: - - typedef _Graph Graph; - - typedef typename Graph::Edge Item; - typedef typename Graph::EdgeIt ItemIt; - - typedef typename EdgeNotifierIndicator::Type ItemNotifier; - - template - class Map : public Graph::template EdgeMap<_Value> { - public: - typedef typename Graph::template EdgeMap<_Value> Parent; - typedef typename Parent::Value Value; - - Map(const Graph& _graph) : Parent(_graph) {} - Map(const Graph& _graph, const Value& _value) - : Parent(_graph, _value) {} - }; - - }; - - template - struct UEdgeNotifierIndicator { - typedef InvalidType Type; - }; - template - struct UEdgeNotifierIndicator< - Graph, - typename enable_if::type - > { - typedef typename Graph::UEdgeNotifier Type; - }; - - template - class ItemSetTraits<_Graph, typename _Graph::UEdge> { - public: - - typedef _Graph Graph; - - typedef typename Graph::UEdge Item; - typedef typename Graph::UEdgeIt ItemIt; - - typedef typename UEdgeNotifierIndicator::Type ItemNotifier; - - template - class Map : public Graph::template UEdgeMap<_Value> { - public: - typedef typename Graph::template UEdgeMap<_Value> Parent; - typedef typename Parent::Value Value; - - Map(const Graph& _graph) : Parent(_graph) {} - Map(const Graph& _graph, const Value& _value) - : Parent(_graph, _value) {} - }; - - }; - - template - struct ANodeNotifierIndicator { - typedef InvalidType Type; - }; - template - struct ANodeNotifierIndicator< - Graph, - typename enable_if::type - > { - typedef typename Graph::ANodeNotifier Type; - }; - - template - class ItemSetTraits<_Graph, typename _Graph::ANode> { - public: - - typedef _Graph Graph; - - typedef typename Graph::ANode Item; - typedef typename Graph::ANodeIt ItemIt; - - typedef typename ANodeNotifierIndicator::Type ItemNotifier; - - template - class Map : public Graph::template ANodeMap<_Value> { - public: - typedef typename Graph::template ANodeMap<_Value> Parent; - typedef typename Parent::Value Value; - - Map(const Graph& _graph) : Parent(_graph) {} - Map(const Graph& _graph, const Value& _value) - : Parent(_graph, _value) {} - }; - - }; - - template - struct BNodeNotifierIndicator { - typedef InvalidType Type; - }; - template - struct BNodeNotifierIndicator< - Graph, - typename enable_if::type - > { - typedef typename Graph::BNodeNotifier Type; - }; - - template - class ItemSetTraits<_Graph, typename _Graph::BNode> { - public: - - typedef _Graph Graph; - - typedef typename Graph::BNode Item; - typedef typename Graph::BNodeIt ItemIt; - - typedef typename BNodeNotifierIndicator::Type ItemNotifier; - - template - class Map : public Graph::template BNodeMap<_Value> { - public: - typedef typename Graph::template BNodeMap<_Value> Parent; - typedef typename Parent::Value Value; - - Map(const Graph& _graph) : Parent(_graph) {} - Map(const Graph& _graph, const Value& _value) - : Parent(_graph, _value) {} - }; - - }; - - - template - struct MapTraits { - typedef False ReferenceMapTag; - - typedef typename Map::Key Key; - typedef typename Map::Value Value; - - typedef const Value ConstReturnValue; - typedef const Value ReturnValue; - }; - - template - struct MapTraits< - Map, typename enable_if::type > - { - typedef True ReferenceMapTag; - - typedef typename Map::Key Key; - typedef typename Map::Value Value; - - typedef typename Map::ConstReference ConstReturnValue; - typedef typename Map::Reference ReturnValue; - - typedef typename Map::ConstReference ConstReference; - typedef typename Map::Reference Reference; - }; - - // Indicators for the tags - - template - struct NodeNumTagIndicator { - static const bool value = false; - }; - - template - struct NodeNumTagIndicator< - Graph, - typename enable_if::type - > { - static const bool value = true; - }; - - template - struct EdgeNumTagIndicator { - static const bool value = false; - }; - - template - struct EdgeNumTagIndicator< - Graph, - typename enable_if::type - > { - static const bool value = true; - }; - - template - struct FindEdgeTagIndicator { - static const bool value = false; - }; - - template - struct FindEdgeTagIndicator< - Graph, - typename enable_if::type - > { - static const bool value = true; - }; - - template - struct UndirectedTagIndicator { - static const bool value = false; - }; - - template - struct UndirectedTagIndicator< - Graph, - typename enable_if::type - > { - static const bool value = true; - }; - - - -} - -#endif // LEMON_MAPS_H