Boost-Graph

 view release on metacpan or  search on metacpan

include/boost/graph/named_function_params.hpp  view on Meta::CPAN

//=======================================================================
// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//=======================================================================

#ifndef BOOST_GRAPH_NAMED_FUNCTION_PARAMS_HPP
#define BOOST_GRAPH_NAMED_FUNCTION_PARAMS_HPP

#include <boost/graph/properties.hpp>

namespace boost {

  struct distance_compare_t { };
  struct distance_combine_t { };
  struct distance_inf_t { };
  struct distance_zero_t { };
  struct buffer_param_t { };
  struct edge_copy_t { };
  struct vertex_copy_t { };
  struct vertex_isomorphism_t { };
  struct vertex_invariant_t { };
  struct vertex_invariant1_t { };
  struct vertex_invariant2_t { };
  struct edge_compare_t { };
  struct vertex_max_invariant_t { };
  struct orig_to_copy_t { };
  struct root_vertex_t { };
  struct attractive_force_t { };
  struct repulsive_force_t { };
  struct force_pairs_t { };
  struct cooling_t { };
  struct vertex_displacement_t { };
  struct iterations_t { };
  struct diameter_range_t { };
  struct learning_constant_range_t { };

  namespace detail {
    template <class T>
    struct wrap_ref {
      wrap_ref(T& r) : ref(r) {}
      T& ref;
    };
  }

  template <typename T, typename Tag, typename Base = no_property>
  struct bgl_named_params : public Base
  {
    typedef bgl_named_params self;
    typedef Base next_type;
    typedef Tag tag_type;
    typedef T value_type;
    bgl_named_params(T v) : m_value(v) { }
    bgl_named_params(T v, const Base& b) : Base(b), m_value(v) { }
    T m_value;

    template <typename WeightMap>
    bgl_named_params<WeightMap, edge_weight_t, self>
    weight_map(const WeightMap& pmap) const {
      typedef bgl_named_params<WeightMap, edge_weight_t, self> Params;
      return Params(pmap, *this);
    }

    template <typename WeightMap>
    bgl_named_params<WeightMap, edge_weight2_t, self>
    weight_map2(const WeightMap& pmap) const {
      typedef bgl_named_params<WeightMap, edge_weight2_t, self> Params;
      return Params(pmap, *this);
    }

    template <typename DistanceMap>
    bgl_named_params<DistanceMap, vertex_distance_t, self>
    distance_map(const DistanceMap& pmap) const {
      typedef bgl_named_params<DistanceMap, vertex_distance_t, self> Params;
      return Params(pmap, *this);
    }

    template <typename PredecessorMap>
    bgl_named_params<PredecessorMap, vertex_predecessor_t, self>
    predecessor_map(const PredecessorMap& pmap) const {
      typedef bgl_named_params<PredecessorMap, vertex_predecessor_t, self> 
        Params;
      return Params(pmap, *this);
    }

    template <typename RankMap>
    bgl_named_params<RankMap, vertex_rank_t, self>
    rank_map(const RankMap& pmap) const {
      typedef bgl_named_params<RankMap, vertex_rank_t, self> 
        Params;
      return Params(pmap, *this);
    }

    template <typename RootMap>

include/boost/graph/named_function_params.hpp  view on Meta::CPAN

      return Params(c, *this);
    }

    template <typename Orig2CopyMap>
    bgl_named_params<Orig2CopyMap, orig_to_copy_t, self>
    orig_to_copy(const Orig2CopyMap& c) const {
      typedef bgl_named_params<Orig2CopyMap, orig_to_copy_t, self> Params;
      return Params(c, *this);
    }

    template <typename IsoMap>
    bgl_named_params<IsoMap, vertex_isomorphism_t, self>
    isomorphism_map(const IsoMap& c) const {
      typedef bgl_named_params<IsoMap, vertex_isomorphism_t, self> Params;
      return Params(c, *this);
    }

    template <typename VertexInvar>
    bgl_named_params<VertexInvar, vertex_invariant_t, self>
    vertex_invariant(const VertexInvar& c) const {
      typedef bgl_named_params<VertexInvar, vertex_invariant_t, self> Params;
      return Params(c, *this);
    }

