[SCM] calf/master: Remove by pointer, not by position - better for rearranged lists.

js at users.alioth.debian.org js at users.alioth.debian.org
Tue May 7 15:40:31 UTC 2013


The following commit has been merged in the master branch:
commit 71303567b727e4634f36fae7bb5473d7947c5cd7
Author: Krzysztof Foltman <wdev at foltman.com>
Date:   Mon Dec 27 00:21:32 2010 +0000

    Remove by pointer, not by position - better for rearranged lists.

diff --git a/src/calf/jackhost.h b/src/calf/jackhost.h
index bc0ffe7..3edb720 100644
--- a/src/calf/jackhost.h
+++ b/src/calf/jackhost.h
@@ -46,7 +46,7 @@ public:
 
     jack_client();
     void add(jack_host *plugin);
-    void del(int item);
+    void del(jack_host *plugin);
     void open(const char *client_name);
     std::string get_name();
     void activate();
diff --git a/src/host_session.cpp b/src/host_session.cpp
index c5b65e8..fe75b6f 100644
--- a/src/host_session.cpp
+++ b/src/host_session.cpp
@@ -181,7 +181,7 @@ void host_session::remove_plugin(plugin_ctl_iface *plugin)
         if (plugins[i] == plugin)
         {
             instances.erase(plugins[i]->instance_name);
-            client.del(i);
+            client.del(plugins[i]);
             plugins.erase(plugins.begin() + i);
             main_win->del_plugin(plugin);
             delete plugin;
@@ -194,8 +194,8 @@ void host_session::remove_all_plugins()
 {
     while(!plugins.empty())
     {
-        plugin_ctl_iface *plugin = plugins[0];
-        client.del(0);
+        jack_host *plugin = plugins[0];
+        client.del(plugins[0]);
         plugins.erase(plugins.begin());
         main_win->del_plugin(plugin);
         delete plugin;
diff --git a/src/jack_client.cpp b/src/jack_client.cpp
index af380d1..3cf4135 100644
--- a/src/jack_client.cpp
+++ b/src/jack_client.cpp
@@ -45,10 +45,18 @@ void jack_client::add(jack_host *plugin)
     plugins.push_back(plugin);
 }
 
-void jack_client::del(int item)
+void jack_client::del(jack_host *plugin)
 {
     calf_utils::ptlock lock(mutex);
-    plugins.erase(plugins.begin()+item);
+    for (unsigned int i = 0; i < plugins.size(); i++)
+    {
+        if (plugins[i] == plugin)
+        {
+            plugins.erase(plugins.begin()+i);
+            return;
+        }
+    }
+    assert(0);
 }
 
 void jack_client::open(const char *client_name)

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list