summaryrefslogtreecommitdiff
path: root/utils/shadercompile/cmdsink.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /utils/shadercompile/cmdsink.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'utils/shadercompile/cmdsink.h')
-rw-r--r--utils/shadercompile/cmdsink.h117
1 files changed, 117 insertions, 0 deletions
diff --git a/utils/shadercompile/cmdsink.h b/utils/shadercompile/cmdsink.h
new file mode 100644
index 0000000..9731595
--- /dev/null
+++ b/utils/shadercompile/cmdsink.h
@@ -0,0 +1,117 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Command sink interface implementation.
+//
+// $NoKeywords: $
+//
+//=============================================================================//
+
+#ifndef CMDSINK_H
+#define CMDSINK_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <stdio.h>
+#include <tier1/utlbuffer.h>
+
+
+namespace CmdSink
+{
+
+/*
+
+struct IResponse
+
+Interface to give back command execution results.
+
+*/
+struct IResponse
+{
+ virtual ~IResponse( void ) {}
+ virtual void Release( void ) { delete this; }
+
+ // Returns whether the command succeeded
+ virtual bool Succeeded( void ) = 0;
+
+ // If the command succeeded returns the result buffer length, otherwise zero
+ virtual size_t GetResultBufferLen( void ) = 0;
+ // If the command succeeded returns the result buffer base pointer, otherwise NULL
+ virtual const void * GetResultBuffer( void ) = 0;
+
+ // Returns a zero-terminated string of messages reported during command execution, or NULL if nothing was reported
+ virtual const char * GetListing( void ) = 0;
+};
+
+
+
+
+/*
+
+Response implementation when the result should appear in
+one file and the listing should appear in another file.
+
+*/
+class CResponseFiles : public IResponse
+{
+public:
+ explicit CResponseFiles( char const *szFileResult, char const *szFileListing );
+ ~CResponseFiles( void );
+
+public:
+ // Returns whether the command succeeded
+ virtual bool Succeeded( void );
+
+ // If the command succeeded returns the result buffer length, otherwise zero
+ virtual size_t GetResultBufferLen( void );
+ // If the command succeeded returns the result buffer base pointer, otherwise NULL
+ virtual const void * GetResultBuffer( void );
+
+ // Returns a zero-terminated string of messages reported during command execution
+ virtual const char * GetListing( void );
+
+protected:
+ void OpenResultFile( void ); //!< Opens the result file if not open yet
+ void ReadResultFile( void ); //!< Reads the result buffer if not read yet
+ void ReadListingFile( void ); //!< Reads the listing buffer if not read yet
+
+protected:
+ char m_szFileResult[MAX_PATH]; //!< Name of the result file
+ char m_szFileListing[MAX_PATH]; //!< Name of the listing file
+
+ FILE *m_fResult; //!< Result file (NULL if not open)
+ FILE *m_fListing; //!< Listing file (NULL if not open)
+
+ CUtlBuffer m_bufResult; //!< Buffer holding the result data
+ size_t m_lenResult; //!< Result data length (0 if result not read yet)
+ const void *m_dataResult; //!< Data buffer pointer (NULL if result not read yet)
+
+ CUtlBuffer m_bufListing; //!< Buffer holding the listing
+ const char *m_dataListing; //!< Listing buffer pointer (NULL if listing not read yet)
+};
+
+/*
+
+Response implementation when the result is a generic error.
+
+*/
+class CResponseError : public IResponse
+{
+public:
+ explicit CResponseError( void ) {}
+ ~CResponseError( void ) {}
+
+public:
+ virtual bool Succeeded( void ) { return false; }
+
+ virtual size_t GetResultBufferLen( void ) { return 0; }
+ virtual const void * GetResultBuffer( void ) { return NULL; }
+
+ virtual const char * GetListing( void ) { return NULL; }
+};
+
+
+}; // namespace CmdSink
+
+
+#endif // #ifndef CMDSINK_H