Ultra 0.9.4
Loading...
Searching...
No Matches
individual_exon_view.tcc
Go to the documentation of this file.
1
12
13#if !defined(ULTRA_GP_INDIVIDUAL_H)
14# error "Don't include this file directly, include the specific .h instead"
15#endif
16
17#if !defined(ULTRA_GP_INDIVIDUAL_EXON_VIEW_TCC)
18#define ULTRA_GP_INDIVIDUAL_EXON_VIEW_TCC
19
21
34class exon_view : public std::ranges::view_interface<exon_view>
35{
36public:
38 using iterator = internal::basic_exon_iterator<false>;
39
41 using sentinel = std::default_sentinel_t;
42
45 explicit exon_view(gp::individual &ind) noexcept : ind_(std::addressof(ind))
46 {}
47
49 [[nodiscard]] iterator begin() const { return iterator(*ind_); }
50
52 [[nodiscard]] sentinel end() const noexcept { return {}; }
53
54private:
55 gp::individual *ind_;
56}; // class exon_view
57
64class const_exon_view : public std::ranges::view_interface<const_exon_view>
65{
66public:
67 using iterator = internal::basic_exon_iterator<true>;
68 using sentinel = std::default_sentinel_t;
69
70 explicit const_exon_view(const gp::individual &ind) noexcept
71 : ind_(std::addressof(ind))
72 {}
73
74 [[nodiscard]] iterator begin() const { return iterator(*ind_); }
75 [[nodiscard]] sentinel end() const noexcept { return {}; }
76
77private:
78 const gp::individual *ind_;
79}; // class const_exon_view
80
81
82// Just to document the contract for future maintainers.
83static_assert(std::ranges::input_range<const_exon_view>);
84static_assert(!std::ranges::forward_range<const_exon_view>);
85
86#endif // include guard
exon_view(gp::individual &ind) noexcept
Definition individual_exon_view.tcc:45
internal::basic_exon_iterator< false > iterator
Iterator type iterating over mutable active genes.
Definition individual_exon_view.tcc:38
sentinel end() const noexcept
Definition individual_exon_view.tcc:52
std::default_sentinel_t sentinel
Sentinel marking the end of the exon traversal.
Definition individual_exon_view.tcc:41
iterator begin() const
Definition individual_exon_view.tcc:49