13
0

new files

This commit is contained in:
Paul Davis 2016-04-24 21:46:14 -04:00
parent b4c43f0878
commit 84a0386f9c
2 changed files with 137 additions and 0 deletions

View File

@ -0,0 +1,61 @@
/*
Copyright (C) 2016 Paul Davis
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __ardour_slavable_h__
#define __ardour_slavable_h__
#include <set>
#include <string>
#include <stdint.h>
#include <boost/shared_ptr.hpp>
class XMLNode;
namespace ARDOUR {
class VCA;
class Session;
class Slavable
{
public:
Slavable ();
virtual ~Slavable() {}
XMLNode& state () const;
int assign (Session& s, XMLNode const&);
void assign (boost::shared_ptr<VCA>);
void unassign (boost::shared_ptr<VCA>);
static std::string xml_node_name;
protected:
virtual int assign_controls (boost::shared_ptr<VCA>) = 0;
virtual int unassign_controls (boost::shared_ptr<VCA>) = 0;
private:
mutable Glib::Threads::RWLock master_lock;
std::set<uint32_t> _masters;
};
} // namespace ARDOUR
#endif /* __ardour_slavable_h__ */

76
libs/ardour/slavable.cc Normal file
View File

@ -0,0 +1,76 @@
/*
Copyright (C) 2016 Paul Davis
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <glibmm/threads.h>
#include "pbd/convert.h"
#include "pbd/xml++.h"
#include "ardour/slavable.h"
#include "ardour/vca.h"
#include "i18n.h"
using namespace ARDOUR;
std::string Slavable::xml_node_name = X_("Slavable");
Slavable::Slavable ()
{
}
XMLNode&
Slavable::state () const
{
XMLNode* node = new XMLNode (xml_node_name);
XMLNode* child;
Glib::Threads::RWLock::ReaderLock lm (master_lock);
for (std::set<uint32_t>::const_iterator i = _masters.begin(); i != _masters.end(); ++i) {
child = new XMLNode (X_("Master"));
child->add_property (X_("number"), PBD::to_string (*i, std::dec));
node->add_child_nocopy (*child);
}
return *node;
}
int
Slavable::assign (Session& s, XMLNode const& node)
{
return 0;
}
void
Slavable::assign (boost::shared_ptr<VCA> v)
{
if (assign_controls (v) == 0) {
Glib::Threads::RWLock::WriterLock lm (master_lock);
_masters.insert (v->number());
}
}
void
Slavable::unassign (boost::shared_ptr<VCA> v)
{
(void) unassign_controls (v);
Glib::Threads::RWLock::WriterLock lm (master_lock);
_masters.erase (v->number());
}