⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 indexed_properties.hpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 HPP
字号:
// Copyright 2005 The Trustees of Indiana University.// 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)//  Authors: Jeremiah Willcock//           Douglas Gregor//           Andrew Lumsdaine// Indexed properties -- used for CSR and CSR-like graphs#ifndef BOOST_GRAPH_INDEXED_PROPERTIES_HPP#define BOOST_GRAPH_INDEXED_PROPERTIES_HPP#include <vector>#include <utility>#include <algorithm>#include <climits>#include <iterator>#include <boost/graph/graph_traits.hpp>#include <boost/graph/properties.hpp>#include <boost/iterator/counting_iterator.hpp>#include <boost/integer.hpp>#include <boost/iterator/iterator_facade.hpp>#include <boost/mpl/if.hpp>namespace boost {namespace detail {template<typename Derived, typename Property, typename Descriptor>class indexed_vertex_properties{public:  typedef no_property vertex_property_type;  typedef Property vertex_bundled;  // Directly access a vertex or edge bundle  Property& operator[](Descriptor v)  { return m_vertex_properties[get(vertex_index, derived(), v)]; }  const Property& operator[](Descriptor v) const  { return m_vertex_properties[get(vertex_index, derived(), v)]; }protected:  // Default-construct with no property values  indexed_vertex_properties() {}  // Initialize with n default-constructed property values  indexed_vertex_properties(std::size_t n) : m_vertex_properties(n) { }public:  // Resize the properties vector  void resize(std::size_t n)  {    m_vertex_properties.resize(n);  }  // Reserve space in the vector of properties  void reserve(std::size_t n)  {    m_vertex_properties.reserve(n);  }  // Add a new property value to the back  void push_back(const Property& prop)  {    m_vertex_properties.push_back(prop);  }  // Access to the derived object  Derived& derived() { return *static_cast<Derived*>(this); }  const Derived& derived() const  { return *static_cast<const Derived*>(this); }public: // should be private, but friend templates not portable  std::vector<Property> m_vertex_properties;};template<typename Derived, typename Descriptor>class indexed_vertex_properties<Derived, void, Descriptor>{  struct secret {}; public:  typedef no_property vertex_property_type;  typedef void vertex_bundled;  secret operator[](secret) { return secret(); } protected:  // All operations do nothing.  indexed_vertex_properties() { }  indexed_vertex_properties(std::size_t) { }public:  void resize(std::size_t) { }  void reserve(std::size_t) { }};template<typename Derived, typename Property, typename Descriptor>class indexed_edge_properties{public:  typedef no_property edge_property_type;  typedef Property edge_bundled;  typedef Property edge_push_back_type;  // Directly access a edge or edge bundle  Property& operator[](Descriptor v)  { return m_edge_properties[get(edge_index, derived(), v)]; }  const Property& operator[](Descriptor v) const  { return m_edge_properties[get(edge_index, derived(), v)]; }protected:  // Default-construct with no property values  indexed_edge_properties() {}  // Initialize with n default-constructed property values  indexed_edge_properties(std::size_t n) : m_edge_properties(n) { }  // Resize the properties vector  void resize(std::size_t n)  {    m_edge_properties.resize(n);  }  // Reserve space in the vector of properties  void reserve(std::size_t n)  {    m_edge_properties.reserve(n);  } public:  // Add a new property value to the back  void push_back(const Property& prop)  {    m_edge_properties.push_back(prop);  } private:  // Access to the derived object  Derived& derived() { return *static_cast<Derived*>(this); }  const Derived& derived() const  { return *static_cast<const Derived*>(this); }public: // should be private, but friend templates not portable  std::vector<Property> m_edge_properties;};template<typename Derived, typename Descriptor>class indexed_edge_properties<Derived, void, Descriptor>{  struct secret {}; public:  typedef no_property edge_property_type;  typedef void edge_bundled;  typedef void* edge_push_back_type;  secret operator[](secret) { return secret(); } protected:  // All operations do nothing.  indexed_edge_properties() { }  indexed_edge_properties(std::size_t) { }  void resize(std::size_t) { }  void reserve(std::size_t) { } public:  void push_back(const edge_push_back_type&) { }};}}#endif // BOOST_GRAPH_INDEXED_PROPERTIES_HPP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -