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 
28 class Mitochondria
29 {
30  using MitoSectionP = std::shared_ptr<MitoSection>;
31 
32  public:
33  Mitochondria()
34  : _counter(0) {}
35 
36  const std::vector<MitoSectionP>& children(const MitoSectionP&) const;
37  const MitoSectionP& section(uint32_t id) const;
38  const std::map<uint32_t, MitoSectionP>& sections() const noexcept;
39 
46  mito_depth_iterator depth_begin(const MitoSectionP& section) const;
47  mito_depth_iterator depth_end() const;
48 
56  mito_breadth_iterator breadth_begin(const MitoSectionP& section) const;
57  mito_breadth_iterator breadth_end() const;
58 
66  mito_upstream_iterator upstream_begin(const MitoSectionP& section) const;
67  mito_upstream_iterator upstream_end() const;
68 
72  const MitoSectionP& parent(const MitoSectionP& parent) const;
73 
77  bool isRoot(const MitoSectionP& section) const;
78 
83  const std::vector<MitoSectionP>& rootSections() const noexcept;
84 
88  MitoSectionP appendRootSection(const Property::MitochondriaPointLevel& points);
89 
96  MitoSectionP appendRootSection(const morphio::MitoSection&, bool recursive = false);
97  MitoSectionP appendRootSection(const MitoSectionP&, bool recursive = false);
98 
99  const MitoSectionP& mitoSection(uint32_t id) const;
100 
104  void _buildMitochondria(Property::Properties& properties) const;
105 
106  private:
107  friend class MitoSection;
108 
109  uint32_t _register(const MitoSectionP& section);
110 
111  uint32_t _counter;
112  std::map<uint32_t, std::vector<MitoSectionP>> _children;
113  std::map<uint32_t, uint32_t> _parent;
114  std::vector<MitoSectionP> _rootSections;
115  std::map<uint32_t, MitoSectionP> _sections;
116 };
117 
118 inline const std::map<uint32_t, Mitochondria::MitoSectionP>& Mitochondria::sections() const
119  noexcept {
120  return _sections;
121 }
122 
123 inline const std::vector<Mitochondria::MitoSectionP>& Mitochondria::rootSections() const noexcept {
124  return _rootSections;
125 }
126 
127 } // namespace mut
128 } // namespace morphio
Definition: section_iterators.hpp:109
Definition: section_iterators.hpp:53
void _buildMitochondria(Property::Properties &properties) const
mito_breadth_iterator breadth_begin() const
const MitoSectionP & parent(const MitoSectionP &parent) const
Definition: mito_section.h:13
MitoSectionP appendRootSection(const Property::MitochondriaPointLevel &points)
Definition: mito_section.h:10
Definition: endoplasmic_reticulum.h:5
Definition: section_iterators.hpp:81
const std::vector< MitoSectionP > & rootSections() const noexcept
Definition: mitochondria.h:123
Definition: properties.h:168
mito_depth_iterator depth_begin() const
mito_upstream_iterator upstream_begin() const
bool isRoot(const MitoSectionP &section) const