Visual Computing Library
Loading...
Searching...
No Matches
iterators.h
1/*****************************************************************************
2 * VCLib *
3 * Visual Computing Library *
4 * *
5 * Copyright(C) 2021-2025 *
6 * Visual Computing Lab *
7 * ISTI - Italian National Research Council *
8 * *
9 * All rights reserved. *
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the Mozilla Public License Version 2.0 as published *
13 * by the Mozilla Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 * This program is distributed in the hope that it will be useful, *
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
19 * Mozilla Public License Version 2.0 *
20 * (https://www.mozilla.org/en-US/MPL/2.0/) for more details. *
21 ****************************************************************************/
22
23#ifndef VCL_CONCEPTS_ITERATORS_H
24#define VCL_CONCEPTS_ITERATORS_H
25
26#include <iterator>
27#include <type_traits>
28
29namespace vcl {
30
36template<typename T>
37concept IteratorConcept = std::input_or_output_iterator<T>;
38
45template<typename T, typename V>
47 std::input_iterator<T> && std::indirectly_readable<T> && requires (T i) {
48 { *i } -> std::convertible_to<V>;
49 };
50
59template<typename T, typename V>
60concept OutputIterator = std::output_iterator<T, V>;
61
68template<typename T>
70 IteratorConcept<T> && std::is_class_v<typename T::value_type>;
71
78template<typename T>
80 IteratorConcept<T> && std::is_pointer_v<typename T::value_type>;
81
82} // namespace vcl
83
84#endif // VCL_CONCEPTS_ITERATORS_H
The InputIterator concept is satisfied if T is an input iterator that implements the operator* return...
Definition iterators.h:46
The IteratorOverClass concept is satisfied if T is an iterator having its value_type that is a class.
Definition iterators.h:69
The IteratorOverPointer concept is satisfied if T is an iterator having its value_type that is a poin...
Definition iterators.h:79
The IteratorConcept is satisfied if T is an input or output iterator.
Definition iterators.h:37
The OutputIterator concept is satisfied if T is an output iterator that implements the operator* retu...
Definition iterators.h:60