stec-platform
pluginclass.h
1 #ifndef PLUGINCLASS_H
2 #define PLUGINCLASS_H
3 
4 #include <QThread>
5 #include <QtPlugin>
6 #include <QObject>
7 #include <QThread>
8 #include <QDebug>
9 #include <QFileInfo>
10 #include <QMutex>
11 #include <QWaitCondition>
12 #include <platform_global.h>
13 #include "memoryheap.h"
14 
15 
16 #define VREM_PLUGIN_INSTANCE(IMPLEMENTATION) \
17 { \
18  static QPointer<IMPLEMENTATION> _instance; \
19  _instance = new IMPLEMENTATION; \
20  return _instance; \
21 }
22 
23 #define VREM_PLUGIN(PLUGIN, PLUGINCLASS) \
24  Q_PLUGIN_VERIFICATION_DATA \
25  Q_EXTERN_C Q_DECL_EXPORT \
26  const char * Q_STANDARD_CALL qt_plugin_query_verification_data() \
27  { return qt_plugin_verification_data; } \
28  Q_EXTERN_C Q_DECL_EXPORT QObject * Q_STANDARD_CALL qt_plugin_instance() \
29  VREM_PLUGIN_INSTANCE(PLUGINCLASS)
30 
31 
40 class PLATFORMSHARED_EXPORT PluginClass : public QObject
41 {
42  Q_OBJECT
43 
44 private :
45 
47  int numberOfInstances;
48 
49 protected :
50 
52  QMutex LoaderPluginLock, memLock;
53 
55  QWaitCondition rtnToEnd;
56  QThread *pThread;
57 
58 public:
59 
61  explicit PluginClass(QObject *parent = 0);
62 
64  virtual ~PluginClass();
65 
68  {
69  QMutexLocker jlock( & LoaderPluginLock);
70  return numberOfInstances;
71  }
72 
73 #if QT_VERSION >= 0x050000
74  Q_PLUGIN_METADATA(IID "Platform.PluginClass/1.0" )
75 #endif
76 
86  virtual void preload(int UniqueID, QString InstanceName, QString pluginName, VremVArray Arguments, VremVArray Licenses )
87  {
88  Q_UNUSED(InstanceName)
89  Q_UNUSED(Arguments)
90  Q_UNUSED(Licenses)
91  Q_UNUSED(pluginName)
92  Q_UNUSED(UniqueID)
93  }
94 
104  virtual void load(int UniqueID, QString InstanceName, QString pluginName, VremVArray Arguments, VremVArray Licenses )
105  {
106  Q_UNUSED(InstanceName)
107  Q_UNUSED(Arguments)
108  Q_UNUSED(Licenses)
109  Q_UNUSED(pluginName)
110  Q_UNUSED(UniqueID)
111  }
112 
118  virtual void unload(int UniqueID)
119  {
120  Q_UNUSED(UniqueID)
121  }
122 
123  virtual void ReleaseInstance(int UniqueID )
124  {
125  Q_UNUSED(UniqueID)
126  }
127 
128 
138  void Begin(int UniqueID, QString InstanceName, QString pluginName, VremVArray Arguments, VremVArray Licenses);
139 
145  void End(int UniqueID);
146 
147 signals:
148  void signal_UnloadUs(int uniqueId);
149 
150  void signal_load( int UniqueID, QString InstanceName, QString pluginName, VremVArray Arguments, VremVArray Licenses );
151  void signal_unload(int UniqueID);
152 
153 private slots:
154  void slot_load( int UniqueID, QString InstanceName, QString pluginName, VremVArray Arguments, VremVArray Licenses);
155  void slot_unload(int UniqueID);
156 
157  void slot_UnLoadUsFromThread(int uniqueId);
158 
159 };
160 
161 Q_DECLARE_INTERFACE ( PluginClass, "Platform.PluginClass/1.0" );
162 
163 
164 #endif // PLUGINCLASS_H
The PluginClass class the base for all plugin.
Definition: pluginclass.h:41
int getNumberOfInstances(void)
returns the total number of times this plugin was loaded into menory
Definition: pluginclass.h:67
virtual void unload(int UniqueID)
unload called by the loader on close, it is in the plugin thread
Definition: pluginclass.h:118
virtual void load(int UniqueID, QString InstanceName, QString pluginName, VremVArray Arguments, VremVArray Licenses)
load called by the loader, it is in the thread of the plugin on init
Definition: pluginclass.h:104
virtual void preload(int UniqueID, QString InstanceName, QString pluginName, VremVArray Arguments, VremVArray Licenses)
preload called by the loader, it is in the main thread on init
Definition: pluginclass.h:86
QMutex LoaderPluginLock
locks the plugin for thread destruction and creation and addition
Definition: pluginclass.h:52
QWaitCondition rtnToEnd
Wait state for wake up.
Definition: pluginclass.h:55