27 |
#include <vector> |
#include <vector> |
28 |
|
|
29 |
#include "../common/LinuxSamplerException.h" |
#include "../common/LinuxSamplerException.h" |
30 |
|
#include "../drivers/DeviceParameterFactory.h" |
31 |
#include "MidiInputDevice.h" |
#include "MidiInputDevice.h" |
32 |
|
|
33 |
#define REGISTER_MIDI_INPUT_DRIVER(DriverName,DriverClass) static LinuxSampler::MidiInputDeviceFactory::InnerFactoryRegistrator<DriverClass> __auto_register_midi_input_driver__##DriverClass(DriverName) |
#define REGISTER_MIDI_INPUT_DRIVER(DriverClass) static LinuxSampler::MidiInputDeviceFactory::InnerFactoryRegistrator<DriverClass> __auto_register_midi_input_driver__##DriverClass |
34 |
|
#define REGISTER_MIDI_INPUT_DRIVER_PARAMETER(DriverClass, ParameterClass) static LinuxSampler::MidiInputDeviceFactory::ParameterRegistrator<DriverClass, DriverClass::ParameterClass> __auto_register_midi_input_driver_parameter__##DriverClass##ParameterClass |
35 |
|
|
36 |
namespace LinuxSampler { |
namespace LinuxSampler { |
37 |
|
|
39 |
public: |
public: |
40 |
class InnerFactory { |
class InnerFactory { |
41 |
public: |
public: |
42 |
virtual MidiInputDevice* Create(std::map<String,String>& Parameters) = 0; |
virtual MidiInputDevice* Create(std::map<String,DeviceCreationParameter*>& Parameters) = 0; |
|
virtual std::map<String,DeviceCreationParameter*> AvailableParameters() = 0; |
|
43 |
virtual String Description() = 0; |
virtual String Description() = 0; |
44 |
virtual String Version() = 0; |
virtual String Version() = 0; |
45 |
}; |
}; |
47 |
template <class Driver_T> |
template <class Driver_T> |
48 |
class InnerFactoryTemplate : public InnerFactory { |
class InnerFactoryTemplate : public InnerFactory { |
49 |
public: |
public: |
50 |
virtual MidiInputDevice* Create(std::map<String,String>& Parameters) { return new Driver_T(Parameters); } |
virtual MidiInputDevice* Create(std::map<String,DeviceCreationParameter*>& Parameters) { return new Driver_T(Parameters); } |
|
virtual std::map<String,DeviceCreationParameter*> AvailableParameters() { return Driver_T::AvailableParameters(); } |
|
51 |
virtual String Description() { return Driver_T::Description(); } |
virtual String Description() { return Driver_T::Description(); } |
52 |
virtual String Version() { return Driver_T::Version(); } |
virtual String Version() { return Driver_T::Version(); } |
53 |
}; |
}; |
55 |
template <class Driver_T> |
template <class Driver_T> |
56 |
class InnerFactoryRegistrator { |
class InnerFactoryRegistrator { |
57 |
public: |
public: |
58 |
InnerFactoryRegistrator(String DriverName) { |
InnerFactoryRegistrator() { |
59 |
MidiInputDeviceFactory::InnerFactories[DriverName] = new InnerFactoryTemplate<Driver_T>; |
MidiInputDeviceFactory::InnerFactories[Driver_T::Name()] = new InnerFactoryTemplate<Driver_T>; |
60 |
|
MidiInputDeviceFactory::ParameterFactories[Driver_T::Name()] = new DeviceParameterFactory(); |
61 |
} |
} |
62 |
}; |
}; |
63 |
|
|
64 |
static MidiInputDevice* Create(String DriverName, std::map<String,String>& Parameters) throw (LinuxSamplerException); |
template <class Driver_T, class Parameter_T> |
65 |
|
class ParameterRegistrator { |
66 |
|
public: |
67 |
|
ParameterRegistrator() { |
68 |
|
DeviceParameterFactory::Register<Parameter_T>(MidiInputDeviceFactory::ParameterFactories[Driver_T::Name()]); |
69 |
|
} |
70 |
|
}; |
71 |
|
|
72 |
|
|
73 |
|
static MidiInputDevice* Create(String DriverName, std::map<String,String> Parameters) throw (LinuxSamplerException); |
74 |
static std::vector<String> AvailableDrivers(); |
static std::vector<String> AvailableDrivers(); |
75 |
static String AvailableDriversAsString(); |
static String AvailableDriversAsString(); |
76 |
static std::map<String,DeviceCreationParameter*> GetAvailableDriverParameters(String DriverName) throw (LinuxSamplerException); |
static std::map<String,DeviceCreationParameter*> GetAvailableDriverParameters(String DriverName) throw (LinuxSamplerException); |
80 |
|
|
81 |
protected: |
protected: |
82 |
static std::map<String, InnerFactory*> InnerFactories; |
static std::map<String, InnerFactory*> InnerFactories; |
83 |
|
static std::map<String, DeviceParameterFactory*> ParameterFactories; |
84 |
}; |
}; |
85 |
|
|
86 |
} // namespace LinuxSampler |
} // namespace LinuxSampler |