mitochondria.h
1 #pragma once
2 
3 #include <map>
4 #include <memory>
5 
6 #include <morphio/mito_section.h>
7 #include <morphio/properties.h>
8 #include <morphio/types.h>
9 
10 #include <morphio/mut/mito_section.h>
11 
12 namespace morphio {
13 namespace mut {
14 
15 using mito_upstream_iterator = morphio::upstream_iterator_t<std::shared_ptr<MitoSection>>;
16 using mito_breadth_iterator =
18 using mito_depth_iterator = morphio::depth_iterator_t<std::shared_ptr<MitoSection>, Mitochondria>;
19 
22 {
23  using MitoSectionP = std::shared_ptr<MitoSection>;
24 
25  public:
26  Mitochondria() = default;
27 
28  const std::vector<MitoSectionP>& children(const MitoSectionP&) const;
29  const MitoSectionP& section(uint32_t id) const;
30  const std::map<uint32_t, MitoSectionP>& sections() const noexcept;
31 
38  mito_depth_iterator depth_begin(const MitoSectionP& section) const;
39  mito_depth_iterator depth_end() const;
40 
48  mito_breadth_iterator breadth_begin(const MitoSectionP& section) const;
49  mito_breadth_iterator breadth_end() const;
50 
58  mito_upstream_iterator upstream_begin(const MitoSectionP& section) const;
59  mito_upstream_iterator upstream_end() const;
60 
64  const MitoSectionP& parent(const MitoSectionP& parent) const;
65 
69  bool isRoot(const MitoSectionP& section) const;
70 
75  const std::vector<MitoSectionP>& rootSections() const noexcept;
76 
80  MitoSectionP appendRootSection(const Property::MitochondriaPointLevel& points);
81 
88  MitoSectionP appendRootSection(const morphio::MitoSection&, bool recursive = false);
89  MitoSectionP appendRootSection(const MitoSectionP&, bool recursive = false);
90 
91  const MitoSectionP& mitoSection(uint32_t id) const;
92 
96  void _buildMitochondria(Property::Properties& properties) const;
97 
98  private:
99  friend class MitoSection;
100 
101  uint32_t _register(const MitoSectionP& section);
102 
103  uint32_t _counter = 0;
104  std::map<uint32_t, std::vector<MitoSectionP>> children_;
105  std::map<uint32_t, uint32_t> parent_;
106  std::vector<MitoSectionP> root_sections_;
107  std::map<uint32_t, MitoSectionP> sections_;
108 };
109 
110 inline const std::map<uint32_t, Mitochondria::MitoSectionP>& Mitochondria::sections() const
111  noexcept {
112  return sections_;
113 }
114 
115 inline const std::vector<Mitochondria::MitoSectionP>& Mitochondria::rootSections() const noexcept {
116  return root_sections_;
117 }
118 
119 } // namespace mut
120 } // namespace morphio
morphio::mut::Mitochondria::rootSections
const std::vector< MitoSectionP > & rootSections() const noexcept
Definition: mitochondria.h:115
morphio::Property::Properties
Definition: properties.h:210
morphio::depth_iterator_t
Definition: section_iterators.hpp:81
morphio::mut::Mitochondria::upstream_begin
mito_upstream_iterator upstream_begin() const
morphio::MitoSection
Definition: mito_section.h:17
morphio::Property::MitochondriaPointLevel
Definition: properties.h:93
morphio::mut::Mitochondria::depth_begin
mito_depth_iterator depth_begin() const
morphio::mut::Mitochondria::isRoot
bool isRoot(const MitoSectionP &section) const
morphio::mut::Mitochondria::parent
const MitoSectionP & parent(const MitoSectionP &parent) const
morphio::mut::Mitochondria::_buildMitochondria
void _buildMitochondria(Property::Properties &properties) const
morphio::upstream_iterator_t
Definition: section_iterators.hpp:109
morphio::mut::Mitochondria::appendRootSection
MitoSectionP appendRootSection(const Property::MitochondriaPointLevel &points)
morphio::mut::Mitochondria::breadth_begin
mito_breadth_iterator breadth_begin() const
morphio::mut::Mitochondria
Definition: mitochondria.h:21
morphio::breadth_iterator_t
Definition: section_iterators.hpp:53
morphio::mut::MitoSection
Definition: mito_section.h:13