PropertyManager: Add C++11 range-based set_range() version.
This commit is contained in:
@@ -353,6 +353,14 @@ class PropertyManager {
|
|||||||
(*this)[*begin] = value;
|
(*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
|
* Conveniently transfer the values managed by one property manager
|
||||||
* onto the values managed by a different 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]);
|
face_vhandles.push_back(vhandle[3]);
|
||||||
mesh_.add_face(face_vhandles);
|
mesh_.add_face(face_vhandles);
|
||||||
|
|
||||||
|
{
|
||||||
OpenMesh::PropertyManager<
|
OpenMesh::PropertyManager<
|
||||||
OpenMesh::VPropHandleT<bool>, Mesh> pm_v_bool(mesh_, "pm_v_bool");
|
OpenMesh::VPropHandleT<bool>, Mesh> pm_v_bool(mesh_, "pm_v_bool");
|
||||||
pm_v_bool.set_range(mesh_.vertices_begin(), mesh_.vertices_end(), false);
|
pm_v_bool.set_range(mesh_.vertices_begin(), mesh_.vertices_end(), false);
|
||||||
@@ -90,6 +91,45 @@ TEST_F(OpenMeshPropertyManager, set_range_bool) {
|
|||||||
for (Mesh::FaceIter f_it = mesh_.faces_begin(), f_end = mesh_.faces_end();
|
for (Mesh::FaceIter f_it = mesh_.faces_begin(), f_end = mesh_.faces_end();
|
||||||
f_it != f_end; ++f_it)
|
f_it != f_end; ++f_it)
|
||||||
ASSERT_TRUE(pm_f_bool[*f_it]);
|
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
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user