Server IP : 172.67.216.182 / Your IP : 108.162.226.125 Web Server : Apache System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /www/server/mysql/src/boost/boost_1_59_0/boost/graph/ |
Upload File : |
// (C) Copyright 2007-2009 Andrew Sutton // // Use, modification and distribution are subject to the // Boost Software License, Version 1.0 (See accompanying file // LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GRAPH_EXTERIOR_PROPERTY_HPP #define BOOST_GRAPH_EXTERIOR_PROPERTY_HPP #include <vector> #include <boost/graph/property_maps/container_property_map.hpp> #include <boost/graph/property_maps/matrix_property_map.hpp> namespace boost { namespace detail { // The vector matrix provides a little abstraction over vector // types that makes matrices easier to work with. Note that it's // non-copyable, meaning you should be passing it by value. template <typename Value> struct vector_matrix { typedef std::vector<Value> container_type; typedef std::vector<container_type> matrix_type; typedef container_type value_type; typedef container_type& reference; typedef const container_type const_reference; typedef container_type* pointer; typedef typename matrix_type::size_type size_type; // Instantiate the matrix over n elements (creates an nxn matrix). // The graph has to be passed in order to ensure the index maps // are constructed correctly when returning indexible elements. inline vector_matrix(size_type n) : m_matrix(n, container_type(n)) { } inline reference operator [](size_type n) { return m_matrix[n]; } inline const_reference operator [](size_type n) const { return m_matrix[n]; } matrix_type m_matrix; }; } /* namespace detail */ /** * The exterior_property metafunction defines an appropriate set of types for * creating an exterior property. An exterior property is comprised of a both * a container and a property map that acts as its abstraction. An extension * of this metafunction will select an appropriate "matrix" property that * records values for pairs of vertices. * * @todo This does not currently support the ability to define exterior * properties for graph types that do not model the IndexGraph concepts. A * solution should not be especially difficult, but will require an extension * of type traits to affect the type selection. */ template <typename Graph, typename Key, typename Value> struct exterior_property { typedef Key key_type; typedef Value value_type; typedef std::vector<Value> container_type; typedef container_property_map<Graph, Key, container_type> map_type; typedef detail::vector_matrix<Value> matrix_type; typedef matrix_property_map<Graph, Key, matrix_type> matrix_map_type; private: exterior_property() { } exterior_property(const exterior_property&) { } }; /** * Define a the container and property map types requried to create an exterior * vertex property for the given value type. The Graph parameter is required to * model the VertexIndexGraph concept. */ template <typename Graph, typename Value> struct exterior_vertex_property { typedef exterior_property< Graph, typename graph_traits<Graph>::vertex_descriptor, Value > property_type; typedef typename property_type::key_type key_type; typedef typename property_type::value_type value_type; typedef typename property_type::container_type container_type; typedef typename property_type::map_type map_type; typedef typename property_type::matrix_type matrix_type; typedef typename property_type::matrix_map_type matrix_map_type; }; /** * Define a the container and property map types requried to create an exterior * edge property for the given value type. The Graph parameter is required to * model the EdgeIndexGraph concept. */ template <typename Graph, typename Value> struct exterior_edge_property { typedef exterior_property< Graph, typename graph_traits<Graph>::edge_descriptor, Value > property_type; typedef typename property_type::key_type key_type; typedef typename property_type::value_type value_type; typedef typename property_type::container_type container_type; typedef typename property_type::map_type map_type; typedef typename property_type::matrix_type matrix_type; typedef typename property_type::matrix_map_type matrix_map_type; }; } /* namespace boost */ #endif