diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2022-08-10 11:37:26 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-08-10 11:37:26 -0400 |
| commit | fcdb4629c4c3dd2931eaa88b96b668d914c4519c (patch) | |
| tree | c54c0b9c6411f9be55b9a2816e528b91d6032703 /source/compiler-core/slang-artifact-impl.h | |
| parent | 1378fffd9da094beb41b2db89b96f556c23ab6cb (diff) | |
Yet more refactoring around Artifact (#2352)
* #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.
* Add ICastableList
* Added UnknownCastableAdapter
* Make ISlangSharedLibrary derive from ICastable, and remain backwards compatible with slang-llvm.
* Refactor Representation on Artifact.
* Make our ISlangBlobs also derive from ICastable.
Make ISlangBlob atomic ref counted.
* Split out CastableList and related types, and placed in core.
* Small fixes around IArtifact.
Improve IArtifact docs.
First impl of getChildren for IArtifact.
* Documentation improvements for Artifact related types.
* Fix typo.
* Special case adding a ICastableList to a LazyCastableList.
* Small simplification of LazyCastableList, by adding State member.
* Removed the ILockFile interface because IFileArtifactRepresentation can be used.
Diffstat (limited to 'source/compiler-core/slang-artifact-impl.h')
| -rw-r--r-- | source/compiler-core/slang-artifact-impl.h | 98 |
1 files changed, 5 insertions, 93 deletions
diff --git a/source/compiler-core/slang-artifact-impl.h b/source/compiler-core/slang-artifact-impl.h index 79aad3b64..e4db46222 100644 --- a/source/compiler-core/slang-artifact-impl.h +++ b/source/compiler-core/slang-artifact-impl.h @@ -4,6 +4,8 @@ #include "slang-artifact.h" +#include "../core/slang-lazy-castable-list.h" + #include "../../slang-com-helper.h" #include "../../slang-com-ptr.h" @@ -12,89 +14,6 @@ namespace Slang { -/* An adapter such that types which aren't derived from ICastable, can be used as such. - -With the following caveats. -* the interfaces/objects of the adapter are checked *first*, so IUnknown will always be for the adapter -* assumes when doing a queryInterface on the contained item -*/ -class UnknownCastableAdapter : public ComBaseObject, public IUnknownCastableAdapter -{ -public: - SLANG_COM_BASE_IUNKNOWN_ALL - - // ICastable - SLANG_NO_THROW void* SLANG_MCALL castAs(const Guid& guid) SLANG_OVERRIDE; - - // IUnknownCastableAdapter - virtual SLANG_NO_THROW ISlangUnknown* SLANG_MCALL getContained() SLANG_OVERRIDE { return m_contained; } - - UnknownCastableAdapter(ISlangUnknown* unk): - m_contained(unk) - { - SLANG_ASSERT(unk); - } - -protected: - void* getInterface(const Guid& guid); - void* getObject(const Guid& guid); - - ComPtr<ISlangUnknown> m_contained; - - // We hold a cache for a single lookup to make things a little faster - void* m_found = nullptr; - Guid m_foundGuid; -}; - -class CastableList : public ComBaseObject, public ICastableList -{ -public: - SLANG_COM_BASE_IUNKNOWN_ALL - - // ICastable - SLANG_NO_THROW void* SLANG_MCALL castAs(const Guid& guid) SLANG_OVERRIDE; - - // ICastableList - virtual Count SLANG_MCALL getCount() SLANG_OVERRIDE { return m_list.getCount(); } - virtual ICastable* SLANG_MCALL getAt(Index i) SLANG_OVERRIDE { return m_list[i]; } - virtual void SLANG_MCALL add(ICastable* castable) SLANG_OVERRIDE; - virtual void SLANG_MCALL addUnknown(ISlangUnknown* unk) SLANG_OVERRIDE; - virtual void SLANG_MCALL removeAt(Index i) SLANG_OVERRIDE; - virtual void SLANG_MCALL clear() SLANG_OVERRIDE; - virtual Index SLANG_MCALL indexOf(ICastable* castable) SLANG_OVERRIDE; - virtual Index SLANG_MCALL indexOfUnknown(ISlangUnknown* unk) SLANG_OVERRIDE; - virtual void* SLANG_MCALL find(const Guid& guid) SLANG_OVERRIDE; - virtual ICastable* const* SLANG_MCALL getBuffer() SLANG_OVERRIDE { return m_list.getBuffer(); } - - virtual ~CastableList(); - -protected: - void* getInterface(const Guid& guid); - void* getObject(const Guid& guid); - - List<ICastable*> m_list; -}; - -class LazyCastableList -{ -public: - void add(ICastable* castable); - Count getCount() const; - void removeAt(Index index); - void clear(); - void clearAndDeallocate(); - void* find(const Guid& guid); - ConstArrayView<ICastable*> getView() const; - Index indexOf(ICastable* castable) const; - Index indexOfUnknown(ISlangUnknown* unk) const; - - ICastableList* requireList(); - ICastableList* getList(); - -protected: - ComPtr<ICastable> m_castable; -}; - class ArtifactList : public ComBaseObject, public IArtifactList { public: @@ -134,15 +53,6 @@ protected: /* Discussion: -It could make sense to remove the explicit variables of a ISlangBlob, and the file backing from this interface, as they could -all be implemented as element types presumably deriving from IArtifactInstance. Doing so would mean how a 'file' is turned into -a blob is abstracted. - -It may be helpful to be able to add temporary files to the artifact (such that they will be deleted when the artifact goes out of -scope). Using an implementation of the File backed IArtifactInstance, with a suitable desc would sort of work, but it breaks the idea -that any IArtifactInstance *represents* the contents of Artifact that contains it. Of course there could be types *not* deriving -from IArtifactInstance that handle temporary file existance. This is probably the simplest answer to the problem. - Another issue occurs around wanting to hold multiple kernels within a container. The problem here is that although through the desc we can identify what target a kernel is for, there is no way of telling what stage it is for. @@ -174,11 +84,13 @@ public: virtual void* SLANG_MCALL SLANG_MCALL findAssociated(const Guid& unk) SLANG_OVERRIDE; virtual ICastableList* SLANG_MCALL getAssociated() SLANG_OVERRIDE; - virtual SLANG_NO_THROW void SLANG_MCALL addRepresentation(IArtifactRepresentation* rep) SLANG_OVERRIDE; + virtual SLANG_NO_THROW void SLANG_MCALL addRepresentation(ICastable* castable) SLANG_OVERRIDE; virtual SLANG_NO_THROW void SLANG_MCALL addRepresentationUnknown(ISlangUnknown* rep) SLANG_OVERRIDE; virtual void* SLANG_MCALL SLANG_MCALL findRepresentation(const Guid& guid) SLANG_OVERRIDE; virtual ICastableList* SLANG_MCALL getRepresentations() SLANG_OVERRIDE; + virtual IArtifactList* SLANG_MCALL getChildren() SLANG_OVERRIDE; + /// Ctor Artifact(const Desc& desc, const String& name) : m_desc(desc), |
