From a9f2d7df40da19e1dbff0d68bf36f6369f3d0cab Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Thu, 2 Nov 2017 10:06:36 -0500 Subject: [PATCH] reftrack: remove inline operator[] Use of class static member 'zero' in an inline'd method is causing DLL confusion in dependent modules. --- src/misc/pv/reftrack.h | 7 +------ src/misc/reftrack.cpp | 9 ++++++++- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/misc/pv/reftrack.h b/src/misc/pv/reftrack.h index 8f694bc..5d65e84 100644 --- a/src/misc/pv/reftrack.h +++ b/src/misc/pv/reftrack.h @@ -67,7 +67,6 @@ public: }; private: - static const Count zero; typedef std::map cnt_map_t; cnt_map_t counts; public: @@ -80,11 +79,7 @@ public: */ void update(); - const Count& operator[](const std::string& name) const - { - cnt_map_t::const_iterator it(counts.find(name)); - return it==counts.end() ? zero : it->second; - } + const Count& operator[](const std::string& name) const; iterator begin() const { return counts.begin(); } iterator end() const { return counts.end(); } diff --git a/src/misc/reftrack.cpp b/src/misc/reftrack.cpp index b83b9a0..562b24b 100644 --- a/src/misc/reftrack.cpp +++ b/src/misc/reftrack.cpp @@ -94,7 +94,14 @@ size_t readRefCounter(const char *name) #endif } -const RefSnapshot::Count RefSnapshot::zero; +const RefSnapshot::Count& +RefSnapshot::operator[](const std::string& name) const +{ + static const Count zero; + + cnt_map_t::const_iterator it(counts.find(name)); + return it==counts.end() ? zero : it->second; +} void RefSnapshot::update() {