You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.7 KiB
68 lines
2.7 KiB
/** |
|
* Author: dkanus |
|
* Home repo: https://www.insultplayers.ru/git/AcediaFramework/AcediaCore |
|
* License: GPL |
|
* Copyright 2022-2023 Anton Tarasenko |
|
*------------------------------------------------------------------------------ |
|
* This file is part of Acedia. |
|
* |
|
* Acedia is free software: you can redistribute it and/or modify |
|
* it under the terms of the GNU General Public License as published by |
|
* the Free Software Foundation, version 3 of the License, or |
|
* (at your option) any later version. |
|
* |
|
* Acedia is distributed in the hope that it will be useful, |
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
* GNU General Public License for more details. |
|
* |
|
* You should have received a copy of the GNU General Public License |
|
* along with Acedia. If not, see <https://www.gnu.org/licenses/>. |
|
*/ |
|
class Iter extends AcediaObject |
|
abstract; |
|
|
|
//! Base class for iterator, an auxiliary object for iterating through |
|
//! a set of objects obtained from some context-dependent source. |
|
|
|
/// Status of the [`Iter`]'s filter regarding some specific property. |
|
/// |
|
/// [`Iter`]s can filter objects they're iterating on by the presence or lack of a certain property, |
|
/// recording this choice requires 3 values (for requiring having/not having a certain property and |
|
/// for ignoring it). |
|
/// This enumeration is for inner purposes and is there to unify iterator implementations. |
|
enum IterFilter { |
|
/// We don't use relevant property for filtering |
|
IF_Nothing, |
|
/// Iterated objects must have that property |
|
IF_Have, |
|
/// Iterated objects must not have that property |
|
IF_NotHave |
|
}; |
|
|
|
/// Advances iterator to the next item. |
|
/// |
|
/// Makes iterator refer to the next item from the source and returns `true`, as long as the source |
|
/// of items isn't yet exhausted. |
|
/// In case there's no more items, method has to return `false` and do nothing else. |
|
/// [`Iter::HasFinished()`] can also be used to check whether there are more items available. |
|
public function bool Next(); |
|
|
|
/// Returns value currently pointed to by an iterator. |
|
/// |
|
/// Does not advance iteration: use [`Iter::Next()`] to pick next value. |
|
/// |
|
/// In case iterator has already reached the end (and [`Iter::Next()``] returned `false`), this |
|
/// method will return `none`. |
|
/// Note that depending on context `none` values can also be returned, use |
|
/// [`Iter::LeaveOnlyNotNone()`] method to prevent that. |
|
public function AcediaObject Get(); |
|
|
|
/// Checks if caller [`Iter`] has finished iterating. |
|
public function bool HasFinished(); |
|
|
|
/// Makes caller iterator skip any `none` items during iteration. |
|
public function LeaveOnlyNotNone(); |
|
|
|
defaultproperties { |
|
} |