12 #include <boost/unordered/unordered_set.hpp>
13 #include <boost/tuple/tuple.hpp>
15 #include <tbb/spin_mutex.h>
22 namespace MAKVRinTerra
25 #ifdef DtObjectDebugger_Enable
30 typedef boost::unordered_set<DtFeatureGeometry::Hash>
HashSet;
34 Mutex::scoped_lock lock(myMutex);
35 return myHashSet.find(g.
hash()) != myHashSet.end();
40 return insert(g.
hash());
45 HashSet::iterator iter;
48 Mutex::scoped_lock lock(myMutex);
49 boost::tie(iter, inserted) = myHashSet.insert(h);
77 boost::optional<std::string> attr = feature.template attributeAs<std::string>(
"MAK_FID");
87 return !
insert(feature.geometry());
92 if (!const_cast<DtFeatureDuplicateRemover*>(
this)->
isDuplicate(feature))
106 template <
typename F>
108 #ifdef DtObjectDebugger_Enable
115 typedef boost::shared_ptr<DtFeatureDuplicateRemover<F> >
BasePtr;
129 (*myRemover)(feature);
147 template <
typename FS>
149 :
public FS::ScopedWrapper
150 #ifdef DtObjectDebugger_Enable
155 typedef typename FS::ScopedWrapper
Parent;
167 Parent::forEachFeatureParallel(std::ref(dedupe));
176 return Parent::forEachFeatureAsync(func);
181 const boost::optional<DtFeatureGeometry>& geom,
184 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:41
Mutex myMutex
Definition: geometryDuplicateRemover.h:56
FS::Feature Feature
Definition: geometryDuplicateRemover.h:156
FS::DetachCallback forEachFeatureAsync(const ForEachFunction &func) const
Definition: geometryDuplicateRemover.h:170
void call(ForEachFunction func, const F &feature)
Definition: geometryDuplicateRemover.h:96
FS::ScopedWrapper Parent
Definition: geometryDuplicateRemover.h:155
bool insert(const DtFeatureGeometry &g)
Definition: geometryDuplicateRemover.h:38
#define DT_DEFINE_OBJECT_DEBUGGER_NAME(type)
Definition: objectCounter.h:31
Default on in debug, off in release.
Definition: objectCounter.h:27
DtDeduplicatingFeatureSet(FS *fs)
Definition: geometryDuplicateRemover.h:159
ForEachFunction myFunc
Definition: geometryDuplicateRemover.h:103
DtFeatureDuplicateRemover(const ForEachFunction &func)
Definition: geometryDuplicateRemover.h:69
bool isDuplicate(const F &feature)
Definition: geometryDuplicateRemover.h:75
DtDeduplicatingFeatureSet(const DtDeduplicatingFeatureSet &fs)
Definition: geometryDuplicateRemover.h:197
DtFeatureDuplicateRemover()
Definition: geometryDuplicateRemover.h:67
boost::function< void(const F &)> ForEachFunction
Definition: geometryDuplicateRemover.h:65
void operator()(const F &feature) const
Definition: geometryDuplicateRemover.h:127
bool isDuplicate(const F &feature)
Definition: geometryDuplicateRemover.h:122
Represents a set of characeters a DtFeature object can have. DtQuery objects are the way to communica...
Definition: query.h:38
DtSharedFeatureDuplicateRemover(const ForEachFunction &func)
Definition: geometryDuplicateRemover.h:117
Definition: geometryDuplicateRemover.h:148
HashSet myHashSet
Definition: geometryDuplicateRemover.h:58
#define DT_DEFINE_OBJECT_DEBUGGER_NAME_TEMPLATE(type)
Definition: objectCounter.h:32
FS::ForEachFunction ForEachFunction
Definition: geometryDuplicateRemover.h:157
Definition: geometryDuplicateRemover.h:107
boost::shared_ptr< DtFeatureDuplicateRemover< F > > BasePtr
Definition: geometryDuplicateRemover.h:115
FS * filter(const DtQuery &query, const boost::optional< DtFeatureGeometry > &geom, DtLoadType load) const
Definition: geometryDuplicateRemover.h:179
boost::unordered_set< DtFeatureGeometry::Hash > HashSet
Definition: geometryDuplicateRemover.h:30
DtLoadType
Used to indicate whether to load features. See DtFeatureSetTemplate::filter.
Definition: featureSet.h:36
void call(ForEachFunction func, const F &feature) const
Definition: geometryDuplicateRemover.h:132
DtSharedFeatureDuplicateRemover(const BasePtr &r)
Definition: geometryDuplicateRemover.h:137
tbb::spin_mutex Mutex
Definition: geometryDuplicateRemover.h:55
BasePtr myRemover
Definition: geometryDuplicateRemover.h:144
void forEachFeatureParallel(const ForEachFunction &func) const
Definition: geometryDuplicateRemover.h:164
bool has(const DtFeatureGeometry &g) const
Definition: geometryDuplicateRemover.h:32
bool insert(const std::string &h)
Definition: geometryDuplicateRemover.h:43
Definition: geometryDuplicateRemover.h:62
void operator()(const F &feature) const
Definition: geometryDuplicateRemover.h:90
DtDeduplicatingFeatureSet * clone() const
Definition: geometryDuplicateRemover.h:191
boost::function< void(const F &)> ForEachFunction
Definition: geometryDuplicateRemover.h:113
Definition: geometryDuplicateRemover.h:24
Represents a feature geometry.
Definition: featureGeometry.h:39
Hash hash() const
Get hash which uniquely identifies this geometry, caches result.