vasculature.h
1 /* Copyright (c) 2013-2023, EPFL/Blue Brain Project
2  *
3  * SPDX-License-Identifier: Apache-2.0
4  */
5 #pragma once
6 
7 #include <memory> // std::shared_ptr
8 #include <string> // std::string
9 #include <vector> // std::vector
10 
11 #include <morphio/types.h>
12 #include <morphio/vasc/iterators.hpp>
13 #include <morphio/vasc/properties.h>
14 
15 namespace morphio {
16 namespace vasculature {
17 
18 using graph_iterator = graph_iterator_t<Section, Vasculature>;
19 
29 {
30  public:
34  explicit Vasculature(const std::string& source);
35 
36  Vasculature(Vasculature&&) = default;
37  virtual ~Vasculature() = default;
38 
39  Vasculature& operator=(const Vasculature&) = default;
40  Vasculature& operator=(Vasculature&&) = default;
41 
45  std::vector<Section> sections() const;
46 
52  Section section(uint32_t id) const;
53 
64  const std::vector<uint32_t> sectionOffsets() const noexcept;
65 
69  inline const Points& points() const noexcept;
70 
74  inline const std::vector<morphio::floatType>& diameters() const noexcept;
75 
79  inline const std::vector<property::SectionType::Type>& sectionTypes() const noexcept;
80 
84  const std::vector<morphio::vasculature::property::Connection::Type>& sectionConnectivity() const
85  noexcept;
86 
87 
89  graph_iterator begin() const;
91  graph_iterator end() const;
92 
93  private:
94  std::shared_ptr<property::Properties> properties_;
95 
96  template <typename Property>
97  inline const std::vector<typename Property::Type>& get() const noexcept;
98 };
99 
100 template <typename Property>
101 inline const std::vector<typename Property::Type>& Vasculature::get() const noexcept {
102  return properties_->get<Property>();
103 }
104 
105 inline const Points& Vasculature::points() const noexcept {
106  return get<property::Point>();
107 }
108 
109 inline const std::vector<morphio::floatType>& Vasculature::diameters() const noexcept {
110  return get<property::Diameter>();
111 }
112 
113 inline const std::vector<property::SectionType::Type>& Vasculature::sectionTypes() const noexcept {
114  return get<property::SectionType>();
115 }
116 
117 } // namespace vasculature
118 } // 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:28
morphio::vasculature::Vasculature::sectionOffsets
const std::vector< uint32_t > sectionOffsets() const noexcept
morphio::vasculature::Section
Definition: section.h:18
morphio::vasculature::Vasculature::section
Section section(uint32_t id) const
morphio::vasculature::Vasculature::points
const Points & points() const noexcept
Definition: vasculature.h:105
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:113
morphio::vasculature::Vasculature::diameters
const std::vector< morphio::floatType > & diameters() const noexcept
Definition: vasculature.h:109
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:15