mirror of https://github.com/CGAL/cgal
Add a property map with bool as value_type based on a set-like container
This commit is contained in:
parent
a093cd5e9f
commit
7ef29476ab
|
|
@ -456,8 +456,52 @@ struct Default_property_map{
|
||||||
get (const Default_property_map&, const key_type&){ return ValueType(); }
|
get (const Default_property_map&, const key_type&){ return ValueType(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// Read-write Property map turning a set (such a `std::set`,
|
||||||
|
/// `boost::unordered_set`, `std::unordered_set`) into a property map
|
||||||
|
/// associating a Boolean to the value type of the set. The function `get` will
|
||||||
|
/// return `true` if the key is inside the set and `false` otherwise. The `put`
|
||||||
|
/// function will insert an element in the set if `true` is passed and erase it
|
||||||
|
/// otherwise.
|
||||||
|
///
|
||||||
|
/// `operator()(key k)` calling the get function with `k`
|
||||||
|
template<class Set>
|
||||||
|
struct Boolean_property_map
|
||||||
|
{
|
||||||
|
typedef typename Set::value_type key_type;
|
||||||
|
typedef bool value_type;
|
||||||
|
typedef bool reference;
|
||||||
|
typedef boost::read_write_property_map_tag category;
|
||||||
|
|
||||||
/// \endcond
|
Set* set_ptr;
|
||||||
|
/// Constructor taking a copy of the set. Note that `set_` must be valid
|
||||||
|
/// while the property map is in use.
|
||||||
|
Boolean_property_map() : set_ptr(NULL) {}
|
||||||
|
Boolean_property_map(Set& set_) : set_ptr(&set_) {}
|
||||||
|
|
||||||
|
friend bool get(const Boolean_property_map<Set>& pm, const key_type& k)
|
||||||
|
{
|
||||||
|
CGAL_assertion(pm.set_ptr!=NULL);
|
||||||
|
return pm.set_ptr->count(k) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
friend void put(Boolean_property_map<Set>& pm, const key_type& k, bool v)
|
||||||
|
{
|
||||||
|
CGAL_assertion(pm.set_ptr!=NULL);
|
||||||
|
if (v)
|
||||||
|
pm.set_ptr->insert(k);
|
||||||
|
else
|
||||||
|
pm.set_ptr->erase(k);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/// \ingroup PkgProperty_map
|
||||||
|
/// returns `Boolean_property_map<Set>(set_)`
|
||||||
|
template <class Set>
|
||||||
|
Boolean_property_map<Set>
|
||||||
|
make_boolean_property_map(Set& set_)
|
||||||
|
{
|
||||||
|
return Boolean_property_map<Set>(set_);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace CGAL
|
} // namespace CGAL
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue