|
|
|
|
@ -51,7 +51,7 @@ template<UnsignedInt dimensions, class T> class AbstractFeatureGroup {
|
|
|
|
|
void add(AbstractFeature<dimensions, T>& feature); |
|
|
|
|
void remove(AbstractFeature<dimensions, T>& feature); |
|
|
|
|
|
|
|
|
|
std::vector<std::reference_wrapper<AbstractFeature<dimensions, T>>> features; |
|
|
|
|
std::vector<std::reference_wrapper<AbstractFeature<dimensions, T>>> _features; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@ -76,22 +76,22 @@ template<UnsignedInt dimensions, class Feature, class T> class FeatureGroup: pub
|
|
|
|
|
|
|
|
|
|
/** @brief Whether the group is empty */ |
|
|
|
|
bool isEmpty() const { |
|
|
|
|
return AbstractFeatureGroup<dimensions, T>::features.empty(); |
|
|
|
|
return AbstractFeatureGroup<dimensions, T>::_features.empty(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** @brief Count of features in the group */ |
|
|
|
|
std::size_t size() const { |
|
|
|
|
return AbstractFeatureGroup<dimensions, T>::features.size(); |
|
|
|
|
return AbstractFeatureGroup<dimensions, T>::_features.size(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** @brief Feature at given index */ |
|
|
|
|
Feature& operator[](std::size_t index) { |
|
|
|
|
return static_cast<Feature&>(AbstractFeatureGroup<dimensions, T>::features[index].get()); |
|
|
|
|
return static_cast<Feature&>(AbstractFeatureGroup<dimensions, T>::_features[index].get()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** @overload */ |
|
|
|
|
const Feature& operator[](std::size_t index) const { |
|
|
|
|
return static_cast<Feature&>(AbstractFeatureGroup<dimensions, T>::features[index].get()); |
|
|
|
|
return static_cast<Feature&>(AbstractFeatureGroup<dimensions, T>::_features[index].get()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@ -158,7 +158,7 @@ template<class Feature> using FeatureGroup3D = BasicFeatureGroup3D<Feature, Floa
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
template<UnsignedInt dimensions, class Feature, class T> FeatureGroup<dimensions, Feature, T>::~FeatureGroup() { |
|
|
|
|
for(auto i: AbstractFeatureGroup<dimensions, T>::features) static_cast<Feature&>(i.get())._group = nullptr; |
|
|
|
|
for(auto i: AbstractFeatureGroup<dimensions, T>::_features) static_cast<Feature&>(i.get())._group = nullptr; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template<UnsignedInt dimensions, class Feature, class T> FeatureGroup<dimensions, Feature, T>& FeatureGroup<dimensions, Feature, T>::add(Feature& feature) { |
|
|
|
|
|