core/interfaces/ILibrarySys.h
author Borja Ferrer <faluco@alliedmods.net>
Fri Jan 05 00:42:22 2007 +0000 (2007-01-05)
changeset 268 d6fed4f05e07
parent 252 ce166c465bad
child 317 e5342c8a0cf4
permissions -rw-r--r--
Fixed CPlayer init, it was called too early.
nothing important on the logger
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@252
    67
dvander@252
    68
		/**
dvander@252
    69
		 * @brief Returns true if the current entry is valid
dvander@252
    70
		 *        (Used similarly to MoreFiles).
dvander@252
    71
		 */
dvander@252
    72
		virtual bool IsEntryValid() =0;
dvander@140
    73
	};
dvander@140
    74
dvander@140
    75
	/**
dvander@140
    76
	 * @brief Contains various operating system specific code.
dvander@140
    77
	 */
dvander@140
    78
	class ILibrarySys : public SMInterface
dvander@140
    79
	{
dvander@140
    80
	public:
dvander@140
    81
		virtual const char *GetInterfaceName()
dvander@140
    82
		{
dvander@140
    83
			return SMINTERFACE_LIBRARYSYS_NAME;
dvander@140
    84
		}
dvander@140
    85
		virtual unsigned int GetInterfaceVersion()
dvander@140
    86
		{
dvander@140
    87
			return SMINTERFACE_LIBRARYSYS_VERSION;
dvander@140
    88
		}
dvander@140
    89
	public:
dvander@140
    90
		/**
dvander@140
    91
		 * @brief Opens a dynamic library file.
dvander@140
    92
		 * 
dvander@140
    93
		 * @param path		Path to library file (.dll/.so).
dvander@140
    94
		 * @param error		Buffer for any error message (may be NULL).
dvander@140
    95
		 * @param err_max	Maximum length of error buffer.
dvander@140
    96
		 * @return			Pointer to an ILibrary, NULL if failed.
dvander@140
    97
		 */
dvander@140
    98
		virtual ILibrary *OpenLibrary(const char *path, char *error, size_t err_max) =0;
dvander@140
    99
dvander@140
   100
		/**
dvander@140
   101
		 * @brief Opens a directory for reading.
dvander@140
   102
		 *
dvander@140
   103
		 * @param path		Path to directory.
dvander@140
   104
		 * @return			Pointer to an IDirectory, NULL if failed.
dvander@140
   105
		 */
dvander@141
   106
		virtual IDirectory *OpenDirectory(const char *path) =0;
dvander@140
   107
dvander@140
   108
		/**
dvander@140
   109
		 * @brief Closes a directory and frees its handle.
dvander@140
   110
		 * 
dvander@140
   111
		 * @param dir		Pointer to IDirectory.
dvander@140
   112
		 */
dvander@140
   113
		virtual void CloseDirectory(IDirectory *dir) =0;
dvander@140
   114
dvander@140
   115
		/**
dvander@141
   116
		 * @brief Returns true if a path exists.
dvander@141
   117
		 */
dvander@141
   118
		virtual bool PathExists(const char *path) =0;
dvander@141
   119
dvander@141
   120
		/**
dvander@140
   121
		 * @brief Returns true if the path is a normal file.
dvander@140
   122
		 */
dvander@140
   123
		virtual bool IsPathFile(const char *path) =0;
dvander@140
   124
dvander@140
   125
		/**
dvander@140
   126
		 * @brief Returns true if the path is a normal directory.
dvander@140
   127
		 */
dvander@140
   128
		virtual bool IsPathDirectory(const char *path) =0;
dvander@141
   129
dvander@141
   130
		/**
dvander@141
   131
		 * @brief Gets a platform-specific error message.
dvander@141
   132
		 * This should only be called when an ILibrary function fails.
dvander@141
   133
		 * Win32 equivalent: GetLastError() + FormatMessage()
dvander@141
   134
		 * POSIX equivalent: errno + strerror()
dvander@141
   135
		 *
dvander@141
   136
		 * @param error		Error message buffer.
dvander@141
   137
		 * @param err_max	Maximum length of error buffer.
dvander@141
   138
		 */
dvander@141
   139
		virtual void GetPlatformError(char *error, size_t err_max) =0;
dvander@210
   140
dvander@210
   141
		/**
dvander@210
   142
		 * @brief Formats a string similar to snprintf(), except
dvander@210
   143
		 * corrects all non-platform compatible path separators to be
dvander@210
   144
		 * the correct platform character.
dvander@210
   145
		 *
dvander@210
   146
		 * @param buffer	Output buffer pointer.
dvander@210
   147
		 * @param maxlength	Output buffer size.
dvander@210
   148
		 * @param pathfmt	Format string of path.
dvander@210
   149
		 * @param ...		Format string arguments.
dvander@210
   150
		 */
dvander@210
   151
		virtual void PathFormat(char *buffer, size_t maxlength, const char *pathfmt, ...) =0;
dvander@140
   152
	};
dvander@140
   153
};
dvander@140
   154
dvander@140
   155
#endif //_INCLUDE_SOURCEMOD_LIBRARY_INTERFACE_SYS_H_