You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mitlib.pub/MITLIB/commdll/RfIdFactory.h

68 lines
1.7 KiB
C++

#ifndef _RFIDFACTORY_H_
#define _RFIDFACTORY_H_
class IRfId;
#ifdef BUILD_COMMDLL
#define COMMDLL_DLLCLASS __declspec(dllexport)
#else
#define COMMDLL_DLLCLASS __declspec(dllimport)
#endif
class COMMDLL_DLLCLASS CAbstractRfIdFactory
{
private:
CString m_RfIDType;
public:
explicit CAbstractRfIdFactory(const CString &name);
virtual ~CAbstractRfIdFactory();
virtual void *Create(int index) = 0;
};
/**
* @class RfIdFactory
*
* @brief The RfIdFactory is used to create all motors.
*
*/
class COMMDLL_DLLCLASS RfIdFactory
{
private:
RfIdFactory(void);
public:
virtual ~RfIdFactory(void);
static RfIdFactory &Instance();
void AddFactory(const CString &name, CAbstractRfIdFactory *pFactory);
void RemoveFactory(const CString &name);
IRfId *Create(int index);
};
/**
* @def REGISTER_RFID_FACTORY(type, rfid_class)
*
* @brief A macro that defines rfid factory.
*
* The factories are registered to the RfIdFactory which uses them to create RfID scanners.
*
* Example usage:
*
* \code{.cpp}
* REGISTER_RFID_FACTORY("Omron600", RfId_Omron600)
* \endcode
*
* @param type The rfid type.
* @param rfid_class The class of the rfid that the factory creates.
*/
#define REGISTER_RFID_FACTORY(r_type, rfid_class) \
class Factory ## rfid_class : public CAbstractRfIdFactory \
{ \
public: \
Factory ## rfid_class() : CAbstractRfIdFactory(r_type){} \
void *Create(int index) \
{ return new rfid_class(index); } \
}; \
static Factory ## rfid_class StaticFactory ## rfid_class;
#endif // _RFIDFACTORY_H_