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 /// |