]> git.tdb.fi Git - libs/gl.git/commitdiff
Access the tag name map with a function
authorMikko Rasa <tdb@tdb.fi>
Sat, 2 Oct 2021 10:57:01 +0000 (13:57 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sat, 2 Oct 2021 10:58:06 +0000 (13:58 +0300)
Otherwise declaring tag constants as static members of classes is
unreliable because of the undefined initialization order of globals
in different translation units.

source/core/tag.cpp

index 44c7c8f86396837ebb73c9db0ca592a71dfbff56..56236c19554931c87794b7e02e1973437a715d19 100644 (file)
@@ -9,7 +9,11 @@ using namespace std;
 namespace {
 
 #ifdef DEBUG
-map<Msp::GL::Tag, string> tag_names;
+map<Msp::GL::Tag, string> &get_tag_names()
+{
+       static map<Msp::GL::Tag, string> names;
+       return names;
+}
 #endif
 
 }
@@ -22,7 +26,7 @@ Tag::Tag(const char *s):
 {
 #ifdef DEBUG
        if(s)
-               tag_names.insert(make_pair(*this, string(s)));
+               get_tag_names().insert(make_pair(*this, string(s)));
 #endif
 }
 
@@ -31,15 +35,16 @@ Tag::Tag(const string &s):
 {
 #ifdef DEBUG
        if(!s.empty())
-               tag_names.insert(make_pair(*this, s));
+               get_tag_names().insert(make_pair(*this, s));
 #endif
 }
 
 string Tag::str() const
 {
 #ifdef DEBUG
-       auto i=tag_names.find(*this);
-       if(i!=tag_names.end())
+       const auto &names = get_tag_names();
+       auto i = names.find(*this);
+       if(i!=names.end())
                return i->second;
 #endif
        return format("Tag(%d)", id);