12 #include <boost/unordered/unordered_set.hpp>
13 #include <boost/tuple/tuple.hpp>
15 #include <tbb/spin_mutex.h>
22 namespace MAKVRinTerra
28 typedef boost::unordered_set<DtFeatureGeometry::Hash>
HashSet;
32 Mutex::scoped_lock lock(myMutex);
33 return myHashSet.find(g.
hash()) != myHashSet.end();
38 return insert(g.
hash());
43 HashSet::iterator iter;
46 Mutex::scoped_lock lock(myMutex);
47 boost::tie(iter, inserted) = myHashSet.insert(h);
75 boost::optional<std::string> attr = feature.template attributeAs<std::string>(
"MAK_FID");
85 return !
insert(feature.geometry());
90 if (!const_cast<DtFeatureDuplicateRemover*>(
this)->
isDuplicate(feature))
104 template <
typename F>
111 typedef boost::shared_ptr<DtFeatureDuplicateRemover<F> >
BasePtr;
125 (*myRemover)(feature);
143 template <
typename FS>
145 :
public FS::ScopedWrapper
149 typedef typename FS::ScopedWrapper
Parent;
161 Parent::forEachFeatureParallel(std::ref(dedupe));
170 return Parent::forEachFeatureAsync(func);
175 const boost::optional<DtFeatureGeometry>& geom,
178 std::auto_ptr<FS> fs(Parent::filter(query, geom, load));
#define DT_DLL_features
stop complaining about multiple independent base classes for boost::noncopyable this should probably ...
Definition: featuresDefines.h:36
Mutex myMutex
Definition: geometryDuplicateRemover.h:54
FS::Feature Feature
Definition: geometryDuplicateRemover.h:150
FS::DetachCallback forEachFeatureAsync(const ForEachFunction &func) const
Definition: geometryDuplicateRemover.h:164
void call(ForEachFunction func, const F &feature)
Definition: geometryDuplicateRemover.h:94
FS::ScopedWrapper Parent
Definition: geometryDuplicateRemover.h:149
bool insert(const DtFeatureGeometry &g)
Definition: geometryDuplicateRemover.h:36
#define DT_DEFINE_OBJECT_DEBUGGER_NAME(type)
Definition: objectCounter.h:265
Default on in debug, off in release.
Definition: objectCounter.h:31
DtDeduplicatingFeatureSet(FS *fs)
Definition: geometryDuplicateRemover.h:153
ForEachFunction myFunc
Definition: geometryDuplicateRemover.h:101
DtFeatureDuplicateRemover(const ForEachFunction &func)
Definition: geometryDuplicateRemover.h:67
bool isDuplicate(const F &feature)
Definition: geometryDuplicateRemover.h:73
DtDeduplicatingFeatureSet(const DtDeduplicatingFeatureSet &fs)
Definition: geometryDuplicateRemover.h:191
DtFeatureDuplicateRemover()
Definition: geometryDuplicateRemover.h:65
boost::function< void(const F &)> ForEachFunction
Definition: geometryDuplicateRemover.h:63
void operator()(const F &feature) const
Definition: geometryDuplicateRemover.h:123
bool isDuplicate(const F &feature)
Definition: geometryDuplicateRemover.h:118
Represents a set of characeters a DtFeature object can have.
Definition: query.h:38
DtSharedFeatureDuplicateRemover(const ForEachFunction &func)
Definition: geometryDuplicateRemover.h:113
Definition: geometryDuplicateRemover.h:144
HashSet myHashSet
Definition: geometryDuplicateRemover.h:56
#define DT_DEFINE_OBJECT_DEBUGGER_NAME_TEMPLATE(type)
Definition: objectCounter.h:275
FS::ForEachFunction ForEachFunction
Definition: geometryDuplicateRemover.h:151
Definition: geometryDuplicateRemover.h:105
boost::shared_ptr< DtFeatureDuplicateRemover< F > > BasePtr
Definition: geometryDuplicateRemover.h:111
FS * filter(const DtQuery &query, const boost::optional< DtFeatureGeometry > &geom, DtLoadType load) const
Definition: geometryDuplicateRemover.h:173
boost::unordered_set< DtFeatureGeometry::Hash > HashSet
Definition: geometryDuplicateRemover.h:28
DtLoadType
Used to indicate whether to load features.
Definition: featureSet.h:36
void call(ForEachFunction func, const F &feature) const
Definition: geometryDuplicateRemover.h:128
DtSharedFeatureDuplicateRemover(const BasePtr &r)
Definition: geometryDuplicateRemover.h:133
tbb::spin_mutex Mutex
Definition: geometryDuplicateRemover.h:53
BasePtr myRemover
Definition: geometryDuplicateRemover.h:140
void forEachFeatureParallel(const ForEachFunction &func) const
Definition: geometryDuplicateRemover.h:158
bool has(const DtFeatureGeometry &g) const
Definition: geometryDuplicateRemover.h:30
bool insert(const std::string &h)
Definition: geometryDuplicateRemover.h:41
Definition: geometryDuplicateRemover.h:60
void operator()(const F &feature) const
Definition: geometryDuplicateRemover.h:88
DtDeduplicatingFeatureSet * clone() const
Definition: geometryDuplicateRemover.h:185
boost::function< void(const F &)> ForEachFunction
Definition: geometryDuplicateRemover.h:109
Definition: geometryDuplicateRemover.h:24
Represents a feature geometry.
Definition: featureGeometry.h:35
Hash hash() const
Get hash which uniquely identifies this geometry, caches result.