Miam-Player  0.8.0
A nice music player
factory.h File Reference
#include <ctype.h>
#include <cstring>
#include <time.h>
#include <map>
#include <vector>
#include <algorithm>
#include "singleton.h"

Go to the source code of this file.

Classes

class  Factory< Id, T, Class >
 

Macros

#define FACTORY_REGISTER(BASE, _ID, NAME)   FACTORY_REGISTER_ID_TYPE(BASE, BASE##Id_##_ID, BASE##_ID, NAME)
 
#define FACTORY_REGISTER_ID_TYPE(BASE, ID, TYPE, NAME)
 
#define FACTORY_REGISTER_ID_TYPE_AUTO(BASE, ID, TYPE, NAME)
 
#define FACTORY_DEFINE(T)
 

Macro Definition Documentation

#define FACTORY_DEFINE (   T)
Value:
class T##Factory : public Factory<T##Id, T, T##Factory> {}; \
bool T::Register(T##Id id, T##Creator c, const char *name) { \
DBG(#T "::Register(..., %s)\n", name); \
return T##Factory::Instance().registerCreator(id, c) && T##Factory::Instance().registerIdName(id, name); \
} \
T* T::create(T##Id id) {return T##Factory::Instance().create(id);} \
T* T::create(const char* name) { return T::create(T::id(name));} \
T##Id* T::next(T##Id *id) { \
const std::vector<T##Id>& ids = T##Factory::Instance().registeredIds(); \
if (!id) return (T##Id*)&ids[0]; \
T##Id *id0 = (T##Id*)&ids[0], *id1 = (T##Id*)&ids[ids.size() - 1]; \
if (id >= id0 && id < id1) return id + 1; \
if (id == id1) return NULL; \
std::vector<T##Id>::const_iterator it = std::find(ids.begin(), ids.end(), *id); \
if (it == ids.end()) return NULL; \
return (T##Id*)&*(it++); \
} \
T##Id T::id(const char* name) { DBG(#T "::id(\"%s\")\n", name); return T##Factory::Instance().id(name, false);} \
const char* T::name(T##Id id) {return T##Factory::Instance().name(id);}
Definition: factory.h:84
static Class & Instance()
#define FACTORY_REGISTER (   BASE,
  _ID,
  NAME 
)    FACTORY_REGISTER_ID_TYPE(BASE, BASE##Id_##_ID, BASE##_ID, NAME)
#define FACTORY_REGISTER_ID_TYPE (   BASE,
  ID,
  TYPE,
  NAME 
)
Value:
FACTORY_REGISTER_ID_TYPE_AUTO(BASE, ID, TYPE, NAME) \
bool Register##TYPE##_Man() { \
return BASE::Register<TYPE>(ID, NAME); \
}
#define FACTORY_REGISTER_ID_TYPE_AUTO(BASE, ID, TYPE, NAME)
Definition: factory.h:50
#define FACTORY_REGISTER_ID_TYPE_AUTO (   BASE,
  ID,
  TYPE,
  NAME 
)
Value:
namespace { \
static const struct factory_register_##TYPE { \
inline factory_register_##TYPE() { \
BASE::Register<TYPE>(ID, NAME); \
} \
} sInit_##TYPE; \
}