Skip to content
Snippets Groups Projects
Commit 9054008a 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.
parent cf09d359
No related branches found
No related tags found
1 merge request!20779WIP: Migrate DataQualityTools to ToolHandles
...@@ -56,7 +56,7 @@ namespace Monitored { ...@@ -56,7 +56,7 @@ namespace Monitored {
*/ */
template<class T> template<class T>
MonitoredObjectsCollection<T> declare(std::string name, const T& collection, 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, return MonitoredObjectsCollection<T>(std::move(name), collection,
std::move(converterToDouble)); std::move(converterToDouble));
} }
...@@ -72,6 +72,15 @@ namespace Monitored { ...@@ -72,6 +72,15 @@ namespace Monitored {
struct get_value_type<T[N]> { struct get_value_type<T[N]> {
typedef T value_type; 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 { ...@@ -117,13 +126,14 @@ namespace Monitored {
public: public:
/// Type of the collection elements /// Type of the collection elements
using value_type = typename detail::get_value_type<T>::value_type; 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 /// @brief . \if empty doc string required due to doxygen bug 787131 \endif
// With a non-template friend declaration, clang 4.0.1 // With a non-template friend declaration, clang 4.0.1
// fails to match the friend. // fails to match the friend.
template <class U> template <class U>
friend MonitoredObjectsCollection<U> declare(std::string name, const U& collection, 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; MonitoredObjectsCollection(MonitoredObjectsCollection&&) = default;
...@@ -140,10 +150,10 @@ namespace Monitored { ...@@ -140,10 +150,10 @@ namespace Monitored {
} }
private: private:
const T& m_collection; 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, 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)), : IMonitoredVariable(std::move(name)),
m_collection(collection), m_collection(collection),
m_converterToDouble(std::move(converterToDouble)) { } 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