CEPS  24.01
Cardiac ElectroPhysiology Simulator
AttributesSelector.tpp
Go to the documentation of this file.
1 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2  This file is part of CEPS.
3 
4  CEPS is free software: you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation, either version 3 of the License, or
7  (at your option) any later version.
8 
9  CEPS is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with CEPS (see file LICENSE at root of project).
16  If not, see <https://www.gnu.org/licenses/>.
17 
18 
19  Copyright 2019-2024 Inria, Universite de Bordeaux
20 
21  Authors, in alphabetical order:
22 
23  Pierre-Elliott BECUE, Florian CARO, Yves COUDIERE(*), Andjela DAVIDOVIC,
24  Charlie DOUANLA-LONTSI, Marc FUENTES, Mehdi JUHOOR, Michael LEGUEBE(*),
25  Pauline MIGERDITICHAN, Valentin PANNETIER(*), Nejib ZEMZEMI.
26  * : currently active authors
27 
28 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
29 /** @file AttributesSelector.tpp Selectors based on attributes of entities */
30 #include "geometry/selectors/AttributesSelector.hpp"
31 
32 template <class _Iterator>
33 void
34 AttributesSelector<_Iterator>::selectBetween(_Iterator first, _Iterator last)
35 {
36  if (this->getNumberOfAttributes () == 0)
37  return;
38 
39  Selector selector = nullptr;
40  if (this->hasAttribute(CepsUniversal)) // select any object
41  selector = [] (Object) -> CepsBool {
42  return true;
43  };
44  else
45  {
46  if constexpr (std::is_convertible<Object,ceps::HoldsAttributes*>::value)
47  selector = [&] (Object obj) -> CepsBool {
48  return obj->hasOneOfAttributes(this->m_attributes);
49  };
50  if constexpr (std::is_convertible<Object,ceps::HoldsGeomObject<GeomCell>*>::value)
51  selector = [&] (Object obj) -> CepsBool {
52  return obj->getProperties()->hasOneOfAttributes(this->m_attributes);
53  };
54  }
55 
56  return AbstractSelector<_Iterator>::internalRun(&selector,first,last);
57 }
58 
59 template <class _Iterator>
60 void
61 AttributesSelector<_Iterator>::reset()
62 {
63  AbstractSelector<_Iterator>::reset();
64  ceps::HoldsAttributes::reset();
65  return;
66 }