Commit e24f60db authored by Tiago Peixoto's avatar Tiago Peixoto
Browse files

Fix a performance issue with filtered graphs

This avoids unnecessary copying of the filter property map, which
although being O(1), does end up consuming a measurable time.
parent 00a0e7ef
...@@ -141,24 +141,23 @@ class MaskFilter ...@@ -141,24 +141,23 @@ class MaskFilter
public: public:
typedef typename boost::property_traits<DescriptorProperty>::value_type value_t; typedef typename boost::property_traits<DescriptorProperty>::value_type value_t;
MaskFilter(){} MaskFilter(){}
MaskFilter(DescriptorProperty filtered_property, bool invert) MaskFilter(const DescriptorProperty& filtered_property, bool invert)
: _filtered_property(filtered_property), _invert(invert) {} : _filtered_property(&filtered_property), _invert(invert) {}
template <class Descriptor> template <class Descriptor>
__attribute__((always_inline)) inline bool operator() (Descriptor&& d) const __attribute__((always_inline)) inline bool operator() (Descriptor&& d) const
{ {
// ignore if masked // ignore if masked
return get(_filtered_property, std::forward<Descriptor>(d)) ^ _invert; return get(*_filtered_property, std::forward<Descriptor>(d)) ^ _invert;
// TODO: This is a critical section. It will be called for every vertex // This is a critical section. It will be called for every vertex
// or edge in the graph, every time they're iterated // or edge in the graph, every time they're iterated
// through. Therefore, it must be guaranteed this is as optimized // through.
// as possible.
} }
private: private:
DescriptorProperty _filtered_property; const DescriptorProperty* _filtered_property;
bool _invert; bool _invert;
}; };
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment