| 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-- |
| 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_ |