diff options
author | David Robillard <d@drobilla.net> | 2007-10-08 16:30:57 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2007-10-08 16:30:57 +0000 |
commit | 763bba9de67fb1bd06658a0bac91440727ee5a51 (patch) | |
tree | 39e7af069828981c2c06d78e015686062eba73dc /src/libs/client | |
parent | 260a406b12997fdab7446a9980e921d8cfc46915 (diff) | |
download | ingen-763bba9de67fb1bd06658a0bac91440727ee5a51.tar.gz ingen-763bba9de67fb1bd06658a0bac91440727ee5a51.tar.bz2 ingen-763bba9de67fb1bd06658a0bac91440727ee5a51.zip |
SharedPtr-ify engine side store.
Fix reattaching to engine.
Fix connection paths.
Remove last dependencies on client (model) library from Serialiser.
Fix Raul::PathTable::find_descendants_end.
git-svn-id: http://svn.drobilla.net/lad/ingen@847 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/libs/client')
-rw-r--r-- | src/libs/client/ConnectionModel.hpp | 5 | ||||
-rw-r--r-- | src/libs/client/NodeModel.hpp | 1 | ||||
-rw-r--r-- | src/libs/client/OSCClientReceiver.cpp | 2 | ||||
-rw-r--r-- | src/libs/client/ObjectModel.cpp | 9 | ||||
-rw-r--r-- | src/libs/client/ObjectModel.hpp | 12 | ||||
-rw-r--r-- | src/libs/client/PatchModel.cpp | 31 | ||||
-rw-r--r-- | src/libs/client/PatchModel.hpp | 26 | ||||
-rw-r--r-- | src/libs/client/PortModel.hpp | 2 | ||||
-rw-r--r-- | src/libs/client/Serializer.cpp | 27 | ||||
-rw-r--r-- | src/libs/client/Serializer.hpp | 5 | ||||
-rw-r--r-- | src/libs/client/Store.cpp | 25 | ||||
-rw-r--r-- | src/libs/client/Store.hpp | 6 |
12 files changed, 76 insertions, 75 deletions
diff --git a/src/libs/client/ConnectionModel.hpp b/src/libs/client/ConnectionModel.hpp index 83ddbd58..5ace402f 100644 --- a/src/libs/client/ConnectionModel.hpp +++ b/src/libs/client/ConnectionModel.hpp @@ -62,10 +62,11 @@ private: assert(_dst_port); assert(_src_port->parent()); assert(_dst_port->parent()); + assert(_src_port->path() != _dst_port->path()); } - SharedPtr<PortModel> _src_port; - SharedPtr<PortModel> _dst_port; + const SharedPtr<PortModel> _src_port; + const SharedPtr<PortModel> _dst_port; }; diff --git a/src/libs/client/NodeModel.hpp b/src/libs/client/NodeModel.hpp index a38c519c..9e26daaa 100644 --- a/src/libs/client/NodeModel.hpp +++ b/src/libs/client/NodeModel.hpp @@ -26,6 +26,7 @@ #include <raul/Path.hpp> #include <raul/SharedPtr.hpp> #include "interface/Node.hpp" +#include "interface/Port.hpp" #include "ObjectModel.hpp" #include "PortModel.hpp" #include "PluginModel.hpp" diff --git a/src/libs/client/OSCClientReceiver.cpp b/src/libs/client/OSCClientReceiver.cpp index b9f5a70d..0a1fa105 100644 --- a/src/libs/client/OSCClientReceiver.cpp +++ b/src/libs/client/OSCClientReceiver.cpp @@ -35,7 +35,7 @@ OSCClientReceiver::OSCClientReceiver(int listen_port) _listen_port(listen_port), _st(NULL) { - start(false); + start(true); } diff --git a/src/libs/client/ObjectModel.cpp b/src/libs/client/ObjectModel.cpp index ca38b42f..7d144faf 100644 --- a/src/libs/client/ObjectModel.cpp +++ b/src/libs/client/ObjectModel.cpp @@ -15,9 +15,10 @@ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "ObjectModel.hpp" -#include <raul/TableImpl.hpp> #include <iostream> +#include <raul/TableImpl.hpp> +#include "interface/GraphObject.hpp" +#include "ObjectModel.hpp" using namespace std; @@ -57,7 +58,7 @@ ObjectModel::children_end() const } -SharedPtr<ObjectModel> +SharedPtr<Shared::GraphObject> ObjectModel::find_child(const string& name) const { const_iterator me = _store.objects().find(_path); @@ -65,7 +66,7 @@ ObjectModel::find_child(const string& name) const const_iterator children_end = _store.objects().find_descendants_end(me); const_iterator child = _store.objects().find(me, children_end, _path.base() + name); if (child != _store.objects().end()) - return child->second; + return PtrCast<ObjectModel>(child->second); else return SharedPtr<ObjectModel>(); } diff --git a/src/libs/client/ObjectModel.hpp b/src/libs/client/ObjectModel.hpp index ede796e4..3c13b227 100644 --- a/src/libs/client/ObjectModel.hpp +++ b/src/libs/client/ObjectModel.hpp @@ -28,10 +28,11 @@ #include <raul/Atom.hpp> #include <raul/Path.hpp> #include <raul/SharedPtr.hpp> -#include <raul/Table.hpp> +#include <raul/PathTable.hpp> #include "interface/GraphObject.hpp" #include "Store.hpp" +using Raul::PathTable; using std::string; using Raul::Atom; using Raul::Path; @@ -68,12 +69,9 @@ public: SharedPtr<ObjectModel> parent() const { return _parent; } bool polyphonic() const { return _polyphonic; } - typedef Store::Objects::iterator iterator; - typedef Store::Objects::const_iterator const_iterator; - - const_iterator children_begin() const; - const_iterator children_end() const; - SharedPtr<ObjectModel> find_child(const string& name) const; + const_iterator children_begin() const; + const_iterator children_end() const; + SharedPtr<Shared::GraphObject> find_child(const string& name) const; // Signals sigc::signal<void, SharedPtr<ObjectModel> > signal_new_child; diff --git a/src/libs/client/PatchModel.cpp b/src/libs/client/PatchModel.cpp index 3997ac77..a0f0aa4b 100644 --- a/src/libs/client/PatchModel.cpp +++ b/src/libs/client/PatchModel.cpp @@ -31,8 +31,6 @@ void PatchModel::add_child(SharedPtr<ObjectModel> c) { assert(c->parent().get() == this); - - //ObjectModel::add_child(c); SharedPtr<PortModel> pm = PtrCast<PortModel>(c); if (pm) { @@ -45,13 +43,6 @@ PatchModel::add_child(SharedPtr<ObjectModel> c) signal_new_node.emit(nm); } -/* -SharedPtr<NodeModel> -PatchModel::get_node(const string& name) const -{ - return PtrCast<NodeModel>(get_child(name)); -} -*/ bool PatchModel::remove_child(SharedPtr<ObjectModel> o) @@ -67,10 +58,11 @@ PatchModel::remove_child(SharedPtr<ObjectModel> o) // since they can't possibly exist anymore for (Connections::iterator j = _connections.begin(); j != _connections.end() ; ) { - list<SharedPtr<ConnectionModel> >::iterator next = j; + Connections::iterator next = j; ++next; - SharedPtr<ConnectionModel> cm = (*j); + SharedPtr<ConnectionModel> cm = PtrCast<ConnectionModel>(*j); + assert(cm); if (cm->src_port_path().parent() == o->path() || cm->src_port_path() == o->path() @@ -106,9 +98,10 @@ PatchModel::clear() SharedPtr<ConnectionModel> PatchModel::get_connection(const string& src_port_path, const string& dst_port_path) const { - for (list<SharedPtr<ConnectionModel> >::const_iterator i = _connections.begin(); i != _connections.end(); ++i) + for (Connections::const_iterator i = _connections.begin(); i != _connections.end(); ++i) if ((*i)->src_port_path() == src_port_path && (*i)->dst_port_path() == dst_port_path) - return (*i); + return PtrCast<ConnectionModel>(*i); + return SharedPtr<ConnectionModel>(); } @@ -129,18 +122,19 @@ PatchModel::add_connection(SharedPtr<ConnectionModel> cm) assert(cm->dst_port()); assert(cm->src_port()->parent()); assert(cm->dst_port()->parent()); + assert(cm->src_port_path() != cm->dst_port_path()); assert(cm->src_port()->parent().get() == this || cm->src_port()->parent()->parent().get() == this); assert(cm->dst_port()->parent().get() == this || cm->dst_port()->parent()->parent().get() == this); SharedPtr<ConnectionModel> existing = get_connection(cm->src_port_path(), cm->dst_port_path()); - + if (existing) { assert(cm->src_port() == existing->src_port()); assert(cm->dst_port() == existing->dst_port()); } else { - _connections.push_back(cm); + _connections.push_back(new Connections::Node(cm)); signal_new_connection.emit(cm); } } @@ -149,11 +143,12 @@ PatchModel::add_connection(SharedPtr<ConnectionModel> cm) void PatchModel::remove_connection(const string& src_port_path, const string& dst_port_path) { - for (list<SharedPtr<ConnectionModel> >::iterator i = _connections.begin(); i != _connections.end(); ++i) { - SharedPtr<ConnectionModel> cm = (*i); + for (Connections::iterator i = _connections.begin(); i != _connections.end(); ++i) { + SharedPtr<ConnectionModel> cm = PtrCast<ConnectionModel>(*i); + assert(cm); if (cm->src_port_path() == src_port_path && cm->dst_port_path() == dst_port_path) { signal_removed_connection.emit(cm); - _connections.erase(i); // cuts our reference + delete _connections.erase(i); // cuts our reference assert(!get_connection(src_port_path, dst_port_path)); // no duplicates return; } diff --git a/src/libs/client/PatchModel.hpp b/src/libs/client/PatchModel.hpp index 642bf34f..5d375faf 100644 --- a/src/libs/client/PatchModel.hpp +++ b/src/libs/client/PatchModel.hpp @@ -22,8 +22,10 @@ #include <list> #include <string> #include <sigc++/sigc++.h> -#include "NodeModel.hpp" #include <raul/SharedPtr.hpp> +#include "interface/Patch.hpp" +#include "NodeModel.hpp" + #include "ConnectionModel.hpp" using std::list; using std::string; @@ -38,22 +40,21 @@ class Store; * * \ingroup IngenClient */ -class PatchModel : public NodeModel +class PatchModel : public NodeModel, public Ingen::Shared::Patch { public: - typedef std::list<SharedPtr<ConnectionModel> > Connections; - const Connections& connections() const { return _connections; } - SharedPtr<ConnectionModel> get_connection(const string& src_port_path, const string& dst_port_path) const; - //SharedPtr<NodeModel> get_node(const string& node_name) const; + SharedPtr<ConnectionModel> get_connection(const string& src_port_path, + const string& dst_port_path) const; void set_filename(const string& filename) { _filename = filename; } - size_t poly() const { return _poly; } - const string& filename() const { return _filename; } - bool enabled() const { return _enabled; } - bool polyphonic() const; + size_t poly() const { return _poly; } + const string& filename() const { return _filename; } + bool enabled() const { return _enabled; } + uint32_t internal_polyphony() const { return _poly; } + bool polyphonic() const; /** "editable" = arranging,connecting,adding,deleting,etc * not editable (control mode) you can just change controllers (performing) @@ -96,13 +97,10 @@ private: void add_connection(SharedPtr<ConnectionModel> cm); void remove_connection(const string& src_port_path, const string& dst_port_path); - void rename_node(const Path& old_path, const Path& new_path); - void rename_node_port(const Path& old_path, const Path& new_path); - Connections _connections; string _filename; bool _enabled; - size_t _poly; + uint32_t _poly; bool _editable; }; diff --git a/src/libs/client/PortModel.hpp b/src/libs/client/PortModel.hpp index 06f04e78..5455c1f9 100644 --- a/src/libs/client/PortModel.hpp +++ b/src/libs/client/PortModel.hpp @@ -38,7 +38,7 @@ namespace Client { * * \ingroup IngenClient */ -class PortModel : public ObjectModel, public Shared::Port +class PortModel : public ObjectModel, public Ingen::Shared::Port { public: enum Direction { INPUT, OUTPUT }; diff --git a/src/libs/client/Serializer.cpp b/src/libs/client/Serializer.cpp index e37391d7..e15ce4dc 100644 --- a/src/libs/client/Serializer.cpp +++ b/src/libs/client/Serializer.cpp @@ -35,11 +35,12 @@ #include <raul/RDFWorld.hpp> #include <raul/TableImpl.hpp> #include "interface/EngineInterface.hpp" +#include "interface/Plugin.hpp" +#include "interface/Patch.hpp" +#include "interface/Node.hpp" #include "interface/Port.hpp" #include "interface/Connection.hpp" -#include "PatchModel.hpp" #include "Serializer.hpp" -#include "Store.hpp" using namespace std; using namespace Raul; @@ -218,7 +219,7 @@ Serializer::serialize(SharedPtr<GraphObject> object) throw (std::logic_error) if (!_model) throw std::logic_error("serialize called without serialization in progress"); - SharedPtr<PatchModel> patch = PtrCast<PatchModel>(object); + SharedPtr<Shared::Patch> patch = PtrCast<Shared::Patch>(object); if (patch) { serialize_patch(patch); return; @@ -230,7 +231,7 @@ Serializer::serialize(SharedPtr<GraphObject> object) throw (std::logic_error) return; } - SharedPtr<Port> port = PtrCast<Port>(object); + SharedPtr<Shared::Port> port = PtrCast<Shared::Port>(object); if (port) { serialize_port(port.get(), path_to_node_id(port->path())); return; @@ -255,7 +256,7 @@ Serializer::patch_path_to_rdf_id(const Path& path) void -Serializer::serialize_patch(SharedPtr<PatchModel> patch) +Serializer::serialize_patch(SharedPtr<Shared::Patch> patch) { assert(_model); @@ -275,7 +276,7 @@ Serializer::serialize_patch(SharedPtr<PatchModel> patch) _model->add_statement( patch_id, "ingen:polyphony", - Atom((int)patch->poly())); + Atom((int)patch->internal_polyphony())); _model->add_statement( patch_id, @@ -292,9 +293,9 @@ Serializer::serialize_patch(SharedPtr<PatchModel> patch) } } - for (Store::Objects::const_iterator n = patch->children_begin(); n != patch->children_end(); ++n) { - SharedPtr<PatchModel> patch = PtrCast<PatchModel>(n->second); - SharedPtr<NodeModel> node = PtrCast<NodeModel>(n->second); + for (GraphObject::const_iterator n = patch->children_begin(); n != patch->children_end(); ++n) { + SharedPtr<Shared::Patch> patch = PtrCast<Shared::Patch>(n->second); + SharedPtr<Shared::Node> node = PtrCast<Shared::Node>(n->second); if (patch) { _model->add_statement(patch_id, "ingen:node", patch_path_to_rdf_id(patch->path())); serialize_patch(patch); @@ -312,7 +313,8 @@ Serializer::serialize_patch(SharedPtr<PatchModel> patch) serialize_port(p, port_id); } - for (PatchModel::Connections::const_iterator c = patch->connections().begin(); c != patch->connections().end(); ++c) { + for (Shared::Patch::Connections::const_iterator c = patch->connections().begin(); + c != patch->connections().end(); ++c) { serialize_connection(*c); } } @@ -360,11 +362,6 @@ Serializer::serialize_node(SharedPtr<Shared::Node> node, const RDF::Node& node_i //serialize_plugin(node->plugin()); - /*_model->add_statement(_serializer, - node_uri_ref.c_str(), - "ingen:name", - Atom(node->path().name()));*/ - for (uint32_t i=0; i < node->num_ports(); ++i) { Port* p = node->port(i); assert(p); diff --git a/src/libs/client/Serializer.hpp b/src/libs/client/Serializer.hpp index 7a739f94..f8b99750 100644 --- a/src/libs/client/Serializer.hpp +++ b/src/libs/client/Serializer.hpp @@ -37,6 +37,7 @@ namespace Ingen { namespace Shared { class Plugin; class GraphObject; + class Patch; class Node; class Port; class Connection; @@ -44,8 +45,6 @@ namespace Shared { namespace Client { -class PatchModel; - /** Serializes Ingen objects (patches, nodes, etc) to RDF. * @@ -73,7 +72,7 @@ private: void serialize_plugin(SharedPtr<Shared::Plugin> p); - void serialize_patch(SharedPtr<PatchModel> p); + void serialize_patch(SharedPtr<Shared::Patch> p); void serialize_node(SharedPtr<Shared::Node> n, const Raul::RDF::Node& id); void serialize_port(const Shared::Port* p, const Raul::RDF::Node& id); diff --git a/src/libs/client/Store.cpp b/src/libs/client/Store.cpp index e1744ac0..ae07fa08 100644 --- a/src/libs/client/Store.cpp +++ b/src/libs/client/Store.cpp @@ -222,7 +222,7 @@ Store::add_object(SharedPtr<ObjectModel> object) // one (with precedence to the new values). Objects::iterator existing = _objects.find(object->path()); if (existing != _objects.end()) { - existing->second->set(object); + PtrCast<ObjectModel>(existing->second)->set(object); } else { if (object->path() != "/") { @@ -253,7 +253,11 @@ Store::add_object(SharedPtr<ObjectModel> object) } - //cout << "[Store] Added " << object->path() << endl; + /*cout << "[Store] Added " << object->path() << " {" << endl; + for (Objects::iterator i = _objects.begin(); i != _objects.end(); ++i) { + cout << "\t" << i->first << endl; + } + cout << "}" << endl;*/ } @@ -264,10 +268,11 @@ Store::remove_object(const Path& path) if (i != _objects.end()) { assert((*i).second->path() == path); - SharedPtr<ObjectModel> result = (*i).second; + SharedPtr<ObjectModel> result = PtrCast<ObjectModel>((*i).second); + assert(result); //_objects.erase(i); Objects::iterator descendants_end = _objects.find_descendants_end(i); - Table<Path,SharedPtr<ObjectModel> > removed = _objects.yank(i, descendants_end); + Table<Path, SharedPtr<Shared::GraphObject> > removed = _objects.yank(i, descendants_end); /*cout << "[Store] Removing " << i->first << " {" << endl; for (Objects::iterator i = removed.begin(); i != removed.end(); ++i) { cout << "\t" << i->first << endl; @@ -317,8 +322,10 @@ Store::object(const Path& path) if (i == _objects.end()) { return SharedPtr<ObjectModel>(); } else { - assert(i->second->path() == "/" || i->second->parent()); - return i->second; + SharedPtr<ObjectModel> model = PtrCast<ObjectModel>(i->second); + assert(model); + assert(model->path() == "/" || model->parent()); + return model; } } @@ -358,11 +365,11 @@ Store::rename_event(const Path& old_path, const Path& new_path) Objects::iterator descendants_end = _objects.find_descendants_end(parent); - Table<Path,SharedPtr<ObjectModel> > removed = _objects.yank(parent, descendants_end); + Table<Path, SharedPtr<Shared::GraphObject> > removed = _objects.yank(parent, descendants_end); assert(removed.size() > 0); - for (Table<Path,SharedPtr<ObjectModel> >::iterator i = removed.begin(); i != removed.end(); ++i) { + for (Table<Path, SharedPtr<Shared::GraphObject> >::iterator i = removed.begin(); i != removed.end(); ++i) { const Path& child_old_path = i->first; assert(Path::descendant_comparator(old_path, child_old_path)); @@ -373,7 +380,7 @@ Store::rename_event(const Path& old_path, const Path& new_path) child_new_path = new_path.base() + child_old_path.substr(old_path.length()+1); cerr << "[Store] Renamed " << child_old_path << " -> " << child_new_path << endl; - i->second->set_path(child_new_path); + PtrCast<ObjectModel>(i->second)->set_path(child_new_path); i->first = child_new_path; } diff --git a/src/libs/client/Store.hpp b/src/libs/client/Store.hpp index 26aac803..dad403d0 100644 --- a/src/libs/client/Store.hpp +++ b/src/libs/client/Store.hpp @@ -34,6 +34,9 @@ using Raul::Path; using Raul::Atom; namespace Ingen { + +namespace Shared { class GraphObject; } + namespace Client { class SigClientInterface; @@ -63,10 +66,11 @@ public: typedef Raul::Table<string, SharedPtr<PluginModel> > Plugins; const Plugins& plugins() const { return _plugins; } - typedef Raul::PathTable<SharedPtr<ObjectModel> > Objects; + typedef Raul::PathTable< SharedPtr<Shared::GraphObject> > Objects; const Objects& objects() const { return _objects; } sigc::signal<void, SharedPtr<ObjectModel> > signal_new_object; + private: void add_object(SharedPtr<ObjectModel> object); |