FastSet.h
Go to the documentation of this file.
1 /* ----------------------------------------------------------------------------
2 
3  * GTSAM Copyright 2010, Georgia Tech Research Corporation,
4  * Atlanta, Georgia 30332-0415
5  * All Rights Reserved
6  * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
7 
8  * See LICENSE for the license information
9 
10  * -------------------------------------------------------------------------- */
11 
19 #pragma once
20 
21 #include <boost/serialization/nvp.hpp>
22 #include <boost/serialization/set.hpp>
24 #include <gtsam/base/Testable.h>
25 
26 #include <functional>
27 #include <set>
28 
29 namespace boost {
30 namespace serialization {
31 class access;
32 } /* namespace serialization */
33 } /* namespace boost */
34 
35 namespace gtsam {
36 
44 template<typename VALUE>
45 class FastSet: public std::set<VALUE, std::less<VALUE>,
46  typename internal::FastDefaultAllocator<VALUE>::type> {
47 
49 
50 public:
51 
52  typedef std::set<VALUE, std::less<VALUE>,
54 
56  FastSet() {
57  }
58 
60  template<typename INPUTITERATOR>
61  explicit FastSet(INPUTITERATOR first, INPUTITERATOR last) :
62  Base(first, last) {
63  }
64 
66  template<typename INPUTCONTAINER>
67  explicit FastSet(const INPUTCONTAINER& container) :
68  Base(container.begin(), container.end()) {
69  }
70 
73  Base(x) {
74  }
75 
77  FastSet(const Base& x) :
78  Base(x) {
79  }
80 
81 #ifdef GTSAM_ALLOCATOR_BOOSTPOOL
82 
83  FastSet(const std::set<VALUE>& x) {
84  // This if statement works around a bug in boost pool allocator and/or
85  // STL vector where if the size is zero, the pool allocator will allocate
86  // huge amounts of memory.
87  if(x.size() > 0)
88  Base::insert(x.begin(), x.end());
89  }
90 #endif
91 
93  operator std::set<VALUE>() const {
94  return std::set<VALUE>(this->begin(), this->end());
95  }
96 
98  bool exists(const VALUE& e) const {
99  return this->find(e) != this->end();
100  }
101 
103  void print(const std::string& str = "") const {
104  for (typename Base::const_iterator it = this->begin(); it != this->end(); ++it)
106  }
107 
109  bool equals(const FastSet<VALUE>& other, double tol = 1e-9) const {
110  typename Base::const_iterator it1 = this->begin(), it2 = other.begin();
111  while (it1 != this->end()) {
112  if (it2 == other.end() || !traits<VALUE>::Equals(*it2, *it2, tol))
113  return false;
114  ++it1;
115  ++it2;
116  }
117  return true;
118  }
119 
121  void merge(const FastSet& other) {
122  Base::insert(other.begin(), other.end());
123  }
124 
125 private:
127  friend class boost::serialization::access;
128  template<class ARCHIVE>
129  void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
130  ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
131  }
132 };
133 
134 }
constexpr int last(int, int result)
void print(const std::string &str="") const
Definition: FastSet.h:103
A insert(1, 2)=0
Concept check for values that can be used in unit tests.
FastSet(const Base &x)
Definition: FastSet.h:77
BOOST_CONCEPT_ASSERT((boost::RandomAccessRangeConcept< ListOfOneContainer< int > >))
void merge(const FastSet &other)
Definition: FastSet.h:121
bool exists(const VALUE &e) const
Definition: FastSet.h:98
boost::fast_pool_allocator< T > type
FastSet(INPUTITERATOR first, INPUTITERATOR last)
Definition: FastSet.h:61
constexpr int first(int i)
Implementation details for constexpr functions.
Definition: pytypes.h:928
void serialize(ARCHIVE &ar, const unsigned int)
Definition: FastSet.h:129
Array< double, 1, 3 > e(1./3., 0.5, 2.)
bool equals(const FastSet< VALUE > &other, double tol=1e-9) const
Definition: FastSet.h:109
void set(Container &c, Position position, const Value &value)
FastSet(const INPUTCONTAINER &container)
Definition: FastSet.h:67
traits
Definition: chartTesting.h:28
std::set< VALUE, std::less< VALUE >, typename internal::FastDefaultAllocator< VALUE >::type > Base
Definition: FastSet.h:53
const G double tol
Definition: Group.h:83
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x
An easy way to control which allocator is used for Fast* collections.
FastSet(const FastSet< VALUE > &x)
Definition: FastSet.h:72


gtsam
Author(s):
autogenerated on Sat May 8 2021 02:42:04