summaryrefslogtreecommitdiffstats
path: root/source/core/slang-string-slice-index-map.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/core/slang-string-slice-index-map.cpp')
-rw-r--r--source/core/slang-string-slice-index-map.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/source/core/slang-string-slice-index-map.cpp b/source/core/slang-string-slice-index-map.cpp
new file mode 100644
index 000000000..d147556e4
--- /dev/null
+++ b/source/core/slang-string-slice-index-map.cpp
@@ -0,0 +1,44 @@
+#include "slang-string-slice-index-map.h"
+
+namespace Slang
+{
+
+// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! StringSliceIndexMap !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+StringSliceIndexMap::CountIndex StringSliceIndexMap::add(const UnownedStringSlice& key, Index valueIndex)
+{
+ StringSlicePool::Handle handle;
+ m_pool.findOrAdd(key, handle);
+ const CountIndex countIndex = StringSlicePool::asIndex(handle);
+ if (countIndex >= m_indexMap.getCount())
+ {
+ SLANG_ASSERT(countIndex == m_indexMap.getCount());
+ m_indexMap.add(valueIndex);
+ }
+ else
+ {
+ m_indexMap[countIndex] = valueIndex;
+ }
+ return countIndex;
+}
+
+StringSliceIndexMap::CountIndex StringSliceIndexMap::findOrAdd(const UnownedStringSlice& key, Index defaultValueIndex)
+{
+ StringSlicePool::Handle handle;
+ m_pool.findOrAdd(key, handle);
+ const CountIndex countIndex = StringSlicePool::asIndex(handle);
+ if (countIndex >= m_indexMap.getCount())
+ {
+ SLANG_ASSERT(countIndex == m_indexMap.getCount());
+ m_indexMap.add(defaultValueIndex);
+ }
+ return countIndex;
+}
+
+void StringSliceIndexMap::clear()
+{
+ m_pool.clear();
+ m_indexMap.clear();
+}
+
+} // namespace Slang