    template <typename VertexDisplacement>
    bgl_named_params<VertexDisplacement, vertex_displacement_t, self>
    displacement_map(const VertexDisplacement& c) const {
      typedef bgl_named_params<VertexDisplacement, vertex_displacement_t, self> Params;
      return Params(c, *this);
    }

    template <typename AttractiveForce>
    bgl_named_params<AttractiveForce, attractive_force_t, self>
    attractive_force(const AttractiveForce& c) {
      typedef bgl_named_params<AttractiveForce, attractive_force_t, self> Params;
      return Params(c, *this);
    }
    
    template <typename RepulsiveForce>
    bgl_named_params<RepulsiveForce, repulsive_force_t, self>
    repulsive_force(const RepulsiveForce& c) {
      typedef bgl_named_params<RepulsiveForce, repulsive_force_t, self> Params;
      return Params(c, *this);
    }
    
    template <typename ForcePairs>
    bgl_named_params<ForcePairs, force_pairs_t, self>
    force_pairs(const ForcePairs& c) {
      typedef bgl_named_params<ForcePairs, force_pairs_t, self> Params;
      return Params(c, *this);
    }

    template <typename Cooling>
    bgl_named_params<Cooling, cooling_t, self>
    cooling(const Cooling& c) {
      typedef bgl_named_params<Cooling, cooling_t, self> Params;
      return Params(c, *this);
    }

    template <typename TP>
    bgl_named_params<TP, iterations_t, self>
    iterations(const TP& c) {
      typedef bgl_named_params<TP, iterations_t, self> Params;
      return Params(c, *this);
    }    

    template<typename TP>
    bgl_named_params<std::pair<TP, TP>, diameter_range_t, self>
    diameter_range(const std::pair<TP, TP>& c) {
      typedef bgl_named_params<std::pair<TP, TP>, diameter_range_t, self> Params;
      return Params(c, *this);
    }

    template<typename TP>
    bgl_named_params<std::pair<TP, TP>, learning_constant_range_t, self>
    learning_constant_range(const std::pair<TP, TP>& c) {
      typedef bgl_named_params<std::pair<TP, TP>, learning_constant_range_t, self>
        Params;
      return Params(c, *this);
    }
  };

  template <typename WeightMap>
  bgl_named_params<WeightMap, edge_weight_t>
  weight_map(WeightMap pmap) {
    typedef bgl_named_params<WeightMap, edge_weight_t> Params;
    return Params(pmap);
  }

  template <typename WeightMap>
  bgl_named_params<WeightMap, edge_weight2_t>
  weight_map2(WeightMap pmap) {
    typedef bgl_named_params<WeightMap, edge_weight2_t> Params;
    return Params(pmap);
  }

  template <typename DistanceMap>
  bgl_named_params<DistanceMap, vertex_distance_t>
  distance_map(DistanceMap pmap) {
    typedef bgl_named_params<DistanceMap, vertex_distance_t> Params;
    return Params(pmap);
  }

  template <typename PredecessorMap>
  bgl_named_params<PredecessorMap, vertex_predecessor_t>
  predecessor_map(PredecessorMap pmap) {
    typedef bgl_named_params<PredecessorMap, vertex_predecessor_t> Params;
    return Params(pmap);
  }

  template <typename RankMap>
  bgl_named_params<RankMap, vertex_rank_t>
  rank_map(RankMap pmap) {
    typedef bgl_named_params<RankMap, vertex_rank_t> Params;
    return Params(pmap);
  }

  template <typename RootMap>
  bgl_named_params<RootMap, vertex_root_t>
  root_map(RootMap pmap) {
    typedef bgl_named_params<RootMap, vertex_root_t> Params;
    return Params(pmap);
  }

