From 650fd6766b60c29fc3f70fcdf5e6505f0180f083 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sat, 8 Feb 2014 21:14:42 +0100 Subject: [PATCH] SceneGraph: use std::reference_wrapper in FeatureGroup internals. --- src/Magnum/SceneGraph/FeatureGroup.h | 8 ++++---- src/Magnum/SceneGraph/FeatureGroup.hpp | 5 +++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Magnum/SceneGraph/FeatureGroup.h b/src/Magnum/SceneGraph/FeatureGroup.h index 1670d06b2..46982149c 100644 --- a/src/Magnum/SceneGraph/FeatureGroup.h +++ b/src/Magnum/SceneGraph/FeatureGroup.h @@ -51,7 +51,7 @@ template class AbstractFeatureGroup { void add(AbstractFeature& feature); void remove(AbstractFeature& feature); - std::vector*> features; + std::vector>> features; }; /** @@ -86,12 +86,12 @@ template class FeatureGroup: pub /** @brief Feature at given index */ Feature& operator[](std::size_t index) { - return *static_cast(AbstractFeatureGroup::features[index]); + return static_cast(AbstractFeatureGroup::features[index].get()); } /** @overload */ const Feature& operator[](std::size_t index) const { - return *static_cast(AbstractFeatureGroup::features[index]); + return static_cast(AbstractFeatureGroup::features[index].get()); } /** @@ -160,7 +160,7 @@ template using FeatureGroup3D = BasicFeatureGroup3D FeatureGroup::~FeatureGroup() { - for(auto i: AbstractFeatureGroup::features) static_cast(i)->_group = nullptr; + for(auto i: AbstractFeatureGroup::features) static_cast(i.get())._group = nullptr; } template FeatureGroup& FeatureGroup::add(Feature& feature) { diff --git a/src/Magnum/SceneGraph/FeatureGroup.hpp b/src/Magnum/SceneGraph/FeatureGroup.hpp index 2b61092c7..9ad9f3dc7 100644 --- a/src/Magnum/SceneGraph/FeatureGroup.hpp +++ b/src/Magnum/SceneGraph/FeatureGroup.hpp @@ -39,11 +39,12 @@ template AbstractFeatureGroup::A template AbstractFeatureGroup::~AbstractFeatureGroup() = default; template void AbstractFeatureGroup::add(AbstractFeature& feature) { - features.push_back(&feature); + features.push_back(feature); } template void AbstractFeatureGroup::remove(AbstractFeature& feature) { - features.erase(std::find(features.begin(), features.end(), &feature)); + features.erase(std::find_if(features.begin(), features.end(), + [&feature](AbstractFeature& f) { return &f == &feature; })); } }}