summaryrefslogtreecommitdiff
path: root/source/compiler-core/slang-artifact-representation.h
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2022-08-09 11:23:40 -0400
committerGitHub <noreply@github.com>2022-08-09 11:23:40 -0400
commit9df7fcb023bd5a22f35ecd609b7a50cc6634976c (patch)
tree69692c36e664eafa2a37b5fa13ca7142f62b1844 /source/compiler-core/slang-artifact-representation.h
parentc0733be56dc24ef0eb67b26fe0c49d3419e75773 (diff)
Artifact split interface and implementation (#2349)
* #include an absolute path didn't work - because paths were taken to always be relative. * WIP with hierarchical enums. * Some small fixes and improvements around artifact desc related types. * Improvements around hierarchical enum. * Fixes to get Artifact types refactor to be able to execute tests. * Attempt to better categorize PTX. * Work around for potentially unused function warning. * Typo fix. * Simplify Artifact header. * Small improvements around Artifact kind/payload/style. * Added IDestroyable/ICastable * Add IArtifactList. * First impl of IArtifactUtil. * Use the ICastable interface for IArtifactRepresentation. * Added IArtifactRepresentation & IArtifactAssociated. * Add SLANG_OVERRIDE to avoid gcc/clang warning. * Fix calling convention issue on win32. * Fix missing SLANG_OVERRIDE. * First attempt at file abstraction around Artifact. * Added creation of lock file. * Move functionality for determining file paths to the IArtifactUtil. Add casting to ICastable. * Added some casting/finding mechanisms. * Simplify IArtifact interface, and use Items for file reps. * Fix problem with libraries on DXIL. * Split out ArtifactRepresentation. * Move ArtifactDesc functionality to ArtifactDescUtil. ArtifactInfoUtil becomes ArtifactDescUtil. * Split implementations from the interfaces for Artifact. * Use TypeTextUtil for target name outputting. * Add artifact impls.
Diffstat (limited to 'source/compiler-core/slang-artifact-representation.h')
-rw-r--r--source/compiler-core/slang-artifact-representation.h52
1 files changed, 52 insertions, 0 deletions
diff --git a/source/compiler-core/slang-artifact-representation.h b/source/compiler-core/slang-artifact-representation.h
new file mode 100644
index 000000000..00a5c9e5b
--- /dev/null
+++ b/source/compiler-core/slang-artifact-representation.h
@@ -0,0 +1,52 @@
+// slang-artifact-representation.h
+#ifndef SLANG_ARTIFACT_REPRESENTATION_H
+#define SLANG_ARTIFACT_REPRESENTATION_H
+
+#include "slang-artifact.h"
+
+namespace Slang
+{
+
+/* A lock file */
+class ILockFile : public ICastable
+{
+ SLANG_COM_INTERFACE(0x9177ea36, 0xa608, 0x4490, { 0x87, 0xf0, 0xf3, 0x93, 0x9, 0x7d, 0x36, 0xce })
+
+ /// The path to a lock file.
+ virtual SLANG_NO_THROW const char* SLANG_MCALL getPath() = 0;
+ /// Optional, the file system it's on. If nullptr its on 'regular' OS file system.
+ virtual SLANG_NO_THROW ISlangMutableFileSystem* SLANG_MCALL getFileSystem() = 0;
+
+ /// Makes the lock file no longer owned. Doing so will make the path nullptr, and getFileSystem nullptr.
+ virtual SLANG_NO_THROW void SLANG_MCALL disown() = 0;
+};
+
+/*
+A representation as a file. If it is a temporary file, it will likely disappear.
+A file representation does not have to be a representation of a file on the file system.
+That is indicated by getFileSystem returning nullptr. Then the path is the path on the *actual* OS file system.
+This distinction is important as it is sometimes necessary to have an artifact stored on the OS file system
+to be usable. */
+class IFileArtifactRepresentation : public IArtifactRepresentation
+{
+public:
+ enum class Kind
+ {
+ Reference, ///< References a file on the file system
+ Owned, ///< File is *owned* by this instance and will be deleted when goes out of scope
+ NameOnly, ///< Typically used for items that can be found by the 'system'. The path is just a name, and cannot typically be loaded as a blob.
+ };
+
+ /// The the kind of file.
+ virtual SLANG_NO_THROW Kind SLANG_MCALL getKind() = 0;
+ /// The path (on the file system)
+ virtual SLANG_NO_THROW const char* SLANG_MCALL getPath() = 0;
+ /// Get the lock file. Return nullptr if there is no lock file.
+ virtual SLANG_NO_THROW ILockFile* SLANG_MCALL getLockFile() = 0;
+ /// Optional, the file system it's on. If nullptr its on 'regular' OS file system.
+ virtual SLANG_NO_THROW ISlangMutableFileSystem* SLANG_MCALL getFileSystem() = 0;
+};
+
+} // namespace Slang
+
+#endif