include/boost/graph/named_function_params.hpp  view on Meta::CPAN

    return Params(c);
  }

  template <typename Orig2CopyMap>
  bgl_named_params<Orig2CopyMap, orig_to_copy_t>
  orig_to_copy(const Orig2CopyMap& c) {
    typedef bgl_named_params<Orig2CopyMap, orig_to_copy_t> Params;
    return Params(c);
  }

  template <typename IsoMap>
  bgl_named_params<IsoMap, vertex_isomorphism_t>
  isomorphism_map(const IsoMap& c) {
    typedef bgl_named_params<IsoMap, vertex_isomorphism_t> Params;
    return Params(c);
  }

  template <typename VertexInvar>
  bgl_named_params<VertexInvar, vertex_invariant_t>
  vertex_invariant(const VertexInvar& c) {
    typedef bgl_named_params<VertexInvar, vertex_invariant_t> Params;
    return Params(c);
  }

  template <typename VertexDisplacement>
  bgl_named_params<VertexDisplacement, vertex_displacement_t>
  displacement_map(const VertexDisplacement& c) {
    typedef bgl_named_params<VertexDisplacement, vertex_displacement_t> Params;
    return Params(c);
  }

  template <typename AttractiveForce>
  bgl_named_params<AttractiveForce, attractive_force_t>
  attractive_force(const AttractiveForce& c) {
    typedef bgl_named_params<AttractiveForce, attractive_force_t> Params;
    return Params(c);
  }

  template <typename RepulsiveForce>
  bgl_named_params<RepulsiveForce, repulsive_force_t>
  repulsive_force(const RepulsiveForce& c) {
    typedef bgl_named_params<RepulsiveForce, repulsive_force_t> Params;
    return Params(c);
  }

  template <typename ForcePairs>
  bgl_named_params<ForcePairs, force_pairs_t>
  force_pairs(const ForcePairs& c) {
    typedef bgl_named_params<ForcePairs, force_pairs_t> Params;
    return Params(c);
  }

  template <typename Cooling>
  bgl_named_params<Cooling, cooling_t>
  cooling(const Cooling& c) {
    typedef bgl_named_params<Cooling, cooling_t> Params;
    return Params(c);
  }

  template <typename T>
  bgl_named_params<T, iterations_t>
  iterations(const T& c) {
    typedef bgl_named_params<T, iterations_t> Params;
    return Params(c);
  }    
  
  template<typename T>
  bgl_named_params<std::pair<T, T>, diameter_range_t>
  diameter_range(const std::pair<T, T>& c) {
    typedef bgl_named_params<std::pair<T, T>, diameter_range_t> Params;
    return Params(c);
  }
  
  template<typename T>
  bgl_named_params<std::pair<T, T>, learning_constant_range_t>
  learning_constant_range(const std::pair<T, T>& c) {
    typedef bgl_named_params<std::pair<T, T>, learning_constant_range_t>
      Params;
    return Params(c);
  }

  //===========================================================================
  // Functions for extracting parameters from bgl_named_params

  template <class Tag1, class Tag2, class T1, class Base>
  inline
  typename property_value< bgl_named_params<T1,Tag1,Base>, Tag2>::type
  get_param(const bgl_named_params<T1,Tag1,Base>& p, Tag2 tag2)
  {
    enum { match = detail::same_property<Tag1,Tag2>::value };
    typedef typename
      property_value< bgl_named_params<T1,Tag1,Base>, Tag2>::type T2;
    T2* t2 = 0;
    typedef detail::property_value_dispatch<match> Dispatcher;
    return Dispatcher::const_get_value(p, t2, tag2);
  }


  namespace detail {
    // MSVC++ workaround
    template <class Param>
    struct choose_param_helper {
      template <class Default> struct result { typedef Param type; };
      template <typename Default>
      static const Param& apply(const Param& p, const Default&) { return p; }
    };
    template <>
    struct choose_param_helper<error_property_not_found> {
      template <class Default> struct result { typedef Default type; };
      template <typename Default>
      static const Default& apply(const error_property_not_found&, const Default& d)
        { return d; }
    };
  } // namespace detail

  template <class P, class Default> 
  const typename detail::choose_param_helper<P>::template result<Default>::type&
  choose_param(const P& param, const Default& d) { 
    return detail::choose_param_helper<P>::apply(param, d);
  }

  template <typename T>
  inline bool is_default_param(const T&) { return false; }



( run in 1.077 second using v1.01-cache-2.11-cpan-71847e10f99 )