core/systems/LibrarySys.h
author David Anderson <dvander@alliedmods.net>
Wed Jan 17 03:01:38 2007 +0000 (2007-01-17)
changeset 304 fa485d2f25ed
parent 252 ce166c465bad
child 317 e5342c8a0cf4
permissions -rw-r--r--
Added extension loading/unloading
Extended SDK for interface sharing
Completed Metamod extension support
     1 #ifndef _INCLUDE_SOURCEMOD_SYSTEM_LIBRARY_H_
     2 #define _INCLUDE_SOURCEMOD_SYSTEM_LIBRARY_H_
     3 
     4 #include <ILibrarySys.h>
     5 #include "sm_platform.h"
     6 
     7 using namespace SourceMod;
     8 
     9 #if defined PLATFORM_WINDOWS
    10 typedef HMODULE		LibraryHandle;
    11 #else if defined PLATFORM_POSIX
    12 typedef void *		LibraryHandle;
    13 #endif
    14 
    15 class CDirectory : public IDirectory
    16 {
    17 public:
    18 	CDirectory(const char *path);
    19 	~CDirectory();
    20 public:
    21 	virtual bool MoreFiles();
    22 	virtual void NextEntry();
    23 	virtual const char *GetEntryName();
    24 	virtual bool IsEntryDirectory();
    25 	virtual bool IsEntryFile();
    26 	virtual bool IsEntryValid();
    27 public:
    28 	bool IsValid();
    29 private:
    30 #if defined PLATFORM_WINDOWS
    31 	HANDLE m_dir;
    32 	WIN32_FIND_DATAA m_fd;
    33 #else if defined PLATFORM_LINUX
    34 	DIR *m_dir;
    35 	struct dirent *ep;
    36 	char m_origpath[PLATFORM_MAX_PATH];
    37 #endif
    38 };
    39 
    40 class CLibrary : public ILibrary
    41 {
    42 public:
    43 	CLibrary(LibraryHandle me);
    44 	~CLibrary();
    45 public:
    46 	virtual void CloseLibrary();
    47 	virtual void *GetSymbolAddress(const char *symname);
    48 private:
    49 	LibraryHandle m_lib;
    50 };
    51 
    52 class LibrarySystem : public ILibrarySys
    53 {
    54 public:
    55 	virtual ILibrary *OpenLibrary(const char *path, char *error, size_t err_max);
    56 	virtual IDirectory *OpenDirectory(const char *path);
    57 	virtual void CloseDirectory(IDirectory *dir);
    58 	virtual bool PathExists(const char *path);
    59 	virtual bool IsPathFile(const char *path);
    60 	virtual bool IsPathDirectory(const char *path);
    61 	virtual void GetPlatformError(char *error, size_t err_max);
    62 	virtual void PathFormat(char *buffer, size_t len, const char *fmt, ...);
    63 };
    64 
    65 extern LibrarySystem g_LibSys;
    66 
    67 #endif //_INCLUDE_SOURCEMOD_SYSTEM_LIBRARY_H_