summaryrefslogtreecommitdiff
path: root/src/driver.h
diff options
context:
space:
mode:
authorsmatz <smatz@openttd.org>2008-04-06 16:49:02 +0000
committersmatz <smatz@openttd.org>2008-04-06 16:49:02 +0000
commitc0a5fa9eea431204142bcdb7ea2bc986d14786ee (patch)
tree0c27b9a320109100090490cac871fb0edd19c4d7 /src/driver.h
parentfb1c4eccd840cd05ee3bf00c3b757829c9c72ef0 (diff)
downloadopenttd-c0a5fa9eea431204142bcdb7ea2bc986d14786ee.tar.xz
(svn r12594) -Codechange: move large functions from driver.h to driver.cpp to reduce binary size and compile time
Diffstat (limited to 'src/driver.h')
-rw-r--r--src/driver.h137
1 files changed, 3 insertions, 134 deletions
diff --git a/src/driver.h b/src/driver.h
index 1a088d8c4..e78dfaf5b 100644
--- a/src/driver.h
+++ b/src/driver.h
@@ -60,32 +60,7 @@ private:
}
protected:
- /**
- * Register a driver internally, based on its name.
- * @param name the name of the driver.
- * @note an assert() will be trigger if 2 driver with the same name try to register.
- */
- void RegisterDriver(const char *name, Driver::Type type, int priority)
- {
- /* Don't register nameless Drivers */
- if (name == NULL) return;
-
- this->name = strdup(name);
- this->type = type;
- this->priority = priority;
-
- /* Prefix the name with driver type to make it unique */
- char buf[32];
- strecpy(buf, GetDriverTypeName(type), lastof(buf));
- strecpy(buf + 5, name, lastof(buf));
-
-#if !defined(NDEBUG) || defined(WITH_ASSERT)
- /* NDEBUG disables asserts and gives a warning: unused variable 'P' */
- std::pair<Drivers::iterator, bool> P =
-#endif /* !NDEBUG */
- GetDrivers().insert(Drivers::value_type(buf, this));
- assert(P.second);
- }
+ void RegisterDriver(const char *name, Driver::Type type, int priority);
public:
DriverFactoryBase() :
@@ -94,114 +69,8 @@ public:
virtual ~DriverFactoryBase() { if (this->name != NULL) GetDrivers().erase(this->name); free(this->name); }
- /**
- * Find the requested driver and return its class.
- * @param name the driver to select.
- * @post Sets the driver so GetCurrentDriver() returns it too.
- */
- static Driver *SelectDriver(const char *name, Driver::Type type)
- {
- if (GetDrivers().size() == 0) return NULL;
-
- if (*name == '\0') {
- /* Probe for this driver */
- for (int priority = 10; priority >= 0; priority--) {
- Drivers::iterator it = GetDrivers().begin();
- for (; it != GetDrivers().end(); ++it) {
- DriverFactoryBase *d = (*it).second;
-
- /* Check driver type */
- if (d->type != type) continue;
- if (d->priority != priority) continue;
-
- Driver *newd = d->CreateInstance();
- const char *err = newd->Start(NULL);
- if (err == NULL) {
- DEBUG(driver, 1, "Successfully probed %s driver '%s'", GetDriverTypeName(type), d->name);
- delete *GetActiveDriver(type);
- *GetActiveDriver(type) = newd;
- return newd;
- }
-
- DEBUG(driver, 1, "Probing %s driver '%s' failed with error: %s", GetDriverTypeName(type), d->name, err);
- delete newd;
- }
- }
- error("Couldn't find any suitable %s driver", GetDriverTypeName(type));
- } else {
- char *parm;
- char buffer[256];
- const char *parms[32];
-
- /* Extract the driver name and put parameter list in parm */
- strecpy(buffer, name, lastof(buffer));
- parm = strchr(buffer, ':');
- parms[0] = NULL;
- if (parm != NULL) {
- uint np = 0;
- /* Tokenize the parm. */
- do {
- *parm++ = '\0';
- if (np < lengthof(parms) - 1)
- parms[np++] = parm;
- while (*parm != '\0' && *parm != ',')
- parm++;
- } while (*parm == ',');
- parms[np] = NULL;
- }
-
- /* Find this driver */
- Drivers::iterator it = GetDrivers().begin();
- for (; it != GetDrivers().end(); ++it) {
- DriverFactoryBase *d = (*it).second;
-
- /* Check driver type */
- if (d->type != type) continue;
-
- /* Check driver name */
- if (strcasecmp(buffer, d->name) != 0) continue;
-
- /* Found our driver, let's try it */
- Driver *newd = d->CreateInstance();
-
- const char *err = newd->Start(parms);
- if (err != NULL) {
- delete newd;
- error("Unable to load driver '%s'. The error was: %s", d->name, err);
- }
-
- DEBUG(driver, 1, "Successfully loaded %s driver '%s'", GetDriverTypeName(type), d->name);
- delete *GetActiveDriver(type);
- *GetActiveDriver(type) = newd;
- return newd;
- }
- error("No such %s driver: %s\n", GetDriverTypeName(type), buffer);
- }
- }
-
- /**
- * Build a human readable list of available drivers, grouped by type.
- */
- static char *GetDriversInfo(char *p, const char *last)
- {
- for (Driver::Type type = Driver::DT_BEGIN; type != Driver::DT_END; type++) {
- p += snprintf(p, last - p, "List of %s drivers:\n", GetDriverTypeName(type));
-
- for (int priority = 10; priority >= 0; priority--) {
- Drivers::iterator it = GetDrivers().begin();
- for (; it != GetDrivers().end(); it++) {
- DriverFactoryBase *d = (*it).second;
- if (d->type != type) continue;
- if (d->priority != priority) continue;
- p += snprintf(p, last - p, "%18s: %s\n", d->name, d->GetDescription());
- }
- }
-
- p += snprintf(p, last - p, "\n");
- }
-
- return p;
- }
+ 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.