Skip to content
Snippets Groups Projects
Commit 2adb6795 authored by Scott Snyder's avatar Scott Snyder Committed by scott snyder
Browse files

AthenaMonitoring: const fix.

DataVector<T>::value_type is T*.
But we need the converter functions to take  a const T*.
Update to add this const qualifier.



Former-commit-id: 9054008a
parent 6efaab8b
No related merge requests found
......@@ -56,7 +56,7 @@ namespace Monitored {
*/
template<class T>
MonitoredObjectsCollection<T> declare(std::string name, const T& collection,
std::function<double(const typename MonitoredObjectsCollection<T>::value_type&)> converterToDouble) {
std::function<double(const typename MonitoredObjectsCollection<T>::const_value_type&)> converterToDouble) {
return MonitoredObjectsCollection<T>(std::move(name), collection,
std::move(converterToDouble));
}
......@@ -72,6 +72,15 @@ namespace Monitored {
struct get_value_type<T[N]> {
typedef T value_type;
};
template <typename T>
struct make_pointer_const {
typedef T type;
};
template <typename T>
struct make_pointer_const<T*> {
typedef const T* type;
};
}
......@@ -117,13 +126,14 @@ namespace Monitored {
public:
/// Type of the collection elements
using value_type = typename detail::get_value_type<T>::value_type;
using const_value_type = typename detail::make_pointer_const<value_type>::type;
/// @brief . \if empty doc string required due to doxygen bug 787131 \endif
// With a non-template friend declaration, clang 4.0.1
// fails to match the friend.
template <class U>
friend MonitoredObjectsCollection<U> declare(std::string name, const U& collection,
std::function<double(const typename MonitoredObjectsCollection<U>::value_type&)> converterToDouble);
std::function<double(const typename MonitoredObjectsCollection<U>::const_value_type&)> converterToDouble);
MonitoredObjectsCollection(MonitoredObjectsCollection&&) = default;
......@@ -140,10 +150,10 @@ namespace Monitored {
}
private:
const T& m_collection;
std::function<double(const value_type&)> m_converterToDouble;
std::function<double(const const_value_type&)> m_converterToDouble;
MonitoredObjectsCollection(std::string name, const T& collection,
std::function<double(const value_type&)> converterToDouble)
std::function<double(const const_value_type&)> converterToDouble)
: IMonitoredVariable(std::move(name)),
m_collection(collection),
m_converterToDouble(std::move(converterToDouble)) { }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment