lemon/adaptors.h
changeset 1176 cd72eae05bdf
parent 998 7fdaa05a69a1
child 1177 3c00344f49c9
equal deleted inserted replaced
23:5ae32a4fbf2b 25:56d728f511c6
  3444 
  3444 
  3445     /// \brief Node map combined from two original node maps
  3445     /// \brief Node map combined from two original node maps
  3446     ///
  3446     ///
  3447     /// This map adaptor class adapts two node maps of the original digraph
  3447     /// This map adaptor class adapts two node maps of the original digraph
  3448     /// to get a node map of the split digraph.
  3448     /// to get a node map of the split digraph.
  3449     /// Its value type is inherited from the first node map type (\c IN).
  3449     /// Its value type is inherited from the first node map type (\c In).
  3450     /// \tparam IN The type of the node map for the in-nodes.
  3450     /// \tparam In The type of the node map for the in-nodes.
  3451     /// \tparam OUT The type of the node map for the out-nodes.
  3451     /// \tparam Out The type of the node map for the out-nodes.
  3452     template <typename IN, typename OUT>
  3452     template <typename In, typename Out>
  3453     class CombinedNodeMap {
  3453     class CombinedNodeMap {
  3454     public:
  3454     public:
  3455 
  3455 
  3456       /// The key type of the map
  3456       /// The key type of the map
  3457       typedef Node Key;
  3457       typedef Node Key;
  3458       /// The value type of the map
  3458       /// The value type of the map
  3459       typedef typename IN::Value Value;
  3459       typedef typename In::Value Value;
  3460 
  3460 
  3461       typedef typename MapTraits<IN>::ReferenceMapTag ReferenceMapTag;
  3461       typedef typename MapTraits<In>::ReferenceMapTag ReferenceMapTag;
  3462       typedef typename MapTraits<IN>::ReturnValue ReturnValue;
  3462       typedef typename MapTraits<In>::ReturnValue ReturnValue;
  3463       typedef typename MapTraits<IN>::ConstReturnValue ConstReturnValue;
  3463       typedef typename MapTraits<In>::ConstReturnValue ConstReturnValue;
  3464       typedef typename MapTraits<IN>::ReturnValue Reference;
  3464       typedef typename MapTraits<In>::ReturnValue Reference;
  3465       typedef typename MapTraits<IN>::ConstReturnValue ConstReference;
  3465       typedef typename MapTraits<In>::ConstReturnValue ConstReference;
  3466 
  3466 
  3467       /// Constructor
  3467       /// Constructor
  3468       CombinedNodeMap(IN& in_map, OUT& out_map)
  3468       CombinedNodeMap(In& in_map, Out& out_map)
  3469         : _in_map(in_map), _out_map(out_map) {}
  3469         : _in_map(in_map), _out_map(out_map) {}
  3470 
  3470 
  3471       /// Returns the value associated with the given key.
  3471       /// Returns the value associated with the given key.
  3472       Value operator[](const Key& key) const {
  3472       Value operator[](const Key& key) const {
  3473         if (SplitNodesBase<const DGR>::inNode(key)) {
  3473         if (SplitNodesBase<const DGR>::inNode(key)) {
  3495         }
  3495         }
  3496       }
  3496       }
  3497 
  3497 
  3498     private:
  3498     private:
  3499 
  3499 
  3500       IN& _in_map;
  3500       In& _in_map;
  3501       OUT& _out_map;
  3501       Out& _out_map;
  3502 
  3502 
  3503     };
  3503     };
  3504 
  3504 
  3505 
  3505 
  3506     /// \brief Returns a combined node map
  3506     /// \brief Returns a combined node map
  3507     ///
  3507     ///
  3508     /// This function just returns a combined node map.
  3508     /// This function just returns a combined node map.
  3509     template <typename IN, typename OUT>
  3509     template <typename In, typename Out>
  3510     static CombinedNodeMap<IN, OUT>
  3510     static CombinedNodeMap<In, Out>
  3511     combinedNodeMap(IN& in_map, OUT& out_map) {
  3511     combinedNodeMap(In& in_map, Out& out_map) {
  3512       return CombinedNodeMap<IN, OUT>(in_map, out_map);
  3512       return CombinedNodeMap<In, Out>(in_map, out_map);
  3513     }
  3513     }
  3514 
  3514 
  3515     template <typename IN, typename OUT>
  3515     template <typename In, typename Out>
  3516     static CombinedNodeMap<const IN, OUT>
  3516     static CombinedNodeMap<const In, Out>
  3517     combinedNodeMap(const IN& in_map, OUT& out_map) {
  3517     combinedNodeMap(const In& in_map, Out& out_map) {
  3518       return CombinedNodeMap<const IN, OUT>(in_map, out_map);
  3518       return CombinedNodeMap<const In, Out>(in_map, out_map);
  3519     }
  3519     }
  3520 
  3520 
  3521     template <typename IN, typename OUT>
  3521     template <typename In, typename Out>
  3522     static CombinedNodeMap<IN, const OUT>
  3522     static CombinedNodeMap<In, const Out>
  3523     combinedNodeMap(IN& in_map, const OUT& out_map) {
  3523     combinedNodeMap(In& in_map, const Out& out_map) {
  3524       return CombinedNodeMap<IN, const OUT>(in_map, out_map);
  3524       return CombinedNodeMap<In, const Out>(in_map, out_map);
  3525     }
  3525     }
  3526 
  3526 
  3527     template <typename IN, typename OUT>
  3527     template <typename In, typename Out>
  3528     static CombinedNodeMap<const IN, const OUT>
  3528     static CombinedNodeMap<const In, const Out>
  3529     combinedNodeMap(const IN& in_map, const OUT& out_map) {
  3529     combinedNodeMap(const In& in_map, const Out& out_map) {
  3530       return CombinedNodeMap<const IN, const OUT>(in_map, out_map);
  3530       return CombinedNodeMap<const In, const Out>(in_map, out_map);
  3531     }
  3531     }
  3532 
  3532 
  3533     /// \brief Arc map combined from an arc map and a node map of the
  3533     /// \brief Arc map combined from an arc map and a node map of the
  3534     /// original digraph.
  3534     /// original digraph.
  3535     ///
  3535     ///