From c0733be56dc24ef0eb67b26fe0c49d3419e75773 Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Tue, 9 Aug 2022 10:31:22 -0400 Subject: Support for Items on IArtifact (#2347) * #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. --- source/core/slang-destroyable.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'source/core') diff --git a/source/core/slang-destroyable.h b/source/core/slang-destroyable.h index 4e6be2629..343cc2484 100644 --- a/source/core/slang-destroyable.h +++ b/source/core/slang-destroyable.h @@ -36,6 +36,30 @@ class IDestroyable : public ICastable virtual SLANG_NO_THROW bool SLANG_MCALL isDestroyed() = 0; }; +// Dynamic cast of ICastable derived types +template +SLANG_FORCE_INLINE T* dynamicCast(ICastable* castable) +{ + if (castable) + { + void* obj = castable->castAs(T::getTypeGuid()); + return obj ? reinterpret_cast(obj) : ((T*)nullptr); + } + return nullptr; +} + +// as style cast +template +SLANG_FORCE_INLINE T* as(ICastable* castable) +{ + if (castable) + { + void* obj = castable->castAs(T::getTypeGuid()); + return obj ? reinterpret_cast(obj) : ((T*)nullptr); + } + return nullptr; +} + } #endif // SLANG_CORE_DESTROYABLE_H -- cgit v1.2.3