vasculature.h
1 #pragma once
2 
3 #include <memory> // std::shared_ptr
4 #include <string> // std::string
5 #include <vector> // std::vector
6 
7 #include <morphio/types.h>
8 #include <morphio/vasc/iterators.hpp>
9 #include <morphio/vasc/properties.h>
10 
11 namespace morphio {
12 namespace vasculature {
13 
14 using graph_iterator = graph_iterator_t<Section, Vasculature>;
15 
25 {
26  public:
30  explicit Vasculature(const std::string& source);
31 
32  Vasculature(Vasculature&&) = default;
33  virtual ~Vasculature() = default;
34 
35  Vasculature& operator=(const Vasculature&) = default;
36  Vasculature& operator=(Vasculature&&) = default;
37 
41  std::vector<Section> sections() const;
42 
48  Section section(uint32_t id) const;
49 
60  const std::vector<uint32_t> sectionOffsets() const noexcept;
61 
65  inline const Points& points() const noexcept;
66 
70  inline const std::vector<morphio::floatType>& diameters() const noexcept;
71 
75  inline const std::vector<property::SectionType::Type>& sectionTypes() const noexcept;
76 
80  const std::vector<morphio::vasculature::property::Connection::Type>& sectionConnectivity() const
81  noexcept;
82 
83 
85  graph_iterator begin() const;
87  graph_iterator end() const;
88 
89  private:
90  std::shared_ptr<property::Properties> properties_;
91 
92  template <typename Property>
93  inline const std::vector<typename Property::Type>& get() const noexcept;
94 };
95 
96 template <typename Property>
97 inline const std::vector<typename Property::Type>& Vasculature::get() const noexcept {
98  return properties_->get<Property>();
99 }
100 
101 inline const Points& Vasculature::points() const noexcept {
102  return get<property::Point>();
103 }
104 
105 inline const std::vector<morphio::floatType>& Vasculature::diameters() const noexcept {
106  return get<property::Diameter>();
107 }
108 
109 inline const std::vector<property::SectionType::Type>& Vasculature::sectionTypes() const noexcept {
110  return get<property::SectionType>();
111 }
112 
113 } // namespace vasculature
114 } // namespace morphio
morphio::vasculature::Vasculature::Vasculature
Vasculature(const std::string &source)
morphio::vasculature::Vasculature::begin
graph_iterator begin() const
morphio::vasculature::Vasculature
Definition: vasculature.h:24
morphio::vasculature::Vasculature::sectionOffsets
const std::vector< uint32_t > sectionOffsets() const noexcept
morphio::vasculature::Section
Definition: section.h:14
morphio::vasculature::Vasculature::section
Section section(uint32_t id) const
morphio::vasculature::Vasculature::points
const Points & points() const noexcept
Definition: vasculature.h:101
morphio::vasculature::Vasculature::sectionConnectivity
const std::vector< morphio::vasculature::property::Connection::Type > & sectionConnectivity() const noexcept
morphio::vasculature::Vasculature::sectionTypes
const std::vector< property::SectionType::Type > & sectionTypes() const noexcept
Definition: vasculature.h:109
morphio::vasculature::Vasculature::diameters
const std::vector< morphio::floatType > & diameters() const noexcept
Definition: vasculature.h:105
morphio::vasculature::Vasculature::sections
std::vector< Section > sections() const
morphio::vasculature::Vasculature::end
graph_iterator end() const
morphio::vasculature::graph_iterator_t
Definition: iterators.hpp:10