![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : 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_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /proc/self/root/usr/include/boost/graph/property_maps/ |
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_MATRIX_PROPERTY_MAP_HPP #define BOOST_GRAPH_MATRIX_PROPERTY_MAP_HPP #include <boost/graph/property_maps/container_property_map.hpp> namespace boost { // This property map is built specifically for property maps over // matrices. Like the basic property map over a container, this builds // the property abstraction over a matrix (usually a vector of vectors) // and returns property maps over the nested containers. template <typename Graph, typename Key, typename Matrix> struct matrix_property_map : boost::put_get_helper< container_property_map<Graph, Key, typename Matrix::value_type>, matrix_property_map<Graph, Key, Matrix> > { // abstract the indexing keys typedef typename detail::choose_indexer<Graph, Key>::indexer_type indexer_type; // aliases for the nested container and its corresponding map typedef typename Matrix::value_type container_type; typedef container_property_map<Graph, Key, container_type> map_type; typedef Key key_type; // This property map doesn't really provide access to nested containers, // but returns property maps over them. Since property maps are all // copy-constructible (or should be anyways), we never return references. // As such, this property is only readable, but not writable. Curiously, // the inner property map is actually an lvalue pmap. typedef map_type value_type; typedef map_type reference; typedef readable_property_map_tag category; matrix_property_map() : m_matrix(0), m_graph(0) { } matrix_property_map(Matrix& m, const Graph& g) : m_matrix(&m), m_graph(const_cast<Graph*>(&g)) { } matrix_property_map(const matrix_property_map& x) : m_matrix(x.m_matrix), m_graph(x.m_graph) { } inline reference operator [](key_type k) const { typedef typename indexer_type::value_type Index; Index x = indexer_type::index(k, *m_graph); return map_type((*m_matrix)[x], *m_graph); } private: mutable Matrix* m_matrix; mutable Graph* m_graph; }; } #endif