Files @ r9583:b6e25a00b908
Branch filter:

Location: cpp/openttd-patchpack/source/src/driver.h - annotation

rubidium
(svn r13621) -Fix: building roadbits in the wrong direction on bridges or building roadbits from underneath the bridge to the bridgehead is impossible, so don't silently ignore that error when building over houses and industries is not ignored.
r5475:3f5cd13d1b63
r5475:3f5cd13d1b63
r9111:983de9c5a848
r6125:eb40461cb765
r5475:3f5cd13d1b63
r5475:3f5cd13d1b63
r5475:3f5cd13d1b63
r7170:38b143754b40
r8112:7d126d66990f
r8214:9a3935f9ef4e
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
r9582:cb7711765a81
r7193:2cae66b95848
r9582:cb7711765a81
r9582:cb7711765a81
r9582:cb7711765a81
r9582:cb7711765a81
r9582:cb7711765a81
r9582:cb7711765a81
r9582:cb7711765a81
r9582:cb7711765a81
r9582:cb7711765a81
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 <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;
	const char *name;
	int priority;

	struct StringCompare {
		bool operator () (const char *a, const char *b) const
		{
			return strcmp(a, b) < 0;
		}
	};

	typedef std::map<const char *, DriverFactoryBase *, StringCompare> 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 */