[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