Raw File
slang-artifact-representation.h
// slang-artifact-representation.h
#ifndef SLANG_ARTIFACT_REPRESENTATION_H
#define SLANG_ARTIFACT_REPRESENTATION_H

#include "slang-artifact.h"

namespace Slang
{

/* Base interface for types that have a path. */
class IPathArtifactRepresentation : public IArtifactRepresentation
{
    SLANG_COM_INTERFACE(0xcb1c188c, 0x7e48, 0x43eb, { 0xb0, 0x9a, 0xa1, 0x6e, 0xef, 0xd4, 0x9b, 0xef });

        /// The path
    virtual SLANG_NO_THROW const char* SLANG_MCALL getPath() = 0;
        /// Get type
    virtual SLANG_NO_THROW SlangPathType SLANG_MCALL getPathType() = 0;
};

/* Represents a path to a file  held on an ISlangFileSystem. */
class IExtFileArtifactRepresentation : public IPathArtifactRepresentation
{
    SLANG_COM_INTERFACE(0xacd65576, 0xb09d, 0x4ac9, { 0xa5, 0x93, 0xeb, 0xf8, 0x9b, 0xd7, 0x11, 0xfd });

       /// File system that holds the item along the path. 
    virtual SLANG_NO_THROW ISlangFileSystemExt* SLANG_MCALL getFileSystem() = 0;
};

/* 
A representation as a file on the OS file system.  */
class IOSFileArtifactRepresentation : public IPathArtifactRepresentation
{
public:
    SLANG_COM_INTERFACE(0xc7d7d3a4, 0x8683, 0x44b5, { 0x87, 0x96, 0xdf, 0xba, 0x9b, 0xc3, 0xf1, 0x7b });

    /* Determines ownership and other characteristics of the OS 'file' */
    enum class Kind
    {
        Reference,          ///< References a file on the file system
        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.
        Owned,              ///< File is *owned* by this instance and will be deleted when goes out of scope
        Lock,               ///< An owned type, indicates potentially in part may only exist to 'lock' a path for a temporary file. Other files might exists based on the 'lock' path.
        CountOf,
    };

        /// The the kind of file. 
    virtual SLANG_NO_THROW Kind SLANG_MCALL getKind() = 0;                     
        /// Makes the file no longer owned. Only applicable for Owned/Lock and they will become 'Reference'
    virtual SLANG_NO_THROW void SLANG_MCALL disown() = 0;
        /// Gets the 'lock file' if any associated with this file. Returns nullptr if there isn't one. 
        /// If this file is based on a 'lock file', the lock file must stay in scope at least as long as this does.
    virtual SLANG_NO_THROW IOSFileArtifactRepresentation* SLANG_MCALL getLockFile() = 0;
};

} // namespace Slang

#endif
back to top