Version: 9.16.0
SMDS_SetIterator.hxx
Go to the documentation of this file.
1// Copyright (C) 2007-2026 CEA, EDF, OPEN CASCADE
2//
3// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5//
6// This library is free software; you can redistribute it and/or
7// modify it under the terms of the GNU Lesser General Public
8// License as published by the Free Software Foundation; either
9// version 2.1 of the License, or (at your option) any later version.
10//
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14// Lesser General Public License for more details.
15//
16// You should have received a copy of the GNU Lesser General Public
17// License along with this library; if not, write to the Free Software
18// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19//
20// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21//
22
23// SMESH SMDS : implementation of Salome mesh data structure
24// File : SMDS_SetIterator.hxx
25// Created : Feb 27 2006
26// Author : Edward AGAPOV (eap)
27//
28#ifndef SMDS_SetIterator_HeaderFile
29#define SMDS_SetIterator_HeaderFile
30
31#include "SMDS_Iterator.hxx"
32
33namespace SMDS {
34
38
39 template<typename VALUE,typename VALUE_SET_ITERATOR>
41 static VALUE value(VALUE_SET_ITERATOR it) { return (VALUE) *it; }
42 };
43
44 template<typename VALUE,typename VALUE_SET_ITERATOR>
45 struct KeyAccessor {
46 static VALUE value(VALUE_SET_ITERATOR it) { return (VALUE) it->first; }
47 };
48
49 template<typename VALUE,typename VALUE_SET_ITERATOR>
51 static VALUE value(VALUE_SET_ITERATOR it) { return (VALUE) it->second; }
52 };
53
54 template<typename VALUE,typename VALUE_SET_ITERATOR>
56 static VALUE value(VALUE_SET_ITERATOR it) { return (VALUE) &(*it); }
57 };
58
62
63 template <typename VALUE>
65 {
66 bool operator()(const VALUE& /*t*/ ) { return true; }
67 };
68
69 template <typename VALUE>
71 {
72 bool operator()(const VALUE& t ) { return bool( t ); }
73 };
74}
75
82
83template<typename VALUE,
84 typename VALUE_SET_ITERATOR,
86 typename VALUE_FILTER=SMDS::PassAllValueFilter<VALUE> >
87class SMDS_SetIterator : public SMDS_Iterator<VALUE>
88{
89protected:
90 VALUE_SET_ITERATOR _beg, _end;
91 VALUE_FILTER _filter;
92public:
93 SMDS_SetIterator(const VALUE_SET_ITERATOR & begin,
94 const VALUE_SET_ITERATOR & end,
95 const VALUE_FILTER& filter=VALUE_FILTER())
96 { init ( begin, end, filter ); }
97
99 virtual void init(const VALUE_SET_ITERATOR & begin,
100 const VALUE_SET_ITERATOR & end,
101 const VALUE_FILTER& filter=VALUE_FILTER())
102 {
103 _beg = begin;
104 _end = end;
105 _filter = filter;
106 if ( more() && !_filter( ACCESOR::value( _beg )))
107 next();
108 }
110 virtual bool more()
111 {
112 return _beg != _end;
113 }
115 virtual VALUE next()
116 {
117 VALUE ret = ACCESOR::value( _beg++ );
118 while ( more() && !_filter( ACCESOR::value( _beg )))
119 ++_beg;
120 return ret;
121 }
122};
123
127
128#include <map>
132template<typename M>
133struct SMDS_mapIterator : public SMDS_SetIterator< typename M::mapped_type, typename M::const_iterator,
134 SMDS::ValueAccessor<typename M::mapped_type,
135 typename M::const_iterator> > {
136 typedef SMDS_SetIterator< typename M::mapped_type, typename M::const_iterator,
137 SMDS::ValueAccessor<typename M::mapped_type,
138 typename M::const_iterator> > parent_type;
139 SMDS_mapIterator(const M& m):parent_type(m.begin(),m.end()) {}
140};
144template<typename M>
145struct SMDS_mapReverseIterator : public SMDS_SetIterator< typename M::mapped_type,
146 typename M::const_reverse_iterator,
147 SMDS::ValueAccessor<typename M::mapped_type,
148 typename M::const_reverse_iterator> > {
149 typedef SMDS_SetIterator< typename M::mapped_type, typename M::const_reverse_iterator,
150 SMDS::ValueAccessor<typename M::mapped_type,
151 typename M::const_reverse_iterator> > parent_type;
152 SMDS_mapReverseIterator(const M& m):parent_type(m.rbegin(),m.rend()) {}
153};
157template<typename M>
158struct SMDS_mapKeyIterator : public SMDS_SetIterator< typename M::key_type, typename M::const_iterator,
159 SMDS::KeyAccessor<typename M::key_type,
160 typename M::const_iterator> > {
161 typedef SMDS_SetIterator< typename M::key_type, typename M::const_iterator,
162 SMDS::KeyAccessor<typename M::key_type,
163 typename M::const_iterator> > parent_type;
164 SMDS_mapKeyIterator(const M& m):parent_type(m.begin(),m.end()) {}
165};
169template<typename M>
170struct SMDS_mapKeyReverseIterator : public SMDS_SetIterator< typename M::key_type, typename M::const_iterator,
171 SMDS::KeyAccessor<typename M::key_type,
172 typename M::const_iterator> > {
173 typedef SMDS_SetIterator< typename M::key_type, typename M::const_iterator,
174 SMDS::KeyAccessor<typename M::key_type,
175 typename M::const_iterator> > parent_type;
176 SMDS_mapKeyReverseIterator(const M& m):parent_type(m.rbegin(),m.rend()) {}
177};
178
180// useful specifications
182
183#include <vector>
184
185class SMDS_MeshElement;
186class SMDS_MeshNode;
187
190
191// element iterators
192
195
196
199
200
203
204
207
208// node iterators
209
212
213
216
217
218#endif
SMDS_SetIterator< SMDS_pNode, SMDS_pNode const * > SMDS_NodeArrayIterator
Definition: SMDS_SetIterator.hxx:215
SMDS_SetIterator< SMDS_pNode, std::vector< SMDS_pNode >::const_iterator > SMDS_NodeVectorIterator
Definition: SMDS_SetIterator.hxx:211
SMDS_SetIterator< SMDS_pElement, std::vector< SMDS_pElement >::const_iterator > SMDS_ElementVectorIterator
Definition: SMDS_SetIterator.hxx:194
SMDS_SetIterator< SMDS_pElement, SMDS_pElement const * > SMDS_ElementArrayIterator
Definition: SMDS_SetIterator.hxx:198
SMDS_SetIterator< SMDS_pElement, std::vector< SMDS_pNode >::const_iterator > SMDS_NodeVectorElemIterator
Definition: SMDS_SetIterator.hxx:202
const SMDS_MeshNode * SMDS_pNode
Definition: SMDS_SetIterator.hxx:189
SMDS_SetIterator< SMDS_pElement, SMDS_pNode const * > SMDS_NodeArrayElemIterator
Definition: SMDS_SetIterator.hxx:206
const SMDS_MeshElement * SMDS_pElement
Definition: SMDS_SetIterator.hxx:188
IMAP::const_iterator begin(const IMAP &m)
Definition: StdMeshers_Projection_2D.cxx:104
IMAP::const_iterator end(const IMAP &m)
Definition: StdMeshers_Projection_2D.cxx:106
Abstract class for iterators.
Definition: SMDS_Iterator.hxx:33
Base class for elements.
Definition: SMDS_MeshElement.hxx:56
Definition: SMDS_MeshNode.hxx:36
SMDS_Iterator iterating over abstract set of values like STL containers.
Definition: SMDS_SetIterator.hxx:88
VALUE_SET_ITERATOR _beg
Definition: SMDS_SetIterator.hxx:90
virtual void init(const VALUE_SET_ITERATOR &begin, const VALUE_SET_ITERATOR &end, const VALUE_FILTER &filter=VALUE_FILTER())
Initialization.
Definition: SMDS_SetIterator.hxx:99
VALUE_SET_ITERATOR _end
Definition: SMDS_SetIterator.hxx:90
SMDS_SetIterator(const VALUE_SET_ITERATOR &begin, const VALUE_SET_ITERATOR &end, const VALUE_FILTER &filter=VALUE_FILTER())
Definition: SMDS_SetIterator.hxx:93
VALUE_FILTER _filter
Definition: SMDS_SetIterator.hxx:91
virtual bool more()
Return true iff there are other object in this iterator.
Definition: SMDS_SetIterator.hxx:110
virtual VALUE next()
Return the current object and step to the next one.
Definition: SMDS_SetIterator.hxx:115
Definition: chrono.hxx:31
Definition: SMDS_SetIterator.hxx:45
static VALUE value(VALUE_SET_ITERATOR it)
Definition: SMDS_SetIterator.hxx:46
Definition: SMDS_SetIterator.hxx:71
bool operator()(const VALUE &t)
Definition: SMDS_SetIterator.hxx:72
Filters of value pointed by iterator.
Definition: SMDS_SetIterator.hxx:65
bool operator()(const VALUE &)
Definition: SMDS_SetIterator.hxx:66
Definition: SMDS_SetIterator.hxx:55
static VALUE value(VALUE_SET_ITERATOR it)
Definition: SMDS_SetIterator.hxx:56
Accessors to value pointed by iterator.
Definition: SMDS_SetIterator.hxx:40
static VALUE value(VALUE_SET_ITERATOR it)
Definition: SMDS_SetIterator.hxx:41
Definition: SMDS_SetIterator.hxx:50
static VALUE value(VALUE_SET_ITERATOR it)
Definition: SMDS_SetIterator.hxx:51
map iterators
Definition: SMDS_SetIterator.hxx:135
SMDS_SetIterator< typename M::mapped_type, typename M::const_iterator, SMDS::ValueAccessor< typename M::mapped_type, typename M::const_iterator > > parent_type
Definition: SMDS_SetIterator.hxx:138
SMDS_mapIterator(const M &m)
Definition: SMDS_SetIterator.hxx:139
iterator on keys of a map
Definition: SMDS_SetIterator.hxx:160
SMDS_SetIterator< typename M::key_type, typename M::const_iterator, SMDS::KeyAccessor< typename M::key_type, typename M::const_iterator > > parent_type
Definition: SMDS_SetIterator.hxx:163
SMDS_mapKeyIterator(const M &m)
Definition: SMDS_SetIterator.hxx:164
reverse iterator on keys of a map
Definition: SMDS_SetIterator.hxx:172
SMDS_mapKeyReverseIterator(const M &m)
Definition: SMDS_SetIterator.hxx:176
SMDS_SetIterator< typename M::key_type, typename M::const_iterator, SMDS::KeyAccessor< typename M::key_type, typename M::const_iterator > > parent_type
Definition: SMDS_SetIterator.hxx:175
reverse iterator on values of a map
Definition: SMDS_SetIterator.hxx:148
SMDS_mapReverseIterator(const M &m)
Definition: SMDS_SetIterator.hxx:152
SMDS_SetIterator< typename M::mapped_type, typename M::const_reverse_iterator, SMDS::ValueAccessor< typename M::mapped_type, typename M::const_reverse_iterator > > parent_type
Definition: SMDS_SetIterator.hxx:151