graph
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
edge_list_reader.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <cassert>
4 #include <string>
5 
6 #include "pangolin/edge_list.hpp"
7 
8 namespace pangolin
9 {
10 
12 {
13 
14 public:
15  class iterator
16  {
17  friend class EdgeListReader;
18 
19  private:
22 
23  public:
24  iterator(EdgeListReader *reader) : reader_(reader) {}
25  iterator(const iterator &i) : edge_(i.edge_)
26  {
27  reader_ = reader_->clone();
28  }
29 
30  const Edge &operator*()
31  {
32  assert(reader_);
33  return edge_;
34  }
35 
36  const Edge *operator->()
37  {
38  assert(reader_);
39  return &edge_;
40  }
41 
42  iterator operator++(int) // postfix++
43  {
44  iterator i(*this);
45  ++i;
46  return i;
47  }
48  iterator &operator++() // ++prefix
49  {
50  reader_->read(&edge_, 1);
51  return *this;
52  }
53  };
54 
56  {
57  return iterator(this);
58  }
60  {
61  return iterator(nullptr);
62  }
63  virtual ~EdgeListReader() {}
64 
65  // return a deep copy of the edge list reader
66  virtual EdgeListReader *clone() = 0;
67 
68  // read some number of edges from the file into buffer
69  virtual size_t read(Edge *ptr, const size_t num) = 0;
70  EdgeList read(const size_t num)
71  {
72  EdgeList edgeList(num);
73  const size_t numRead = read(edgeList.data(), num);
74  edgeList.resize(numRead);
75  return edgeList;
76  }
77 
78  // read all edges from the file
80 
81  // construct an edge list reader based on the file type of path
82  static EdgeListReader *from_file(const std::string &path);
83 };
84 
85 } // namespace pangolin
const Edge * operator->()
Definition: edge_list_reader.hpp:36
Definition: edge_list_reader.hpp:15
iterator(EdgeListReader *reader)
Definition: edge_list_reader.hpp:24
EdgeList read_all()
Definition: edge_list_reader.cpp:38
std::vector< Edge > EdgeList
Definition: edge_list.hpp:9
iterator end()
Definition: edge_list_reader.hpp:59
iterator operator++(int)
Definition: edge_list_reader.hpp:42
Definition: edge_list_reader.hpp:11
virtual EdgeListReader * clone()=0
iterator & operator++()
Definition: edge_list_reader.hpp:48
Definition: bel_reader.cpp:8
EdgeListReader * reader_
Definition: edge_list_reader.hpp:20
static EdgeListReader * from_file(const std::string &path)
Definition: edge_list_reader.cpp:17
const Edge & operator*()
Definition: edge_list_reader.hpp:30
iterator begin()
Definition: edge_list_reader.hpp:55
EdgeList read(const size_t num)
Definition: edge_list_reader.hpp:70
Edge edge_
Definition: edge_list_reader.hpp:21
virtual ~EdgeListReader()
Definition: edge_list_reader.hpp:63
virtual size_t read(Edge *ptr, const size_t num)=0
iterator(const iterator &i)
Definition: edge_list_reader.hpp:25
std::pair< Uint, Uint > Edge
Definition: edge.hpp:14