summaryrefslogtreecommitdiff
path: root/source/core/platform.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/core/platform.h')
-rw-r--r--source/core/platform.h56
1 files changed, 38 insertions, 18 deletions
diff --git a/source/core/platform.h b/source/core/platform.h
index fef698e6f..a545d139d 100644
--- a/source/core/platform.h
+++ b/source/core/platform.h
@@ -2,30 +2,50 @@
#ifndef SLANG_CORE_PLATFORM_H_INCLUDED
#define SLANG_CORE_PLATFORM_H_INCLUDED
+#include "../../slang.h"
+#include "../core/slang-string.h"
+
namespace Slang
{
// Interface for working with shared libraries
- // in a platfomr-independent fashion.
+ // in a platform-independent fashion.
struct SharedLibrary
{
typedef struct SharedLibraryImpl* Handle;
- Handle handle;
-
- // Attempt to load a shared library for
- // the current platform.
- static SharedLibrary load(char const* name);
-
- // If this refers to a valid loaded library,
- // then attempt to unload it
- void unload();
-
- typedef void (*FuncPtr)(void);
-
- FuncPtr findFuncByName(char const* name);
-
-
- operator Handle() { return handle; }
- };
+
+ typedef void(*FuncPtr)(void);
+
+ /// Load via an unadorned filename
+ ///
+ /// @param the unadorned filename
+ /// @return Returns a non null handle for the shared library on success. nullptr indicated failure
+ static SlangResult load(const char* filename, Handle& handleOut);
+
+ /// Attempt to load a shared library for
+ /// the current platform. Returns null handle on failure
+ /// The platform specific filename can be generated from a call to appendPlatformFileName
+ ///
+ /// @param platformFileName the platform specific file name.
+ /// @return Returns a non null handle for the shared library on success. nullptr indicated failure
+ static SlangResult loadWithPlatformFilename(char const* platformFileName, Handle& handleOut);
+
+ /// Unload the library that was returned from load as handle
+ /// @param The valid handle returned from load
+ static void unload(Handle handle);
+
+ /// Given a shared library handle and a name, return the associated function
+ /// Return nullptr if function is not found
+ /// @param The shared library handle as returned by loadPlatformLibrary
+ static FuncPtr findFuncByName(Handle handle, char const* name);
+
+ /// Append to the end of dst, the name, with any platform specific additions
+ /// The input name should be unadorned with any 'lib' prefix or extension
+ static void appendPlatformFileName(const UnownedStringSlice& name, StringBuilder& dst);
+
+ private:
+ /// Not constructible!
+ SharedLibrary();
+ };
#ifndef _MSC_VER
#define _fileno fileno