yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
f65d756bf
master
1// slang-artifact-helper.cpp 2#include "slang-artifact-helper.h" 3 4#include "../compiler-core/slang-slice-allocator.h" 5#include "../core/slang-castable.h" 6#include "../core/slang-file-system.h" 7#include "../core/slang-io.h" 8#include "../core/slang-shared-library.h" 9#include "slang-artifact-desc-util.h" 10#include "slang-artifact-impl.h" 11#include "slang-artifact-representation-impl.h" 12#include "slang-artifact-util.h" 13 14namespace Slang 15{ 16 17/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!! DefaultArtifactHelper !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ 18 19/* static */ DefaultArtifactHelper DefaultArtifactHelper ::g_singleton ; 20 21SlangResult DefaultArtifactHelper ::queryInterface (SlangUUID const & uuid ,void ** outObject ) 22{ 23if (auto intf = getInterface (uuid )) 24 { 25* outObject = intf ; 26return SLANG_OK ; 27 } 28return SLANG_E_NO_INTERFACE ; 29} 30 31void * DefaultArtifactHelper ::castAs (const Guid & guid ) 32{ 33if (auto ptr = getInterface (guid )) 34 { 35return ptr ; 36 } 37return getObject (guid ); 38} 39 40void * DefaultArtifactHelper ::getInterface (const Guid & guid ) 41{ 42if (guid == ISlangUnknown ::getTypeGuid ()|| guid == IArtifactHelper ::getTypeGuid ()) 43 { 44return static_cast < IArtifactHelper *> (this ); 45 } 46return nullptr ; 47} 48 49void * DefaultArtifactHelper ::getObject (const Guid & guid ) 50{ 51SLANG_UNUSED (guid ); 52return nullptr ; 53} 54 55SlangResult DefaultArtifactHelper ::createArtifact ( 56const ArtifactDesc & desc , 57const char * inName , 58IArtifact ** outArtifact ) 59{ 60* outArtifact = inName ?Artifact ::create (desc ,UnownedStringSlice (inName )).detach () 61 :Artifact ::create (desc ).detach (); 62 63return SLANG_OK ; 64} 65 66ArtifactKind DefaultArtifactHelper ::getKindParent (ArtifactKind kind ) 67{ 68return getParent (kind ); 69} 70UnownedStringSlice DefaultArtifactHelper ::getKindName (ArtifactKind kind ) 71{ 72return getName (kind ); 73} 74bool DefaultArtifactHelper ::isKindDerivedFrom (ArtifactKind kind ,ArtifactKind base ) 75{ 76return isDerivedFrom (kind ,base ); 77} 78 79ArtifactPayload DefaultArtifactHelper ::getPayloadParent (ArtifactPayload payload ) 80{ 81return getParent (payload ); 82} 83UnownedStringSlice DefaultArtifactHelper ::getPayloadName (ArtifactPayload payload ) 84{ 85return getName (payload ); 86} 87bool DefaultArtifactHelper ::isPayloadDerivedFrom (ArtifactPayload payload ,ArtifactPayload base ) 88{ 89return isDerivedFrom (payload ,base ); 90} 91 92ArtifactStyle DefaultArtifactHelper ::getStyleParent (ArtifactStyle style ) 93{ 94return getParent (style ); 95} 96UnownedStringSlice DefaultArtifactHelper ::getStyleName (ArtifactStyle style ) 97{ 98return getName (style ); 99} 100bool DefaultArtifactHelper ::isStyleDerivedFrom (ArtifactStyle style ,ArtifactStyle base ) 101{ 102return isDerivedFrom (style ,base ); 103} 104 105SlangResult DefaultArtifactHelper ::createLockFile ( 106const CharSlice & inNameBase , 107IOSFileArtifactRepresentation ** outLockFile ) 108{ 109const UnownedStringSlice nameBase = 110inNameBase .count ?asStringSlice (inNameBase ) :UnownedStringSlice ("unknown" ); 111String lockPath ; 112SLANG_RETURN_ON_FAIL (File ::generateTemporary (nameBase ,lockPath )); 113* outLockFile = OSFileArtifactRepresentation ::create ( 114IOSFileArtifactRepresentation ::Kind ::Lock , 115lockPath .getUnownedSlice (), 116nullptr ) 117 .detach (); 118return SLANG_OK ; 119} 120 121SlangResult DefaultArtifactHelper ::calcArtifactDescPath ( 122const ArtifactDesc & desc , 123const char * inBasePath , 124ISlangBlob ** outPath ) 125{ 126UnownedStringSlice basePath (inBasePath ); 127StringBuilder path ; 128SLANG_RETURN_ON_FAIL (ArtifactDescUtil ::calcPathForDesc (desc ,basePath ,path )); 129* outPath = StringBlob ::moveCreate (path ).detach (); 130return SLANG_OK ; 131} 132 133SlangResult DefaultArtifactHelper ::calcArtifactPath ( 134IArtifact * artifact , 135const char * inBasePath , 136ISlangBlob ** outPath ) 137{ 138UnownedStringSlice basePath (inBasePath ); 139StringBuilder path ; 140SLANG_RETURN_ON_FAIL (ArtifactUtil ::calcPath (artifact ,basePath ,path )); 141* outPath = StringBlob ::moveCreate (path ).detach (); 142return SLANG_OK ; 143} 144 145ArtifactDesc DefaultArtifactHelper ::makeDescForCompileTarget (SlangCompileTarget target ) 146{ 147return ArtifactDescUtil ::makeDescForCompileTarget (target ); 148} 149 150void DefaultArtifactHelper ::getCastable (ISlangUnknown * unk ,ICastable ** outCastable ) 151{ 152* outCastable = CastableUtil ::getCastable (unk ).detach (); 153} 154 155SlangResult DefaultArtifactHelper ::createOSFileArtifactRepresentation ( 156IOSFileArtifactRepresentation ::Kind kind , 157const CharSlice & path , 158IOSFileArtifactRepresentation * lockFile , 159IOSFileArtifactRepresentation ** outRep ) 160{ 161* outRep = OSFileArtifactRepresentation ::create (kind ,asStringSlice (path ),lockFile ).detach (); 162return SLANG_OK ; 163} 164 165SlangResult DefaultArtifactHelper ::createExtFileArtifactRepresentation ( 166const CharSlice & path , 167ISlangFileSystemExt * system , 168IExtFileArtifactRepresentation ** outRep ) 169{ 170* outRep = ExtFileArtifactRepresentation ::create (asStringSlice (path ),system ).detach (); 171return SLANG_OK ; 172} 173 174SlangResult DefaultArtifactHelper ::createOSFileArtifact ( 175const ArtifactDesc & desc , 176const CharSlice & path , 177IArtifact ** outArtifact ) 178{ 179auto artifact = Artifact ::create (desc ); 180 181auto fileRep = new OSFileArtifactRepresentation ( 182IOSFileArtifactRepresentation ::Kind ::Reference , 183asStringSlice (path ), 184nullptr ); 185artifact -> addRepresentation (fileRep ); 186 187* outArtifact = artifact .detach (); 188return SLANG_OK ; 189} 190 191}// namespace Slang