PropertyManager: Add C++11 range-based set_range() version.
This commit is contained in:
@@ -353,6 +353,14 @@ class PropertyManager {
|
||||
(*this)[*begin] = value;
|
||||
}
|
||||
|
||||
#if (defined(_MSC_VER) && (_MSC_VER >= 1900)) || __cplusplus > 199711L || defined(__GXX_EXPERIMENTAL_CXX0X__)
|
||||
template<typename HandleTypeIteratorRange, typename PROP_VALUE>
|
||||
void set_range(HandleTypeIteratorRange &range,
|
||||
const PROP_VALUE &value) {
|
||||
set_range(range.begin(), range.end(), value);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Conveniently transfer the values managed by one property manager
|
||||
* onto the values managed by a different property manager.
|
||||
|
||||
@@ -60,6 +60,7 @@ TEST_F(OpenMeshPropertyManager, set_range_bool) {
|
||||
face_vhandles.push_back(vhandle[3]);
|
||||
mesh_.add_face(face_vhandles);
|
||||
|
||||
{
|
||||
OpenMesh::PropertyManager<
|
||||
OpenMesh::VPropHandleT<bool>, Mesh> pm_v_bool(mesh_, "pm_v_bool");
|
||||
pm_v_bool.set_range(mesh_.vertices_begin(), mesh_.vertices_end(), false);
|
||||
@@ -92,6 +93,45 @@ TEST_F(OpenMeshPropertyManager, set_range_bool) {
|
||||
ASSERT_TRUE(pm_f_bool[*f_it]);
|
||||
}
|
||||
|
||||
#if (defined(_MSC_VER) && (_MSC_VER >= 1900)) || __cplusplus > 199711L || defined(__GXX_EXPERIMENTAL_CXX0X__)
|
||||
/*
|
||||
* Same thing again, this time with C++11 ranges.
|
||||
*/
|
||||
{
|
||||
OpenMesh::PropertyManager<
|
||||
OpenMesh::VPropHandleT<bool>, Mesh> pm_v_bool(mesh_, "pm_v_bool2");
|
||||
pm_v_bool.set_range(mesh_.vertices(), false);
|
||||
for (int i = 0; i < 4; ++i)
|
||||
ASSERT_FALSE(pm_v_bool[vhandle[i]]);
|
||||
pm_v_bool.set_range(mesh_.vertices(), true);
|
||||
for (int i = 0; i < 4; ++i)
|
||||
ASSERT_TRUE(pm_v_bool[vhandle[i]]);
|
||||
|
||||
OpenMesh::PropertyManager<
|
||||
OpenMesh::EPropHandleT<bool>, Mesh> pm_e_bool(mesh_, "pm_e_bool2");
|
||||
pm_e_bool.set_range(mesh_.edges(), false);
|
||||
for (Mesh::EdgeIter e_it = mesh_.edges_begin(), f_end = mesh_.edges_end();
|
||||
e_it != f_end; ++e_it)
|
||||
ASSERT_FALSE(pm_e_bool[*e_it]);
|
||||
pm_e_bool.set_range(mesh_.edges(), true);
|
||||
for (Mesh::EdgeIter e_it = mesh_.edges_begin(), f_end = mesh_.edges_end();
|
||||
e_it != f_end; ++e_it)
|
||||
ASSERT_TRUE(pm_e_bool[*e_it]);
|
||||
|
||||
OpenMesh::PropertyManager<
|
||||
OpenMesh::FPropHandleT<bool>, Mesh> pm_f_bool(mesh_, "pm_f_bool2");
|
||||
pm_f_bool.set_range(mesh_.faces(), false);
|
||||
for (Mesh::FaceIter f_it = mesh_.faces_begin(), f_end = mesh_.faces_end();
|
||||
f_it != f_end; ++f_it)
|
||||
ASSERT_FALSE(pm_f_bool[*f_it]);
|
||||
pm_f_bool.set_range(mesh_.faces(), true);
|
||||
for (Mesh::FaceIter f_it = mesh_.faces_begin(), f_end = mesh_.faces_end();
|
||||
f_it != f_end; ++f_it)
|
||||
ASSERT_TRUE(pm_f_bool[*f_it]);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* ====================================================================
|
||||
* C++11 Specific Tests
|
||||
|
||||
Reference in New Issue
Block a user