+std::ostream&
+operator<< (std::ostream& os, const ChannelNameSet& cns)
+{
+ os << "Channel Name Set: name = " << cns._name << endl
+ << "Map size " << cns._patch_map.size () << endl
+ << "List size " << cns._patch_list.size() << endl
+ << "Patch list name = [" << cns._patch_list_name << ']' << endl
+ << "Available channels : ";
+ for (set<uint8_t>::iterator x = cns._available_for_channels.begin(); x != cns._available_for_channels.end(); ++x) {
+ os << (int) (*x) << ' ';
+ }
+ os << endl;
+
+ for (ChannelNameSet::PatchBanks::const_iterator pbi = cns._patch_banks.begin(); pbi != cns._patch_banks.end(); ++pbi) {
+ os << "\tPatch Bank " << (*pbi)->name() << " with " << (*pbi)->patch_name_list().size() << " patches\n";
+ for (PatchBank::PatchNameList::const_iterator pni = (*pbi)->patch_name_list().begin(); pni != (*pbi)->patch_name_list().end(); ++pni) {
+ os << "\t\tPatch name " << (*pni)->name() << " prog " << (int) (*pni)->program_number() << " bank " << (*pni)->bank_number() << endl;
+ }
+ }
+
+ return os;
+}
+
+void
+ChannelNameSet::set_patch_banks (const ChannelNameSet::PatchBanks& pb)
+{
+ _patch_banks = pb;
+
+ _patch_map.clear ();
+ _patch_list.clear ();
+ _patch_list_name = "";
+ _available_for_channels.clear ();
+
+ for (PatchBanks::const_iterator pbi = _patch_banks.begin(); pbi != _patch_banks.end(); ++pbi) {
+ for (PatchBank::PatchNameList::const_iterator pni = (*pbi)->patch_name_list().begin(); pni != (*pbi)->patch_name_list().end(); ++pni) {
+ _patch_map[(*pni)->patch_primary_key()] = (*pni);
+ _patch_list.push_back ((*pni)->patch_primary_key());
+ }
+ }
+
+ for (uint8_t n = 0; n < 16; ++n) {
+ _available_for_channels.insert (n);
+ }
+}
+
+void
+ChannelNameSet::use_patch_name_list (const PatchBank::PatchNameList& pnl)
+{
+ for (PatchBank::PatchNameList::const_iterator p = pnl.begin(); p != pnl.end(); ++p) {
+ _patch_map[(*p)->patch_primary_key()] = (*p);
+ _patch_list.push_back ((*p)->patch_primary_key());
+ }
+}
+