ConcurrentMap.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 <gtsam/global_includes.h>
22 
23 // Change class depending on whether we are using TBB
24 #ifdef GTSAM_USE_TBB
25 
26 // Include TBB header
27 # include <tbb/concurrent_unordered_map.h>
28 # undef min // TBB seems to include Windows.h which defines these macros that cause problems
29 # undef max
30 # undef ERROR
31 
32 #include <functional> // std::hash()
33 
34 // Use TBB concurrent_unordered_map for ConcurrentMap
35 template <typename KEY, typename VALUE>
36 using ConcurrentMapBase = tbb::concurrent_unordered_map<
37  KEY,
38  VALUE,
39  std::hash<KEY>
40  >;
41 
42 #else
43 
44 // If we're not using TBB, use a FastMap for ConcurrentMap
45 #include <gtsam/base/FastMap.h>
46 template <typename KEY, typename VALUE>
48 
49 #endif
50 
51 #ifdef GTSAM_ENABLE_BOOST_SERIALIZATION
52 #include <boost/serialization/nvp.hpp>
53 #include <boost/serialization/split_member.hpp>
54 #endif
55 
56 #include <gtsam/base/FastVector.h>
57 
58 namespace gtsam {
59 
68 template<typename KEY, typename VALUE>
69 class ConcurrentMap : public ConcurrentMapBase<KEY,VALUE> {
70 
71 public:
72 
74 
77 
79  template<typename INPUTITERATOR>
80  ConcurrentMap(INPUTITERATOR first, INPUTITERATOR last) : Base(first, last) {}
81 
84 
86  ConcurrentMap(const Base& x) : Base(x) {}
87 
89  bool exists(const KEY& e) const { return this->count(e); }
90 
91 #ifndef GTSAM_USE_TBB
92  // If we're not using TBB and this is actually a FastMap, we need to add these functions and hide
93  // the original erase functions.
94  void unsafe_erase(typename Base::iterator position) { ((Base*)this)->erase(position); }
95  typename Base::size_type unsafe_erase(const KEY& k) { return ((Base*)this)->erase(k); }
96  void unsafe_erase(typename Base::iterator first, typename Base::iterator last) {
97  return ((Base*)this)->erase(first, last); }
98 private:
99  void erase() {}
100 public:
101 #endif
102 
103 private:
104 #ifdef GTSAM_ENABLE_BOOST_SERIALIZATION
105 
106  friend class boost::serialization::access;
107  template<class Archive>
108  void save(Archive& ar, const unsigned int /*version*/) const
109  {
110  // Copy to an STL container and serialize that
111  FastVector<std::pair<KEY, VALUE> > map(this->size());
112  std::copy(this->begin(), this->end(), map.begin());
113  ar & BOOST_SERIALIZATION_NVP(map);
114  }
115  template<class Archive>
116  void load(Archive& ar, const unsigned int /*version*/)
117  {
118  this->clear();
119  // Load into STL container and then fill our map
121  ar & BOOST_SERIALIZATION_NVP(map);
122  this->insert(map.begin(), map.end());
123  }
124  BOOST_SERIALIZATION_SPLIT_MEMBER()
125 #endif
126 };
127 
128 }
A insert(1, 2)=0
void save(const Matrix &A, const string &s, const string &filename)
Definition: Matrix.cpp:166
void unsafe_erase(typename Base::iterator first, typename Base::iterator last)
Definition: ConcurrentMap.h:96
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
Definition: FastVector.h:34
ConcurrentMap(const ConcurrentMap< KEY, VALUE > &x)
Definition: ConcurrentMap.h:83
bool exists(const KEY &e) const
Definition: ConcurrentMap.h:89
ConcurrentMap(const Base &x)
Definition: ConcurrentMap.h:86
static const symbolic::SymbolExpr< internal::symbolic_last_tag > last
Included from all GTSAM files.
ConcurrentMap(INPUTITERATOR first, INPUTITERATOR last)
Definition: ConcurrentMap.h:80
Scalar Scalar int size
Definition: benchVecAdd.cpp:17
Array< double, 1, 3 > e(1./3., 0.5, 2.)
A thin wrapper around std::vector that uses a custom allocator.
traits
Definition: chartTesting.h:28
A thin wrapper around std::map that uses boost&#39;s fast_pool_allocator.
void unsafe_erase(typename Base::iterator position)
Definition: ConcurrentMap.h:94
Base::size_type unsafe_erase(const KEY &k)
Definition: ConcurrentMap.h:95
Point3_ position(const NavState_ &X)
static EIGEN_DEPRECATED const end_t end
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
ConcurrentMapBase< KEY, VALUE > Base
Definition: ConcurrentMap.h:73


gtsam
Author(s):
autogenerated on Tue Jul 4 2023 02:34:03