[prev in list] [next in list] [prev in thread] [next in thread]
List: licq-cvs
Subject: [Licq-cvs] r4441 - in branches/newapi/licq: include src
From: erijo () users ! sourceforge ! net
Date: 2006-06-07 18:20:48
Message-ID: 20060607182048.2308.qmail () mail ! thejon ! org
[Download RAW message or body]
Author: erijo
Date: 2006-06-08 03:20:48 +0900 (Thu, 08 Jun 2006)
New Revision: 4441
Modified:
branches/newapi/licq/include/licq_generalplugin.h
branches/newapi/licq/include/licq_plugin.h
branches/newapi/licq/include/licq_pluginmanager.h
branches/newapi/licq/include/licq_protocolplugin.h
branches/newapi/licq/src/generalplugin.cpp
branches/newapi/licq/src/plugin.cpp
branches/newapi/licq/src/pluginmanager.cpp
branches/newapi/licq/src/protocolplugin.cpp
Log:
Renamed all private implementation classes Private to Impl and the d pointer
to pimpl. Also added CPluginManager::getPluginById(const TPluginId).
Modified: branches/newapi/licq/include/licq_generalplugin.h
===================================================================
--- branches/newapi/licq/include/licq_generalplugin.h 2006-06-07 08:15:02 UTC (rev \
4440)
+++ branches/newapi/licq/include/licq_generalplugin.h 2006-06-07 18:20:48 UTC (rev \
4441) @@ -65,8 +65,8 @@
CGeneralPlugin(class CLicqDaemon& daemon);
private:
- class Private;
- boost::scoped_ptr<Private> d;
+ class Impl;
+ boost::scoped_ptr<Impl> pimpl;
}; // class CGeneralPlugin
//} // namespace Licq
Modified: branches/newapi/licq/include/licq_plugin.h
===================================================================
--- branches/newapi/licq/include/licq_plugin.h 2006-06-07 08:15:02 UTC (rev 4440)
+++ branches/newapi/licq/include/licq_plugin.h 2006-06-07 18:20:48 UTC (rev 4441)
@@ -100,10 +100,11 @@
CLicqDaemon& m_daemon;
private:
- class Private;
- boost::scoped_ptr<Private> d;
+ class Impl;
+ boost::scoped_ptr<Impl> pimpl;
}; // class CPlugin
+ typedef boost::shared_ptr<CPlugin> CPluginPtr;
/**
* All plugins have the following data, loaded from text files by CPluginManager.
Modified: branches/newapi/licq/include/licq_pluginmanager.h
===================================================================
--- branches/newapi/licq/include/licq_pluginmanager.h 2006-06-07 08:15:02 UTC (rev \
4440)
+++ branches/newapi/licq/include/licq_pluginmanager.h 2006-06-07 18:20:48 UTC (rev \
4441) @@ -49,6 +49,9 @@
/// Get plugin data for plugin @a name.
SPluginDataPtr getPluginData(const std::string& name);
+ /// Get plugin handle
+ CPluginPtr getPluginById(const TPluginId id);
+
/// Load the plugin @a name. Returns an unique plugin id; or 0 on error.
TPluginId loadPlugin(const std::string& name);
@@ -62,8 +65,8 @@
void stopAllPlugins();
private:
- class Private;
- boost::scoped_ptr<Private> d;
+ class Impl;
+ boost::scoped_ptr<Impl> pimpl;
}; // class CPluginManager
//} // namespace Licq
Modified: branches/newapi/licq/include/licq_protocolplugin.h
===================================================================
--- branches/newapi/licq/include/licq_protocolplugin.h 2006-06-07 08:15:02 UTC (rev \
4440)
+++ branches/newapi/licq/include/licq_protocolplugin.h 2006-06-07 18:20:48 UTC (rev \
4441) @@ -34,8 +34,8 @@
CProtocolPlugin(class CLicqDaemon& daemon);
private:
- class Private;
- boost::scoped_ptr<Private> d;
+ class Impl;
+ boost::scoped_ptr<Impl> pimpl;
}; // class CProtocolPlugin
//} // namespace Licq
Modified: branches/newapi/licq/src/generalplugin.cpp
===================================================================
--- branches/newapi/licq/src/generalplugin.cpp 2006-06-07 08:15:02 UTC (rev 4440)
+++ branches/newapi/licq/src/generalplugin.cpp 2006-06-07 18:20:48 UTC (rev 4441)
@@ -22,23 +22,23 @@
//FIXME NEWAPI using namespace Licq;
-//BEGIN CGeneralPlugin::Private
-class CGeneralPlugin::Private
+//BEGIN CGeneralPlugin::Impl
+class CGeneralPlugin::Impl
{
public:
- Private();
-}; // class CGeneralPlugin::Private
+ Impl();
+}; // class CGeneralPlugin::Impl
-CGeneralPlugin::Private::Private()
+CGeneralPlugin::Impl::Impl()
{
}
-//END CGeneralPlugin::Private
+//END CGeneralPlugin::Impl
//BEGIN CGeneralPlugin
CGeneralPlugin::CGeneralPlugin(CLicqDaemon& daemon)
- : CPlugin(daemon), d(new Private)
+ : CPlugin(daemon), pimpl(new Impl)
{
}
Modified: branches/newapi/licq/src/plugin.cpp
===================================================================
--- branches/newapi/licq/src/plugin.cpp 2006-06-07 08:15:02 UTC (rev 4440)
+++ branches/newapi/licq/src/plugin.cpp 2006-06-07 18:20:48 UTC (rev 4441)
@@ -56,14 +56,14 @@
}
-//BEGIN CPlugin::Private
+//BEGIN CPlugin::Impl
typedef std::list<SEventPtr> TEventQueue;
-class CPlugin::Private
+class CPlugin::Impl
{
public:
- Private();
- ~Private();
+ Impl();
+ ~Impl();
// A unique id for every loaded plugin
const TPluginId m_id;
@@ -81,9 +81,9 @@
TEventQueue m_eventQueue;
pthread_mutex_t m_eventQueueMutex;
pthread_cond_t m_eventQueueNonEmpty;
-}; // class CPlugin::Private
+}; // class CPlugin::Impl
-CPlugin::Private::Private()
+CPlugin::Impl::Impl()
: m_id(getNextPluginId()), m_eventLoopRunning(true), m_exitCode(0)
{
m_threadHandle = new pthread_t;
@@ -91,19 +91,19 @@
pthread_cond_init(&m_eventQueueNonEmpty, NULL);
}
-CPlugin::Private::~Private()
+CPlugin::Impl::~Impl()
{
pthread_cond_destroy(&m_eventQueueNonEmpty);
pthread_mutex_destroy(&m_eventQueueMutex);
delete m_threadHandle;
}
-//END CPlugin::Private
+//END CPlugin::Impl
//BEGIN CPlugin
CPlugin::CPlugin(CLicqDaemon& daemon)
- : m_daemon(daemon), d(new Private)
+ : m_daemon(daemon), pimpl(new Impl)
{
}
@@ -129,12 +129,12 @@
pthread_t* CPlugin::getThreadHandle() const
{
- return d->m_threadHandle;
+ return pimpl->m_threadHandle;
}
TPluginId CPlugin::getId() const
{
- return d->m_id;
+ return pimpl->m_id;
}
long CPlugin::exec()
@@ -144,9 +144,9 @@
// Thread B: appends event to the queue, signals this and waits for A to process \
the event. // Thread A: starts the condition wait, waiting for a signal that never \
will arrive. // => Deadlock!
- CLock queue(&d->m_eventQueueMutex);
+ CLock queue(&pimpl->m_eventQueueMutex);
- while (d->m_eventLoopRunning)
+ while (pimpl->m_eventLoopRunning)
{
if (hasPendingEvents())
{
@@ -155,24 +155,24 @@
queue.lock();
}
else
- pthread_cond_wait(&d->m_eventQueueNonEmpty, queue.getMutex());
+ pthread_cond_wait(&pimpl->m_eventQueueNonEmpty, queue.getMutex());
}
- return d->m_exitCode;
+ return pimpl->m_exitCode;
}
void CPlugin::exit(long retvalue)
{
// Lock the event queue
- CLock queue(&d->m_eventQueueMutex);
+ CLock queue(&pimpl->m_eventQueueMutex);
// We only update the exit code if the plugin is running.
// This way exit may be called multiple times without destroying
// the original exit code.
- if (d->m_eventLoopRunning)
+ if (pimpl->m_eventLoopRunning)
{
- d->m_exitCode = retvalue;
- d->m_eventLoopRunning = false;
+ pimpl->m_exitCode = retvalue;
+ pimpl->m_eventLoopRunning = false;
}
wakeUp();
@@ -185,23 +185,23 @@
{
// We just signal the non-empty condition. No need to lock the mutex first.
// See: http://www.opengroup.org/onlinepubs/007908799/xsh/pthread_cond_signal.html
- pthread_cond_signal(&d->m_eventQueueNonEmpty);
+ pthread_cond_signal(&pimpl->m_eventQueueNonEmpty);
}
// This function can be called with the event queue mutex locked or unlocked.
bool CPlugin::hasPendingEvents() const
{
- return ! d->m_eventQueue.empty();
+ return ! pimpl->m_eventQueue.empty();
}
// The event queue mutex must be unlocked before calling this function
void CPlugin::processEvents()
{
// Lock the event queue
- CLock queue(&d->m_eventQueueMutex);
+ CLock queue(&pimpl->m_eventQueueMutex);
- TEventQueue::iterator it = d->m_eventQueue.begin();
- TEventQueue::const_iterator end = d->m_eventQueue.end();
+ TEventQueue::iterator it = pimpl->m_eventQueue.begin();
+ TEventQueue::const_iterator end = pimpl->m_eventQueue.end();
while (it != end)
{
SEventPtr event = *it;
@@ -216,7 +216,7 @@
pthread_cond_signal(&event->done);
// Drop the event
- d->m_eventQueue.erase(it++);
+ pimpl->m_eventQueue.erase(it++);
}
}
@@ -224,7 +224,7 @@
bool CPlugin::handleEvent(const std::string& signal, const TCallback& callback, void \
*data, bool synchronous) {
// Lock the event queue
- CLock queue(&d->m_eventQueueMutex);
+ CLock queue(&pimpl->m_eventQueueMutex);
// By making it a shared_ptr the event will be deleted in both the
// async and sync case, without any extra work.
@@ -239,7 +239,7 @@
event->data = data; // TODO this should create a copy of data and assign that \
instead
// Add the event to the queue
- d->m_eventQueue.push_back(event);
+ pimpl->m_eventQueue.push_back(event);
bool eventResult = true;
if (synchronous)
Modified: branches/newapi/licq/src/pluginmanager.cpp
===================================================================
--- branches/newapi/licq/src/pluginmanager.cpp 2006-06-07 08:15:02 UTC (rev 4440)
+++ branches/newapi/licq/src/pluginmanager.cpp 2006-06-07 18:20:48 UTC (rev 4441)
@@ -43,7 +43,6 @@
//BEGIN SPluginInstance
-typedef boost::shared_ptr<CPlugin> CPluginPtr;
typedef boost::shared_ptr<void> TDlHandle;
/**
@@ -81,18 +80,18 @@
-//BEGIN CPluginManager::Private
+//BEGIN CPluginManager::Impl
/// Map a plugin id to an instance.
typedef std::map<TPluginId, SPluginInstancePtr> TId2Instance;
/// Map a plugin name to its data.
typedef std::map<std::string, SPluginDataPtr> TName2Data;
-class CPluginManager::Private
+class CPluginManager::Impl
{
public:
- Private(CLicqDaemon& daemon);
- ~Private();
+ Impl(CLicqDaemon& daemon);
+ ~Impl();
CLicqDaemon& m_daemon;
@@ -104,28 +103,28 @@
// Read-only data structure (except by CPluginManager::loadPluginData).
TName2Data m_pluginData;
-}; // class CPluginManager::Private
+}; // class CPluginManager::Impl
-CPluginManager::Private::Private(CLicqDaemon& daemon)
+CPluginManager::Impl::Impl(CLicqDaemon& daemon)
: m_daemon(daemon)
{
pthread_mutex_init(&m_instancesMutex, NULL);
}
-CPluginManager::Private::~Private()
+CPluginManager::Impl::~Impl()
{
pthread_mutex_destroy(&m_instancesMutex);
}
-//END CPluginManager::Private
+//END CPluginManager::Impl
//BEGIN CPluginManager
CPluginManager::CPluginManager(CLicqDaemon& daemon, const std::string& libdir, const \
std::string& datadir)
- : d(new Private(daemon))
+ : pimpl(new Impl(daemon))
{
- d->m_libdir = libdir;
- d->m_datadir = datadir;
+ pimpl->m_libdir = libdir;
+ pimpl->m_datadir = datadir;
}
CPluginManager::~CPluginManager()
@@ -159,7 +158,7 @@
return false;
namespace bfs = boost::filesystem;
- bfs::path dir(d->m_datadir, bfs::native); // FIXME may throw...
+ bfs::path dir(pimpl->m_datadir, bfs::native); // FIXME may throw...
bfs::directory_iterator file(dir);
bfs::directory_iterator fileEnd;
@@ -213,7 +212,7 @@
}
if (data->name.size() > 0 && data->library.size() > 0)
- d->m_pluginData[data->name] = data; // This will make data into a const \
pointer + pimpl->m_pluginData[data->name] = data; // This will make data into a \
const pointer }
return (isDone = true);
@@ -223,8 +222,8 @@
{
std::vector<SPluginDataPtr> retval;
- TName2Data::iterator it = d->m_pluginData.begin();
- TName2Data::const_iterator end = d->m_pluginData.end();
+ TName2Data::iterator it = pimpl->m_pluginData.begin();
+ TName2Data::const_iterator end = pimpl->m_pluginData.end();
for (; it != end; it++)
{
@@ -240,12 +239,12 @@
*/
SPluginDataPtr CPluginManager::getPluginData(const TPluginId id)
{
- CLock lock(&d->m_instancesMutex);
+ CLock lock(&pimpl->m_instancesMutex);
- if (d->m_instances.find(id) == d->m_instances.end())
+ if (pimpl->m_instances.find(id) == pimpl->m_instances.end())
return SPluginDataPtr();
- return d->m_instances[id]->data;
+ return pimpl->m_instances[id]->data;
}
/**
@@ -253,13 +252,27 @@
*/
SPluginDataPtr CPluginManager::getPluginData(const std::string& name)
{
- if (d->m_pluginData.find(name) == d->m_pluginData.end())
+ if (pimpl->m_pluginData.find(name) == pimpl->m_pluginData.end())
return SPluginDataPtr();
- return d->m_pluginData[name];
+ return pimpl->m_pluginData[name];
}
/**
+ * If the id doesn't exist, the returned pointer is "empty" and
+ * retvalue.get() == 0 holds.
+ */
+CPluginPtr CPluginManager::getPluginById(const TPluginId id)
+{
+ CLock lock(&pimpl->m_instancesMutex);
+
+ if (pimpl->m_instances.find(id) == pimpl->m_instances.end())
+ return CPluginPtr();
+
+ return pimpl->m_instances[id]->plugin;
+}
+
+/**
* Loads the plugin @a name from its dynamic library, instantiates the plugin and
* calls the initialize method, giving the plugin a chance to initialize.
* The plugin is @b not started.
@@ -268,14 +281,14 @@
*/
TPluginId CPluginManager::loadPlugin(const std::string& name)
{
- if (d->m_pluginData.find(name) == d->m_pluginData.end())
+ if (pimpl->m_pluginData.find(name) == pimpl->m_pluginData.end())
{
gLog.Error(tr("%sNo plugin named %s found.\n"), L_ERRORxSTR, name.c_str());
return 0;
}
// Open the library
- const std::string lib = d->m_libdir + d->m_pluginData[name]->library;
+ const std::string lib = pimpl->m_libdir + pimpl->m_pluginData[name]->library;
void *handle = dlopen(lib.c_str(), DLOPEN_POLICY);
if (!handle)
{
@@ -334,9 +347,9 @@
// Create the plugin instance
SPluginInstancePtr instance(new SPluginInstance);
- instance->plugin = CPluginPtr(createPlugin(d->m_daemon), destroyPlugin);
+ instance->plugin = CPluginPtr(createPlugin(pimpl->m_daemon), destroyPlugin);
instance->libraryHandle = libhandle;
- instance->data = d->m_pluginData[name];
+ instance->data = pimpl->m_pluginData[name];
gLog.Info(tr("%sLoaded plugin %s (%s), built %s at %s.\n"), L_PLUGINxSTR,
name.c_str(), instance->data->version.c_str(),
@@ -348,8 +361,8 @@
return 0;
}
- CLock lock(&d->m_instancesMutex);
- d->m_instances[instance->plugin->getId()] = instance;
+ CLock lock(&pimpl->m_instancesMutex);
+ pimpl->m_instances[instance->plugin->getId()] = instance;
return instance->plugin->getId();
}
@@ -371,12 +384,12 @@
*/
bool CPluginManager::startPlugin(const TPluginId id)
{
- CLock lock(&d->m_instancesMutex);
+ CLock lock(&pimpl->m_instancesMutex);
- if (d->m_instances.find(id) == d->m_instances.end())
+ if (pimpl->m_instances.find(id) == pimpl->m_instances.end())
return false;
- SPluginInstancePtr instance = d->m_instances[id];
+ SPluginInstancePtr instance = pimpl->m_instances[id];
if (instance->started)
{
@@ -423,15 +436,15 @@
*/
long CPluginManager::stopPlugin(const TPluginId id)
{
- CLock lock(&d->m_instancesMutex);
+ CLock lock(&pimpl->m_instancesMutex);
- if (d->m_instances.find(id) == d->m_instances.end())
+ if (pimpl->m_instances.find(id) == pimpl->m_instances.end())
return 0;
- SPluginInstancePtr instance = d->m_instances[id];
+ SPluginInstancePtr instance = pimpl->m_instances[id];
long retval = stopPluginInstance(instance);
- d->m_instances.erase(id);
+ pimpl->m_instances.erase(id);
return retval;
}
@@ -440,14 +453,14 @@
*/
void CPluginManager::stopAllPlugins()
{
- CLock lock(&d->m_instancesMutex);
+ CLock lock(&pimpl->m_instancesMutex);
- TId2Instance::iterator it = d->m_instances.begin();
- TId2Instance::const_iterator end = d->m_instances.end();
+ TId2Instance::iterator it = pimpl->m_instances.begin();
+ TId2Instance::const_iterator end = pimpl->m_instances.end();
while (it != end)
{
stopPluginInstance(it->second);
- d->m_instances.erase(it++);
+ pimpl->m_instances.erase(it++);
}
}
Modified: branches/newapi/licq/src/protocolplugin.cpp
===================================================================
--- branches/newapi/licq/src/protocolplugin.cpp 2006-06-07 08:15:02 UTC (rev 4440)
+++ branches/newapi/licq/src/protocolplugin.cpp 2006-06-07 18:20:48 UTC (rev 4441)
@@ -22,23 +22,23 @@
//FIXME NEWAPI using namespace Licq;
-//BEGIN CProtocolPlugin::Private
-class CProtocolPlugin::Private
+//BEGIN CProtocolPlugin::Impl
+class CProtocolPlugin::Impl
{
public:
- Private();
-}; // class CProtocolPlugin::Private
+ Impl();
+}; // class CProtocolPlugin::Impl
-CProtocolPlugin::Private::Private()
+CProtocolPlugin::Impl::Impl()
{
}
-//END CProtocolPlugin::Private
+//END CProtocolPlugin::Impl
//BEGIN CProtocolPlugin
CProtocolPlugin::CProtocolPlugin(CLicqDaemon& daemon)
- : CPlugin(daemon), d(new Private)
+ : CPlugin(daemon), pimpl(new Impl)
{
}
_______________________________________________
Licq-cvs mailing list
Licq-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/licq-cvs
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic