diff -r d8475431bbbb -r 8e85e6bbefdf src/lemon/bits/default_map.h --- a/src/lemon/bits/default_map.h Sat May 21 21:04:57 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,230 +0,0 @@ -/* -*- C++ -*- - * src/lemon/default_map.h - Part of LEMON, a generic C++ optimization library - * - * Copyright (C) 2005 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_DEFAULT_MAP_H -#define LEMON_DEFAULT_MAP_H - - -#include -#include - -///\ingroup graphmaps -///\file -///\brief Graph maps that construct and destruct -///their elements dynamically. - -namespace lemon { - -/// \addtogroup graphmaps -/// @{ - - /** The ArrayMap template class is graph map structure what - * automatically updates the map when a key is added to or erased from - * the map. This map uses the VectorMap if the Value is a primitive - * type and the ArrayMap for the other cases. - * - * The template parameter is the MapRegistry that the maps - * will belong to and the Value. - */ - - - - template - struct DefaultMapSelector { - typedef ArrayMap<_Graph, _Item, _Value> Map; - }; - - // bool - template - struct DefaultMapSelector<_Graph, _Item, bool> { - typedef VectorMap<_Graph, _Item, bool> Map; - }; - - // char - template - struct DefaultMapSelector<_Graph, _Item, char> { - typedef VectorMap<_Graph, _Item, char> Map; - }; - - template - struct DefaultMapSelector<_Graph, _Item, signed char> { - typedef VectorMap<_Graph, _Item, signed char> Map; - }; - - template - struct DefaultMapSelector<_Graph, _Item, unsigned char> { - typedef VectorMap<_Graph, _Item, unsigned char> Map; - }; - - - // int - template - struct DefaultMapSelector<_Graph, _Item, signed int> { - typedef VectorMap<_Graph, _Item, signed int> Map; - }; - - template - struct DefaultMapSelector<_Graph, _Item, unsigned int> { - typedef VectorMap<_Graph, _Item, unsigned int> Map; - }; - - - // short - template - struct DefaultMapSelector<_Graph, _Item, signed short> { - typedef VectorMap<_Graph, _Item, signed short> Map; - }; - - template - struct DefaultMapSelector<_Graph, _Item, unsigned short> { - typedef VectorMap<_Graph, _Item, unsigned short> Map; - }; - - - // long - template - struct DefaultMapSelector<_Graph, _Item, signed long> { - typedef VectorMap<_Graph, _Item, signed long> Map; - }; - - template - struct DefaultMapSelector<_Graph, _Item, unsigned long> { - typedef VectorMap<_Graph, _Item, unsigned long> Map; - }; - - // \todo handling long long type - - - // float - template - struct DefaultMapSelector<_Graph, _Item, float> { - typedef VectorMap<_Graph, _Item, float> Map; - }; - - - // double - template - struct DefaultMapSelector<_Graph, _Item, double> { - typedef VectorMap<_Graph, _Item, double> Map; - }; - - - // long double - template - struct DefaultMapSelector<_Graph, _Item, long double> { - typedef VectorMap<_Graph, _Item, long double> Map; - }; - - - // pointer - template - struct DefaultMapSelector<_Graph, _Item, _Ptr*> { - typedef VectorMap<_Graph, _Item, _Ptr*> Map; - }; - - - - template < - typename _Graph, - typename _Item, - typename _Value> - class DefaultMap - : public DefaultMapSelector<_Graph, _Item, _Value>::Map { - public: - typedef typename DefaultMapSelector<_Graph, _Item, _Value>::Map Parent; - typedef DefaultMap<_Graph, _Item, _Value> Map; - - typedef typename Parent::Graph Graph; - typedef typename Parent::Value Value; - - DefaultMap(const Graph& _g) : Parent(_g) {} - DefaultMap(const Graph& _g, const Value& _v) : Parent(_g, _v) {} - }; - - - - template - class DefaultMappableGraphExtender : public _Base { - public: - - typedef DefaultMappableGraphExtender<_Base> Graph; - typedef _Base Parent; - - typedef typename Parent::Node Node; - typedef typename Parent::NodeIt NodeIt; - - typedef typename Parent::Edge Edge; - typedef typename Parent::EdgeIt EdgeIt; - - - template - class NodeMap - : public IterableMapExtender > { - public: - typedef DefaultMappableGraphExtender Graph; - typedef IterableMapExtender > Parent; - - NodeMap(const Graph& _g) - : Parent(_g) {} - NodeMap(const Graph& _g, const _Value& _v) - : Parent(_g, _v) {} - }; - - template - class EdgeMap - : public IterableMapExtender > { - public: - typedef DefaultMappableGraphExtender Graph; - typedef IterableMapExtender > Parent; - - EdgeMap(const Graph& _g) - : Parent(_g) {} - EdgeMap(const Graph& _g, const _Value& _v) - : Parent(_g, _v) {} - }; - - }; - - template - class MappableUndirGraphExtender : - public DefaultMappableGraphExtender<_Base> { - public: - - typedef MappableUndirGraphExtender Graph; - typedef DefaultMappableGraphExtender<_Base> Parent; - - typedef typename Parent::UndirEdge UndirEdge; - - template - class UndirEdgeMap - : public IterableMapExtender > { - public: - typedef MappableUndirGraphExtender Graph; - typedef IterableMapExtender< - DefaultMap > Parent; - - UndirEdgeMap(const Graph& _g) - : Parent(_g) {} - UndirEdgeMap(const Graph& _g, const _Value& _v) - : Parent(_g, _v) {} - }; - - - }; - -} - -#endif