7 namespace vasculature {
9 template <
typename SectionT,
typename VasculatureT>
12 std::set<SectionT> visited;
13 std::stack<SectionT> container;
16 using iterator_category = std::input_iterator_tag;
17 using value_type = SectionT;
18 using difference_type = std::ptrdiff_t;
19 using pointer = SectionT*;
20 using reference = SectionT&;
27 inline const SectionT& operator*()
const;
33 template <
typename SectionT,
typename VasculatureT>
35 const SectionT& vasculatureSection) {
36 container.push(vasculatureSection);
39 template <
typename SectionT,
typename VasculatureT>
40 inline graph_iterator_t<SectionT, VasculatureT>::graph_iterator_t(
41 const VasculatureT& vasculatureMorphology) {
42 const auto& sections = vasculatureMorphology.sections();
43 for (std::size_t i = 0; i < sections.size(); ++i) {
44 if (sections[i].predecessors().empty()) {
45 container.push(sections[i]);
46 visited.insert(sections[i]);
51 template <
typename SectionT,
typename VasculatureT>
52 inline bool graph_iterator_t<SectionT, VasculatureT>::operator==(
53 const graph_iterator_t& other)
const {
54 return container == other.container;
57 template <
typename SectionT,
typename VasculatureT>
58 inline bool graph_iterator_t<SectionT, VasculatureT>::operator!=(
59 const graph_iterator_t& other)
const {
60 return !(*
this == other);
63 template <
typename SectionT,
typename VasculatureT>
64 inline const SectionT& graph_iterator_t<SectionT, VasculatureT>::operator*()
const {
65 return container.top();
68 template <
typename SectionT,
typename VasculatureT>
69 inline graph_iterator_t<SectionT, VasculatureT>&
70 graph_iterator_t<SectionT, VasculatureT>::operator++() {
71 const auto& section = *(*this);
73 const auto& neighbors = section.neighbors();
74 for (
auto it = neighbors.rbegin(); it != neighbors.rend(); ++it)
75 if (visited.find(*it) == visited.end()) {
82 template <
typename SectionT,
typename VasculatureT>
83 inline graph_iterator_t<SectionT, VasculatureT>
84 graph_iterator_t<SectionT, VasculatureT>::operator++(
int) {
85 graph_iterator_t retval = *
this;
Definition: iterators.hpp:11
Definition: endoplasmic_reticulum.h:5