summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDimitri van Heesch <doxygen@gmail.com>2021-01-06 18:13:41 (GMT)
committerDimitri van Heesch <doxygen@gmail.com>2021-01-22 20:45:18 (GMT)
commit2370f5fed43d8a163f42ff60a7d2aeea5512b0d7 (patch)
tree01e7f6510cea25d0e40b345f1def0ea36f4fee59 /src
parent9ae55baa95f886d9abde07bb6d5ac425b1efb566 (diff)
downloadDoxygen-2370f5fed43d8a163f42ff60a7d2aeea5512b0d7.zip
Doxygen-2370f5fed43d8a163f42ff60a7d2aeea5512b0d7.tar.gz
Doxygen-2370f5fed43d8a163f42ff60a7d2aeea5512b0d7.tar.bz2
Refactoring: modernized usedNames variable used for SHORT_NAMES option
Diffstat (limited to 'src')
-rw-r--r--src/util.cpp21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/util.cpp b/src/util.cpp
index 7a0b03e..5494666 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -3699,6 +3699,10 @@ QCString unescapeCharsInString(const char *s)
return result;
}
+static std::unordered_map<std::string,int> g_usedNames;
+static std::mutex g_usedNamesMutex;
+static int g_usedNamesCount=1;
+
/*! This function determines the file name on disk of an item
* given its name, which could be a class name with template
* arguments, so special characters need to be escaped.
@@ -3711,20 +3715,17 @@ QCString convertNameToFile(const char *name,bool allowDots,bool allowUnderscore)
QCString result;
if (shortNames) // use short names only
{
- static QDict<int> usedNames(10007);
- usedNames.setAutoDelete(TRUE);
- static int count=1;
-
- int *value=usedNames.find(name);
- int num;
- if (value==0)
+ std::unique_lock<std::mutex> lock(g_usedNamesMutex);
+ auto kv = g_usedNames.find(name);
+ uint num=0;
+ if (kv!=g_usedNames.end())
{
- usedNames.insert(name,new int(count));
- num = count++;
+ num = kv->second;
}
else
{
- num = *value;
+ num = g_usedNamesCount;
+ g_usedNames.insert(std::make_pair(name,g_usedNamesCount++));
}
result.sprintf("a%05d",num);
}