[beast: 63/73] BSE: SF2: move sound_fonts GList to SoundFontRepoImpl and use std::vector
- From: Tim Janik <timj src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [beast: 63/73] BSE: SF2: move sound_fonts GList to SoundFontRepoImpl and use std::vector
- Date: Thu, 23 Mar 2017 21:46:58 +0000 (UTC)
commit e68f761fb015d5a8d155e6cbdf2a43f8855008bf
Author: Stefan Westerfeld <stefan space twc de>
Date: Mon Feb 13 16:42:42 2017 +0100
BSE: SF2: move sound_fonts GList to SoundFontRepoImpl and use std::vector
Signed-off-by: Stefan Westerfeld <stefan space twc de>
bse/bsesoundfontrepo.cc | 51 +++++++++++++++++++++++++++-------------------
bse/bsesoundfontrepo.hh | 5 +--
2 files changed, 32 insertions(+), 24 deletions(-)
---
diff --git a/bse/bsesoundfontrepo.cc b/bse/bsesoundfontrepo.cc
index b54c260..f06470d 100644
--- a/bse/bsesoundfontrepo.cc
+++ b/bse/bsesoundfontrepo.cc
@@ -101,7 +101,6 @@ bse_sound_font_repo_init (BseSoundFontRepo *sfrepo)
sfrepo->fluid_settings = new_fluid_settings();
sfrepo->fluid_synth = new_fluid_synth (sfrepo->fluid_settings);
sfrepo->fluid_events = NULL;
- sfrepo->sound_fonts = NULL;
sfrepo->fluid_mix_freq = 0;
sfrepo->n_fluid_channels = 0;
@@ -179,10 +178,7 @@ bse_sound_font_repo_prepare (BseSource *source)
static void
bse_sound_font_repo_release_children (BseContainer *container)
{
- BseSoundFontRepo *sfrepo = BSE_SOUND_FONT_REPO (container);
-
- while (sfrepo->sound_fonts)
- bse_container_remove_item (container, BSE_ITEM (sfrepo->sound_fonts->data));
+ /* real release children: done in ~SoundFontRepoImpl() */
/* chain parent class' handler */
BSE_CONTAINER_CLASS (parent_class)->release_children (container);
@@ -193,8 +189,6 @@ bse_sound_font_repo_dispose (GObject *object)
{
BseSoundFontRepo *sfrepo = BSE_SOUND_FONT_REPO (object);
- bse_sound_font_repo_forall_items (BSE_CONTAINER (sfrepo), unload_sound_font, sfrepo);
-
if (sfrepo->fluid_synth)
{
delete_fluid_synth (sfrepo->fluid_synth);
@@ -248,10 +242,11 @@ static void
bse_sound_font_repo_add_item (BseContainer *container,
BseItem *item)
{
- BseSoundFontRepo *sfrepo = BSE_SOUND_FONT_REPO (container);
+ BseSoundFontRepo *sfrepo = BSE_SOUND_FONT_REPO (container);
+ Bse::SoundFontRepoImpl *sfrepo_impl = sfrepo->as<Bse::SoundFontRepoImpl *>();
if (g_type_is_a (BSE_OBJECT_TYPE (item), BSE_TYPE_SOUND_FONT))
- sfrepo->sound_fonts = g_list_append (sfrepo->sound_fonts, item);
+ sfrepo_impl->sound_fonts.push_back (BSE_SOUND_FONT (item));
else
g_warning ("BseSoundFontRepo: cannot hold non-sound-font item type `%s'",
BSE_OBJECT_TYPE_NAME (item));
@@ -265,17 +260,12 @@ bse_sound_font_repo_forall_items (BseContainer *container,
BseForallItemsFunc func,
gpointer data)
{
- BseSoundFontRepo *sfrepo = BSE_SOUND_FONT_REPO (container);
- GList *list;
+ BseSoundFontRepo *sfrepo = BSE_SOUND_FONT_REPO (container);
+ Bse::SoundFontRepoImpl *sfrepo_impl = sfrepo->as<Bse::SoundFontRepoImpl *>();
- list = sfrepo->sound_fonts;
- while (list)
+ for (auto sound_font : sfrepo_impl->sound_fonts)
{
- BseItem *item;
-
- item = BSE_ITEM (list->data);
- list = list->next;
- if (!func (item, data))
+ if (!func (sound_font, data))
return;
}
}
@@ -284,10 +274,20 @@ static void
bse_sound_font_repo_remove_item (BseContainer *container,
BseItem *item)
{
- BseSoundFontRepo *sfrepo = BSE_SOUND_FONT_REPO (container);
+ BseSoundFontRepo *sfrepo = BSE_SOUND_FONT_REPO (container);
+ Bse::SoundFontRepoImpl *sfrepo_impl = sfrepo->as<Bse::SoundFontRepoImpl *>();
if (g_type_is_a (BSE_OBJECT_TYPE (item), BSE_TYPE_SOUND_FONT))
- sfrepo->sound_fonts = g_list_remove (sfrepo->sound_fonts, item);
+ {
+ for (auto it = sfrepo_impl->sound_fonts.begin(); it != sfrepo_impl->sound_fonts.end(); it++)
+ {
+ if (*it == item)
+ {
+ sfrepo_impl->sound_fonts.erase (it);
+ break;
+ }
+ }
+ }
else
g_warning ("BseSoundFontRepo: cannot hold non-sound-font item type `%s'",
BSE_OBJECT_TYPE_NAME (item));
@@ -365,7 +365,16 @@ SoundFontRepoImpl::SoundFontRepoImpl (BseObject *bobj) :
{}
SoundFontRepoImpl::~SoundFontRepoImpl ()
-{}
+{
+ BseSoundFontRepo *sfrepo = as<BseSoundFontRepo *>();
+
+ /* unload all sound fonts */
+ bse_sound_font_repo_forall_items (BSE_CONTAINER (sfrepo), unload_sound_font, sfrepo);
+
+ /* release children */
+ while (!sound_fonts.empty())
+ bse_container_remove_item (BSE_CONTAINER (sfrepo), sound_fonts.front());
+}
static Error
repo_load_file (BseSoundFontRepo *sfrepo, const String &file_name, BseSoundFont **sound_font_p)
diff --git a/bse/bsesoundfontrepo.hh b/bse/bsesoundfontrepo.hh
index ca3e74c..df5e03d 100644
--- a/bse/bsesoundfontrepo.hh
+++ b/bse/bsesoundfontrepo.hh
@@ -35,8 +35,6 @@ struct BseSoundFontRepo : BseSuper {
guint64 channel_values_tick_stamp;
int n_channel_oscs_active; /* SoundFontOscs with an active module in the engine thread
*/
-
- GList *sound_fonts;
};
struct BseSoundFontRepoClass : BseSuperClass
@@ -69,7 +67,8 @@ public:
BseSoundFontOsc *osc;
guint channel;
};
- std::vector<Osc> oscs;
+ std::vector<Osc> oscs;
+ std::vector<BseSoundFont *> sound_fonts;
protected:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]