src/hugo/sym_map.h
changeset 921 818510fa3d99
parent 920 2d6c8075d9d0
child 922 e816fac59f6d
     1.1 --- a/src/hugo/sym_map.h	Wed Sep 29 14:12:26 2004 +0000
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,144 +0,0 @@
     1.4 -/* -*- C++ -*-
     1.5 - * src/hugo/sym_map.h - Part of HUGOlib, a generic C++ optimization library
     1.6 - *
     1.7 - * Copyright (C) 2004 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
     1.8 - * (Egervary Combinatorial Optimization Research Group, EGRES).
     1.9 - *
    1.10 - * Permission to use, modify and distribute this software is granted
    1.11 - * provided that this copyright notice appears in all copies. For
    1.12 - * precise terms see the accompanying LICENSE file.
    1.13 - *
    1.14 - * This software is provided "AS IS" with no warranty of any kind,
    1.15 - * express or implied, and with no claim as to its suitability for any
    1.16 - * purpose.
    1.17 - *
    1.18 - */
    1.19 -
    1.20 -#ifndef HUGO_SYM_MAP_H
    1.21 -#define HUGO_SYM_MAP_H
    1.22 -
    1.23 -///\ingroup graphmaps
    1.24 -///\file
    1.25 -///\brief Graph maps that construates and destruates
    1.26 -///their elements dynamically.
    1.27 -
    1.28 -namespace hugo {
    1.29 -
    1.30 -/// \addtogroup graphmaps
    1.31 -/// @{
    1.32 -
    1.33 -  /** The SymEdgeIt is wrapper class for the EdgeIt. It can be used to
    1.34 -   *  iterate on the symmetric maps when all of the edge - reverse edge pair
    1.35 -   *  has different parity.
    1.36 -   */
    1.37 -
    1.38 -
    1.39 -  template <typename Graph, typename Edge, typename EdgeIt>
    1.40 -  class SymEdgeIt : public EdgeIt {
    1.41 -  public:
    1.42 -
    1.43 -    /** Default constructor.
    1.44 -     */
    1.45 -    SymEdgeIt() 
    1.46 -      : EdgeIt() {}
    1.47 -
    1.48 -    /** Graph initialized constructor.
    1.49 -     */
    1.50 -    SymEdgeIt(const Graph& graph) 
    1.51 -      : EdgeIt(graph) {
    1.52 -      while ( (EdgeIt::n & 1) && EdgeIt::n != -1) {
    1.53 -	EdgeIt::operator++();
    1.54 -      }
    1.55 -    }
    1.56 -
    1.57 -    /** Creating invelid SymEdgeIt.
    1.58 -     */
    1.59 -    SymEdgeIt(Invalid invalid) 
    1.60 -      : EdgeIt(invalid) {}
    1.61 -
    1.62 -    /** SymEdgeIt from the given Edge.
    1.63 -     */
    1.64 -    SymEdgeIt(const Graph& graph, const Edge& edge)
    1.65 -      : EdgeIt(graph, edge) {
    1.66 -      while ( (EdgeIt::n & 1) && EdgeIt::n != -1) {
    1.67 -	EdgeIt::operator++();
    1.68 -      }
    1.69 -    }
    1.70 -
    1.71 -    /** Increase operator.
    1.72 -     */
    1.73 -    SymEdgeIt& operator++() {
    1.74 -      EdgeIt::operator++();
    1.75 -      while ( (EdgeIt::n & 1) && EdgeIt::n != -1) {
    1.76 -	EdgeIt::operator++();
    1.77 -      }
    1.78 -      return *this;
    1.79 -    }
    1.80 -  };
    1.81 -
    1.82 -  /** The SymMap template class is graph map structure what
    1.83 -   *  wraps an other map structure to use as symmetric map structure.
    1.84 -   *
    1.85 -   *  The template parameter is the MapRegistry that the maps
    1.86 -   *  will belong to and the ValueType.
    1.87 -   */
    1.88 -  template <template <typename, typename> class DynMap, 
    1.89 -	    typename MapRegistry, typename Value>
    1.90 -  class SymMap : public DynMap<MapRegistry, Value>{
    1.91 -
    1.92 -  private:
    1.93 -
    1.94 -    typedef DynMap<MapRegistry, Value> MapImpl;
    1.95 -
    1.96 -  public:
    1.97 -		
    1.98 -    /// The graph type of the maps. 
    1.99 -    typedef typename MapRegistry::Graph Graph;
   1.100 -
   1.101 -    typedef typename MapImpl::KeyType KeyType;
   1.102 -
   1.103 -  public:
   1.104 -
   1.105 -
   1.106 -    /** Graph and Registry initialized map constructor.
   1.107 -     */
   1.108 -    SymMap(const Graph& g, MapRegistry& r) : MapImpl(g, r) {}
   1.109 -
   1.110 -    /** Constructor to use default value to initialize the map. 
   1.111 -     */
   1.112 -    SymMap(const Graph& g, MapRegistry& r, const Value& v) 
   1.113 -      : MapImpl(g, r, v) {}
   1.114 -
   1.115 -    /** Constructor to copy a map of the same map type.
   1.116 -     */
   1.117 -    SymMap(const SymMap& copy) 
   1.118 -      : MapImpl(static_cast<const MapImpl&>(copy)) {}
   1.119 -
   1.120 -    /** Assign operator to copy a map of the same map type.
   1.121 -     */
   1.122 -    SymMap& operator=(const SymMap& copy) {
   1.123 -      MapImpl::operator=(static_cast<const MapImpl&>(copy));
   1.124 -      return *this;
   1.125 -    }
   1.126 -
   1.127 -    /** Add a new key to the map. It called by the map registry.
   1.128 -     */
   1.129 -    void add(const KeyType& key) {
   1.130 -      int id = MapImpl::getGraph()->id(key);
   1.131 -      if (id & 1) return;
   1.132 -      MapImpl::add(key);
   1.133 -    }
   1.134 -		
   1.135 -    /** Erase a key from the map. It called by the map registry.
   1.136 -     */
   1.137 -    void erase(const KeyType& key) {
   1.138 -      int id = MapImpl::getGraph()->id(key);
   1.139 -      if (id & 1) return;
   1.140 -      MapImpl::add(key);
   1.141 -    }
   1.142 -  };
   1.143 -
   1.144 -  /// @}
   1.145 -}
   1.146 -
   1.147 -#endif