18 #include <tbb/spin_mutex.h>
21 #include <unordered_set>
24 namespace MAKVRinTerra
27 #ifdef DtObjectDebugger_Enable
32 typedef std::unordered_set<DtFeatureGeometry::Hash>
HashSet;
36 Mutex::scoped_lock lock(myMutex);
37 return myHashSet.find(g.
hash()) != myHashSet.end();
42 return insert(g.
hash());
47 HashSet::iterator iter;
50 Mutex::scoped_lock lock(myMutex);
51 boost::tie(iter, inserted) = myHashSet.insert(h);
79 boost::optional<std::string> attr = feature.template attributeAs<std::string>(
"MAK_FID");
89 return !
insert(feature.geometry());
94 if (!const_cast<DtFeatureDuplicateRemover*>(
this)->
isDuplicate(feature))
108 template <
typename F>
110 #ifdef DtObjectDebugger_Enable
117 typedef std::shared_ptr<DtFeatureDuplicateRemover<F> >
BasePtr;
131 (*myRemover)(feature);
149 template <
typename FS>
151 :
public FS::ScopedWrapper
152 #ifdef DtObjectDebugger_Enable
157 typedef typename FS::ScopedWrapper
Parent;
169 Parent::forEachFeatureParallel(std::ref(dedupe));
178 return Parent::forEachFeatureAsync(func);
183 const boost::optional<DtFeatureGeometry>& geom,
186 std::unique_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:58
FS::Feature Feature
Definition: geometryDuplicateRemover.h:158
FS::DetachCallback forEachFeatureAsync(const ForEachFunction &func) const
Definition: geometryDuplicateRemover.h:172
void call(ForEachFunction func, const F &feature)
Definition: geometryDuplicateRemover.h:98
FS::ScopedWrapper Parent
Definition: geometryDuplicateRemover.h:157
bool insert(const DtFeatureGeometry &g)
Definition: geometryDuplicateRemover.h:40
#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:161
ForEachFunction myFunc
Definition: geometryDuplicateRemover.h:105
DtFeatureDuplicateRemover(const ForEachFunction &func)
Definition: geometryDuplicateRemover.h:71
bool isDuplicate(const F &feature)
Definition: geometryDuplicateRemover.h:77
DtDeduplicatingFeatureSet(const DtDeduplicatingFeatureSet &fs)
Definition: geometryDuplicateRemover.h:199
DtFeatureDuplicateRemover()
Definition: geometryDuplicateRemover.h:69
boost::function< void(const F &)> ForEachFunction
Definition: geometryDuplicateRemover.h:67
void operator()(const F &feature) const
Definition: geometryDuplicateRemover.h:129
std::unordered_set< DtFeatureGeometry::Hash > HashSet
Definition: geometryDuplicateRemover.h:32
bool isDuplicate(const F &feature)
Definition: geometryDuplicateRemover.h:124
Represents a set of characeters a DtFeature object can have. DtQuery objects are the way to communica...
Definition: query.h:37
std::shared_ptr< DtFeatureDuplicateRemover< F > > BasePtr
Definition: geometryDuplicateRemover.h:117
DtSharedFeatureDuplicateRemover(const ForEachFunction &func)
Definition: geometryDuplicateRemover.h:119
Definition: geometryDuplicateRemover.h:150
HashSet myHashSet
Definition: geometryDuplicateRemover.h:60
#define DT_DEFINE_OBJECT_DEBUGGER_NAME_TEMPLATE(type)
Definition: objectCounter.h:32
FS::ForEachFunction ForEachFunction
Definition: geometryDuplicateRemover.h:159
Definition: geometryDuplicateRemover.h:109
FS * filter(const DtQuery &query, const boost::optional< DtFeatureGeometry > &geom, DtLoadType load) const
Definition: geometryDuplicateRemover.h:181
DtLoadType
Used to indicate whether to load features. See DtFeatureSetTemplate::filter.
Definition: featureSet.h:33
void call(ForEachFunction func, const F &feature) const
Definition: geometryDuplicateRemover.h:134
DtSharedFeatureDuplicateRemover(const BasePtr &r)
Definition: geometryDuplicateRemover.h:139
tbb::spin_mutex Mutex
Definition: geometryDuplicateRemover.h:57
BasePtr myRemover
Definition: geometryDuplicateRemover.h:146
void forEachFeatureParallel(const ForEachFunction &func) const
Definition: geometryDuplicateRemover.h:166
bool has(const DtFeatureGeometry &g) const
Definition: geometryDuplicateRemover.h:34
bool insert(const std::string &h)
Definition: geometryDuplicateRemover.h:45
Definition: geometryDuplicateRemover.h:64
void operator()(const F &feature) const
Definition: geometryDuplicateRemover.h:92
DtDeduplicatingFeatureSet * clone() const
Definition: geometryDuplicateRemover.h:193
boost::function< void(const F &)> ForEachFunction
Definition: geometryDuplicateRemover.h:115
Definition: geometryDuplicateRemover.h:26
Represents a feature geometry.
Definition: featureGeometry.h:40
Hash hash() const
Get hash which uniquely identifies this geometry, caches result.