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