Scaffolding  0.1
This program can assemble genome scaffolds using the pairing information in paired-end reads.
adv_edge_iters.hpp
Go to the documentation of this file.
1 
2 
8 #ifndef ADV_EDGE_ITERS_HPP
9 #define ADV_EDGE_ITERS_HPP
10 
11 #include "utils/graph_typedefs.hpp"
12 #include "utils/predicates.hpp"
13 
14 namespace scaffold {
15  using namespace predicates;
16 
18  template<class Graph, class Predicate = TruePredicate<Edge<Graph> >, class EdgeIt = OEdgeIter<Graph> >
20  {
21  const Graph& g;
22  const Predicate pred;
23  EdgeIt payload;
24  EdgeIt end;
25 
27  void fix_payload()
28  {
29  while(is_valid() && !pred(*payload)) ++payload;
30  }
31 
32  public:
33 
35  Predicated_EdgeIter(const Graph& _g,
36  const EdgeIt& _payload,
37  const EdgeIt& _end,
38  const Predicate& _pred = Predicate()):
39  g(_g), pred(_pred), payload(_payload), end(_end)
40  {
41  fix_payload();
42  }
44  Predicated_EdgeIter(const Graph& _g,
45  const std::pair<EdgeIt, EdgeIt>& range,
46  const Predicate& _pred = Predicate()):
47  g(_g), pred(_pred), payload(range.first), end(range.second)
48  {
49  fix_payload();
50  }
53  g(_orig.g), pred(_orig.pred), payload(_orig.payload), end(_orig.end)
54  {}
55 
57  bool is_valid() const
58  {
59  return payload != end;
60  }
61 
63  operator bool() const
64  {
65  return is_valid();
66  }
67 
69  const Edge<Graph> operator*() const
70  {
71  return *payload;
72  }
73 
76  {
77  if(is_valid()){
78  ++payload;
79  fix_payload();
80  }
81  return *this;
82  }
85  {
86  EdgeIt i = payload;
87  ++(*this);
88  return Predicated_EdgeIter<Graph, Predicate, EdgeIt>(g, i, end, pred);
89  }
90 
93  {
94  return (payload == it.payload);
95  }
96 
98  Predicated_EdgeIter<Graph, Predicate, EdgeIt>& operator=(const std::pair<EdgeIt, EdgeIt>& range)
99  {
100  payload = range.first;
101  end = range.second;
102  fix_payload();
103  return *this;
104  }
105  };
106 
107 }// namespace
108 
109 
110 #endif
111 
bool operator==(const Predicated_EdgeIter< Graph, Predicate > &it) const
check against another EdgeIter
Definition: adv_edge_iters.hpp:92
Predicated_EdgeIter< Graph, Predicate, EdgeIt > & operator=(const std::pair< EdgeIt, EdgeIt > &range)
assign from a pair of iterators
Definition: adv_edge_iters.hpp:98
Definition: read_adj_list.hpp:22
prototype predicate
Definition: predicates.hpp:14
Predicated_EdgeIter(const Graph &_g, const std::pair< EdgeIt, EdgeIt > &range, const Predicate &_pred=Predicate())
constructor using an iterator range as given by boost::edges() for example
Definition: adv_edge_iters.hpp:44
Predicated_EdgeIter(const Predicated_EdgeIter< Graph, EdgeIt, Predicate > &_orig)
copy constructor
Definition: adv_edge_iters.hpp:52
Predicated_EdgeIter & operator++()
increment operator
Definition: adv_edge_iters.hpp:75
an edge iterator that skips over all edges for which the predicate evaluates to false ...
Definition: adv_edge_iters.hpp:19
const Edge< Graph > operator*() const
dereference operator, simply dereferences the internal boost iterator
Definition: adv_edge_iters.hpp:69
bool is_valid() const
return true iff the iterator is not "past-the-end"
Definition: adv_edge_iters.hpp:57
Predicated_EdgeIter(const Graph &_g, const EdgeIt &_payload, const EdgeIt &_end, const Predicate &_pred=Predicate())
constructor initializing all data members
Definition: adv_edge_iters.hpp:35
Predicated_EdgeIter operator++(int)
post-increment
Definition: adv_edge_iters.hpp:84