core/interfaces/ILibrarySys.h
author David Anderson <dvander@alliedmods.net>
Sat Nov 11 11:10:24 2006 +0000 (2006-11-11)
changeset 177 d29ade52d953
parent 148 a0626ab9710b
child 210 de70433605a0
permissions -rw-r--r--
Fleshed out forward system and extensively documented its design considerations
Implemented and did basic tests on new IPluginFunction type
Split function types into a separate file
dvander@140
     1
#ifndef _INCLUDE_SOURCEMOD_LIBRARY_INTERFACE_SYS_H_
dvander@140
     2
#define _INCLUDE_SOURCEMOD_LIBRARY_INTERFACE_SYS_H_
dvander@140
     3
dvander@140
     4
#include <IShareSys.h>
dvander@140
     5
dvander@140
     6
namespace SourceMod
dvander@140
     7
{
dvander@140
     8
	#define SMINTERFACE_LIBRARYSYS_NAME		"ILibrarySys"
dvander@140
     9
	#define SMINTERFACE_LIBRARYSYS_VERSION	1
dvander@140
    10
dvander@140
    11
	class ILibrary
dvander@140
    12
	{
dvander@140
    13
	public:
dvander@141
    14
		virtual ~ILibrary()
dvander@141
    15
		{
dvander@141
    16
			/* Calling delete will call CloseLibrary! */
dvander@141
    17
		};
dvander@141
    18
	public:
dvander@140
    19
		/**
dvander@140
    20
		 * @brief Closes dynamic library and invalidates pointer.
dvander@140
    21
		 */
dvander@140
    22
		virtual void CloseLibrary() =0;
dvander@140
    23
dvander@140
    24
		/**
dvander@140
    25
		 * @brief Retrieves a symbol pointer from the dynamic library.
dvander@140
    26
		 *
dvander@140
    27
		 * @param symname	Symbol name.
dvander@140
    28
		 * @return			Symbol pointer, NULL if not found.
dvander@140
    29
		 */
dvander@140
    30
		virtual void *GetSymbolAddress(const char *symname) =0;
dvander@140
    31
	};
dvander@140
    32
dvander@140
    33
	/**
dvander@140
    34
	 * @brief Directory browsing abstraction.
dvander@140
    35
	 */
dvander@140
    36
	class IDirectory
dvander@140
    37
	{
dvander@140
    38
	public:
dvander@141
    39
		virtual ~IDirectory()
dvander@141
    40
		{
dvander@141
    41
		}
dvander@141
    42
	public:
dvander@140
    43
		/**
dvander@140
    44
		 * @brief Returns true if there are more files to read, false otherwise.
dvander@140
    45
		 */
dvander@140
    46
		virtual bool MoreFiles() =0;
dvander@140
    47
dvander@140
    48
		/**
dvander@140
    49
		 * @brief Advances to the next entry in the stream.
dvander@140
    50
		 */
dvander@140
    51
		virtual void NextEntry() =0;
dvander@140
    52
dvander@140
    53
		/**
dvander@140
    54
		 * @brief Returns the name of the current entry.
dvander@140
    55
		 */
dvander@140
    56
		virtual const char *GetEntryName() =0;
dvander@140
    57
dvander@140
    58
		/**
dvander@140
    59
		 * @brief Returns whether the current entry is a directory.
dvander@140
    60
		 */
dvander@140
    61
		virtual bool IsEntryDirectory() =0;
dvander@140
    62
dvander@140
    63
		/**
dvander@140
    64
		 * @brief Returns whether the current entry is a file.
dvander@140
    65
		 */
dvander@140
    66
		virtual bool IsEntryFile() =0;
dvander@140
    67
	};
dvander@140
    68
dvander@140
    69
	/**
dvander@140
    70
	 * @brief Contains various operating system specific code.
dvander@140
    71
	 */
dvander@140
    72
	class ILibrarySys : public SMInterface
dvander@140
    73
	{
dvander@140
    74
	public:
dvander@140
    75
		virtual const char *GetInterfaceName()
dvander@140
    76
		{
dvander@140
    77
			return SMINTERFACE_LIBRARYSYS_NAME;
dvander@140
    78
		}
dvander@140
    79
		virtual unsigned int GetInterfaceVersion()
dvander@140
    80
		{
dvander@140
    81
			return SMINTERFACE_LIBRARYSYS_VERSION;
dvander@140
    82
		}
dvander@140
    83
	public:
dvander@140
    84
		/**
dvander@140
    85
		 * @brief Opens a dynamic library file.
dvander@140
    86
		 * 
dvander@140
    87
		 * @param path		Path to library file (.dll/.so).
dvander@140
    88
		 * @param error		Buffer for any error message (may be NULL).
dvander@140
    89
		 * @param err_max	Maximum length of error buffer.
dvander@140
    90
		 * @return			Pointer to an ILibrary, NULL if failed.
dvander@140
    91
		 */
dvander@140
    92
		virtual ILibrary *OpenLibrary(const char *path, char *error, size_t err_max) =0;
dvander@140
    93
dvander@140
    94
		/**
dvander@140
    95
		 * @brief Opens a directory for reading.
dvander@140
    96
		 *
dvander@140
    97
		 * @param path		Path to directory.
dvander@140
    98
		 * @return			Pointer to an IDirectory, NULL if failed.
dvander@140
    99
		 */
dvander@141
   100
		virtual IDirectory *OpenDirectory(const char *path) =0;
dvander@140
   101
dvander@140
   102
		/**
dvander@140
   103
		 * @brief Closes a directory and frees its handle.
dvander@140
   104
		 * 
dvander@140
   105
		 * @param dir		Pointer to IDirectory.
dvander@140
   106
		 */
dvander@140
   107
		virtual void CloseDirectory(IDirectory *dir) =0;
dvander@140
   108
dvander@140
   109
		/**
dvander@141
   110
		 * @brief Returns true if a path exists.
dvander@141
   111
		 */
dvander@141
   112
		virtual bool PathExists(const char *path) =0;
dvander@141
   113
dvander@141
   114
		/**
dvander@140
   115
		 * @brief Returns true if the path is a normal file.
dvander@140
   116
		 */
dvander@140
   117
		virtual bool IsPathFile(const char *path) =0;
dvander@140
   118
dvander@140
   119
		/**
dvander@140
   120
		 * @brief Returns true if the path is a normal directory.
dvander@140
   121
		 */
dvander@140
   122
		virtual bool IsPathDirectory(const char *path) =0;
dvander@141
   123
dvander@141
   124
		/**
dvander@141
   125
		 * @brief Gets a platform-specific error message.
dvander@141
   126
		 * This should only be called when an ILibrary function fails.
dvander@141
   127
		 * Win32 equivalent: GetLastError() + FormatMessage()
dvander@141
   128
		 * POSIX equivalent: errno + strerror()
dvander@141
   129
		 *
dvander@141
   130
		 * @param error		Error message buffer.
dvander@141
   131
		 * @param err_max	Maximum length of error buffer.
dvander@141
   132
		 */
dvander@141
   133
		virtual void GetPlatformError(char *error, size_t err_max) =0;
dvander@140
   134
	};
dvander@140
   135
};
dvander@140
   136
dvander@140
   137
#endif //_INCLUDE_SOURCEMOD_LIBRARY_INTERFACE_SYS_H_