NDFUniqConstIterator.hpp
Go to the documentation of this file.
1 //==============================================================================
2 //
3 // This file is part of GNSSTk, the ARL:UT GNSS Toolkit.
4 //
5 // The GNSSTk is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU Lesser General Public License as published
7 // by the Free Software Foundation; either version 3.0 of the License, or
8 // any later version.
9 //
10 // The GNSSTk is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU Lesser General Public License for more details.
14 //
15 // You should have received a copy of the GNU Lesser General Public
16 // License along with GNSSTk; if not, write to the Free Software Foundation,
17 // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
18 //
19 // This software was developed by Applied Research Laboratories at the
20 // University of Texas at Austin.
21 // Copyright 2004-2022, The Board of Regents of The University of Texas System
22 //
23 //==============================================================================
24 
25 
26 //==============================================================================
27 //
28 // This software was developed by Applied Research Laboratories at the
29 // University of Texas at Austin, under contract to an agency or agencies
30 // within the U.S. Department of Defense. The U.S. Government retains all
31 // rights to use, duplicate, distribute, disclose, or release this software.
32 //
33 // Pursuant to DoD Directive 523024
34 //
35 // DISTRIBUTION STATEMENT A: This software has been approved for public
36 // release, distribution is unlimited.
37 //
38 //==============================================================================
39 #ifndef GNSSTK_NDFUNIQUECONSTITERATOR_HPP
40 #define GNSSTK_NDFUNIQUECONSTITERATOR_HPP
41 
42 #include <type_traits>
43 
44 namespace gnsstk
45 {
59  template <typename T>
61  {
62  public:
64  : map(nullptr)
65  {}
66  NDFUniqConstIterator(const T& omap)
67  : nuit(omap.begin()), map(&omap)
68  {}
69  NDFUniqConstIterator(const T& omap, typename T::const_iterator i)
70  : nuit(i), map(&omap)
71  {}
73  {
74  nuit++;
75  NavDataFactory *ndfp = dynamic_cast<NavDataFactory*>(
76  nuit->second.get());
77  while ((nuit != map->end()) && (uniques.count(ndfp) > 0))
78  {
79  nuit++;
80  if (nuit != map->end())
81  {
82  ndfp = dynamic_cast<NavDataFactory*>(nuit->second.get());
83  }
84  }
85  return *this;
86  }
87  const typename T::value_type& operator*()
88  {
89  if (nuit != map->end())
90  {
91  NavDataFactory *ndfp = dynamic_cast<NavDataFactory*>(
92  nuit->second.get());
93  uniques.insert(ndfp);
94  }
95  return *nuit;
96  }
98  { return NDFUniqConstIterator(*map); }
100  { return NDFUniqConstIterator(*map, map->end()); }
102  { return ((map != i.map) || (nuit != i.nuit)); }
103  private:
105  typename T::const_iterator nuit;
107  std::set<typename T::mapped_type::element_type*> uniques;
109  const T* map;
110  };
111 }
112 
113 #endif // GNSSTK_NDFUNIQUECONSTITERATOR_HPP
gnsstk::NDFUniqConstIterator::NDFUniqConstIterator
NDFUniqConstIterator(const T &omap, typename T::const_iterator i)
Definition: NDFUniqConstIterator.hpp:69
gnsstk::NDFUniqConstIterator::map
const T * map
Original map.
Definition: NDFUniqConstIterator.hpp:109
gnsstk::NDFUniqConstIterator::uniques
std::set< typename T::mapped_type::element_type * > uniques
Pointers already encountered. This assumes a map to a shared_ptr.
Definition: NDFUniqConstIterator.hpp:107
gnsstk::NDFUniqConstIterator::operator*
const T::value_type & operator*()
Definition: NDFUniqConstIterator.hpp:87
gnsstk
For Sinex::InputHistory.
Definition: BasicFramework.cpp:50
gnsstk::NDFUniqConstIterator::begin
NDFUniqConstIterator begin()
Definition: NDFUniqConstIterator.hpp:97
gnsstk::NDFUniqConstIterator::NDFUniqConstIterator
NDFUniqConstIterator()
Definition: NDFUniqConstIterator.hpp:63
gnsstk::NDFUniqConstIterator::NDFUniqConstIterator
NDFUniqConstIterator(const T &omap)
Definition: NDFUniqConstIterator.hpp:66
gnsstk::NDFUniqConstIterator::operator!=
bool operator!=(const NDFUniqConstIterator &i)
Definition: NDFUniqConstIterator.hpp:101
gnsstk::NavDataFactory
Definition: NavDataFactory.hpp:60
gnsstk::NDFUniqConstIterator::operator++
NDFUniqConstIterator & operator++()
Definition: NDFUniqConstIterator.hpp:72
gnsstk::NDFUniqConstIterator::nuit
T::const_iterator nuit
non-unique iterator.
Definition: NDFUniqConstIterator.hpp:105
gnsstk::NDFUniqConstIterator::end
NDFUniqConstIterator end()
Definition: NDFUniqConstIterator.hpp:99
gnsstk::NDFUniqConstIterator
Definition: NDFUniqConstIterator.hpp:60


gnsstk
Author(s):
autogenerated on Wed Oct 25 2023 02:40:40