This file is indexed.

/usr/include/boost/graph/detail/indexed_properties.hpp is in libboost1.55-dev 1.55.0+dfsg-3.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
// 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/property_map/property_map.hpp>
#include <boost/mpl/if.hpp>

namespace boost {
namespace detail {

template<typename Derived, typename Property, typename Descriptor, typename IndexMap>
class indexed_vertex_properties
{
public:
  typedef no_property vertex_property_type;
  typedef Property vertex_bundled;
  typedef iterator_property_map<
            typename std::vector<Property>::iterator,
            IndexMap> vertex_map_type;
  typedef iterator_property_map<
            typename std::vector<Property>::const_iterator,
            IndexMap> const_vertex_map_type;

  // 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)]; }

  vertex_map_type get_vertex_bundle(const IndexMap& index_map = IndexMap()) {
    return vertex_map_type(m_vertex_properties.begin(), index_map);
  }

  const_vertex_map_type get_vertex_bundle(const IndexMap& index_map = IndexMap()) const {
    return const_vertex_map_type(m_vertex_properties.begin(), index_map);
  }

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:
  // Clear the properties vector
  void clear()
  {
    m_vertex_properties.clear();
  }

  // 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);
  }

  // Write an element by raw index
  void write_by_index(std::size_t idx, const Property& prop)
  {
    m_vertex_properties[idx] = 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, typename IndexMap>
class indexed_vertex_properties<Derived, void, Descriptor, IndexMap>
{
  struct secret {};

 public:
  typedef no_property vertex_property_type;
  typedef void vertex_bundled;
  typedef secret vertex_map_type;
  typedef secret const_vertex_map_type;

  secret operator[](secret) { return secret(); }

  vertex_map_type get_vertex_bundle() const {
    return vertex_map_type();
  }

 protected:
  // All operations do nothing.
  indexed_vertex_properties() { }
  indexed_vertex_properties(std::size_t) { }

public:
  void clear() { }
  void resize(std::size_t) { }
  void reserve(std::size_t) { }
};

template<typename Derived, typename Property, typename Descriptor, typename IndexMap>
class indexed_edge_properties
{
public:
  typedef no_property edge_property_type;
  typedef Property edge_bundled;
  typedef Property edge_push_back_type;
  typedef iterator_property_map<
            typename std::vector<Property>::iterator,
            IndexMap> edge_map_type;
  typedef iterator_property_map<
            typename std::vector<Property>::const_iterator,
            IndexMap> const_edge_map_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)]; }

  edge_map_type get_edge_bundle(const IndexMap& index_map = IndexMap()) {
    return edge_map_type(m_edge_properties.begin(), index_map);
  }

  const_edge_map_type get_edge_bundle(const IndexMap& index_map = IndexMap()) const {
    return const_edge_map_type(m_edge_properties.begin(), index_map);
  }

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) { }

  // Get the size of the properties vector
  std::size_t size() const
  {
    return m_edge_properties.size();
  }

  // Clear the properties vector
  void clear()
  {
    m_edge_properties.clear();
  }

  // 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);
  }

  // Write an element by raw index
  void write_by_index(std::size_t idx, const Property& prop)
  {
    m_edge_properties[idx] = prop;
  }

 public:
  // Add a new property value to the back
  void push_back(const Property& prop)
  {
    m_edge_properties.push_back(prop);
  }

  // Move range of properties backwards
  void move_range(std::size_t src_begin, std::size_t src_end, std::size_t dest_begin) {
    std::copy_backward(
        m_edge_properties.begin() + src_begin,
        m_edge_properties.begin() + src_end,
        m_edge_properties.begin() + dest_begin + (src_end - src_begin));
  }

  typedef typename std::vector<Property>::iterator iterator;
  iterator begin() {return m_edge_properties.begin();}
  iterator end() {return m_edge_properties.end();}

 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;
};

struct dummy_no_property_iterator
: public boost::iterator_facade<dummy_no_property_iterator, no_property, std::random_access_iterator_tag> {
  mutable no_property prop;
  no_property& dereference() const {return prop;}
  bool equal(const dummy_no_property_iterator&) const {return true;}
  void increment() {}
  void decrement() {}
  void advance(std::ptrdiff_t) {}
  std::ptrdiff_t distance_to(const dummy_no_property_iterator) const {return 0;}
};

template<typename Derived, typename Descriptor, typename IndexMap>
class indexed_edge_properties<Derived, void, Descriptor, IndexMap>
{
  struct secret {};

 public:
  typedef no_property edge_property_type;
  typedef void edge_bundled;
  typedef void* edge_push_back_type;
  typedef secret edge_map_type;
  typedef secret const_edge_map_type;

  secret operator[](secret) { return secret(); }
  void write_by_index(std::size_t /*idx*/, const no_property& /*prop*/) {}

  edge_map_type get_edge_bundle(const IndexMap& = IndexMap()) const {
    return edge_map_type();
  }

 protected:
  // All operations do nothing.
  indexed_edge_properties() { }
  indexed_edge_properties(std::size_t) { }
  std::size_t size() const {return 0;}
  void clear() { }
  void resize(std::size_t) { }
  void reserve(std::size_t) { }

 public:
  void push_back(const edge_push_back_type&) { }
  void move_range(std::size_t /*src_begin*/, std::size_t /*src_end*/, std::size_t /*dest_begin*/) {}

  typedef dummy_no_property_iterator iterator;
  iterator begin() {return dummy_no_property_iterator();}
  iterator end() {return dummy_no_property_iterator();}

};

}
}

#endif // BOOST_GRAPH_INDEXED_PROPERTIES_HPP