Files
@ r9515:30fe0a2a833b
Branch filter:
Location: cpp/openttd-patchpack/source/src/driver.h - annotation
r9515:30fe0a2a833b
1.9 KiB
text/x-c
(svn r13507) -Fix (r12856): first engine change should've been moved too
r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r9111:983de9c5a848 r6125:eb40461cb765 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r7170:38b143754b40 r8112:7d126d66990f r8214:9a3935f9ef4e r7170:38b143754b40 r7170:38b143754b40 r5475:3f5cd13d1b63 r7318:844268a38029 r7318:844268a38029 r5475:3f5cd13d1b63 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7193:2cae66b95848 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r9260:a54ed53b7134 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r8844:7b7ef05d6025 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r9489:7a345541bc8e r9159:0c3d5148cb9a r9159:0c3d5148cb9a r9159:0c3d5148cb9a r9159:0c3d5148cb9a r9159:0c3d5148cb9a r9159:0c3d5148cb9a r9159:0c3d5148cb9a r9159:0c3d5148cb9a r9159:0c3d5148cb9a r9159:0c3d5148cb9a r7170:38b143754b40 r8844:7b7ef05d6025 r8844:7b7ef05d6025 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r7170:38b143754b40 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 | /* $Id$ */
/** @file driver.h Base for all drivers (video, sound, music, etc). */
#ifndef DRIVER_H
#define DRIVER_H
#include "debug.h"
#include "core/enum_type.hpp"
#include "string_func.h"
#include <string>
#include <map>
bool GetDriverParamBool(const char * const *parm, const char *name);
int GetDriverParamInt(const char * const *parm, const char *name, int def);
class Driver {
public:
virtual const char *Start(const char * const *parm) = 0;
virtual void Stop() = 0;
virtual ~Driver() { }
enum Type {
DT_BEGIN = 0,
DT_SOUND = 0,
DT_MUSIC,
DT_VIDEO,
DT_END,
};
};
DECLARE_POSTFIX_INCREMENT(Driver::Type);
class DriverFactoryBase {
private:
Driver::Type type;
char *name;
int priority;
typedef std::map<std::string, DriverFactoryBase *> Drivers;
static Drivers &GetDrivers()
{
static Drivers &s_drivers = *new Drivers();
return s_drivers;
}
static Driver **GetActiveDriver(Driver::Type type)
{
static Driver *s_driver[3] = { NULL, NULL, NULL };
return &s_driver[type];
}
static const char *GetDriverTypeName(Driver::Type type)
{
static const char *driver_type_name[] = { "sound", "music", "video" };
return driver_type_name[type];
}
protected:
void RegisterDriver(const char *name, Driver::Type type, int priority);
public:
DriverFactoryBase() :
name(NULL)
{}
virtual ~DriverFactoryBase();
/** Shuts down all active drivers
*/
static void ShutdownDrivers()
{
for (Driver::Type dt = Driver::DT_BEGIN; dt < Driver::DT_END; dt++) {
Driver *driver = *GetActiveDriver(dt);
if (driver != NULL) driver->Stop();
}
}
static const Driver *SelectDriver(const char *name, Driver::Type type);
static char *GetDriversInfo(char *p, const char *last);
/**
* Get a nice description of the driver-class.
*/
virtual const char *GetDescription() = 0;
/**
* Create an instance of this driver-class.
*/
virtual Driver *CreateInstance() = 0;
};
#endif /* DRIVER_H */
|