summaryrefslogtreecommitdiffstats
path: root/source/core/slang-string-slice-index-map.cpp
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2022-10-03 21:09:16 -0400
committerGitHub <noreply@github.com>2022-10-03 18:09:16 -0700
commit0b51ea6bb54b1d8a12695ccc2c259fd591069791 (patch)
tree1ff0587eb1454891bf8421a86b95ed5e95419e75 /source/core/slang-string-slice-index-map.cpp
parentcc3548c92b1cf028b94d7a264a55df83e6d4d212 (diff)
IMutableFileSystem::saveFileBlob (#2427)
* #include an absolute path didn't work - because paths were taken to always be relative. * Remove ref count for Entry in RiffFileSystem. Free up backing Entry types (to work around Dictionary not doing this). * Some small improvements to RiffFileSystem. * Add testing for file systems. * Split out MemoryFileSystem. * Add some documentation around different FileSystems. * Small tiry up - removing unused headers, fixing some comments. Use StringBlob::moveCreate where appropriate. * Small improvement to MemoryFileSystem. Improve documentation comments a little. * Added PathKind * * Make MemoryFileSystem not have implicit directories * Make RelativeFileSystem only allow access to files in file system (kind of like chroot) * Added Path::simplifyAbsolute * Special handling for root of MemoryFileSystem * Improvements around paths for different impls * More improvements around RelativeFileSystem. Special case root handling. * Test archive serialization. Move testinf from compression. Remove the implicit directory test -> doesn't work on all file systems. * Small optimization that removes need for check for a parent unless an item is being *created*. * Add implicit path testing. * Add support for saveFileBlob Add testing for saveFileBlob * Removed TemporaryFileSet Added PlatformUtil::outputDebugMessage * Some small improvements around RelativeFileSystem. * Split out ImplicitDirectoryCollector so can use without requiring compression systems. * Split out StringSliceIndexMap into own files.
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