Develop Biology
The language of life
SmartIterator.h
Go to the documentation of this file.
1/*
2 * This file is a part of the Biology project by eons LLC.
3 * Biology (aka Develop Biology) is a framework for approaching software
4 * development from a natural sciences perspective.
5 *
6 * Copyright (C) 2022 Séon O'Shannon & eons LLC
7 *
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU Affero General Public License as
10 * published by the Free Software Foundation, either version 3 of the
11 * License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU Affero General Public License for more details.
17 *
18 * You should have received a copy of the GNU Affero General Public License
19 * along with this program. If not, see <https://www.gnu.org/licenses/>.
20 */
21
22#pragma once
23
24#include "bio/common/Types.h"
25
26namespace bio {
27
28class Container;
29
30class Iterator;
31
37{
38public:
39
44 SmartIterator(const Container* container);
45
51 const Container* container,
52 Index index
53 );
54
59
64
68 const Iterator* GetImplementation() const;
69
73 Index GetIndex() const;
74
80 bool MoveTo(Index index) const;
81
85 bool IsAtBeginning() const;
86
90 bool IsAtEnd() const;
91
96 virtual ByteStream operator*();
97
102 virtual const ByteStream operator*() const;
103
109 template < typename T >
110 T As()
111 {
112 return (**this).template As< T >();
113 }
114
120 template < typename T >
121 const T As() const
122 {
123 return (**this).template As< T >();
124 }
125
131 template < typename T >
132 operator T()
133 {
134 return As< T >();
135 }
136
142 template < typename T >
143 operator const T() const
144 {
145 return As< T >();
146 }
147
151 SmartIterator& operator++() const;
152
156 SmartIterator operator++(int) const;
157
161 SmartIterator& operator--() const;
162
166 SmartIterator operator--(int) const;
167
168protected:
173};
174
175} //bio namespace
bool MoveTo(Index index) const
SmartIterator(const Container *container)
SmartIterator & operator--() const
Index GetIndex() const
const T As() const
SmartIterator & operator++() const
Iterator * m_implementation
bool IsAtBeginning() const
bool IsAtEnd() const
virtual ByteStream operator*()
Iterator * GetImplementation()
Definition: Cell.h:31
uint32_t Index
Definition: Types.h:57