diff options
Diffstat (limited to 'src/libs/engine/Engine.cpp')
-rw-r--r-- | src/libs/engine/Engine.cpp | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/libs/engine/Engine.cpp b/src/libs/engine/Engine.cpp index 0a6d048a..e7c2545c 100644 --- a/src/libs/engine/Engine.cpp +++ b/src/libs/engine/Engine.cpp @@ -27,6 +27,7 @@ #include "tuning.hpp" #include "Event.hpp" #include "common/interface/EventType.hpp" +#include "common/interface/Store.hpp" #include "JackAudioDriver.hpp" #include "NodeFactory.hpp" #include "ClientBroadcaster.hpp" @@ -58,11 +59,15 @@ Engine::Engine(Ingen::Shared::World* world) , _maid(new Raul::Maid(maid_queue_size)) , _post_processor(new PostProcessor(*this, /**_maid, */post_processor_queue_size)) , _broadcaster(new ClientBroadcaster()) - , _object_store(new ObjectStore()) , _node_factory(new NodeFactory(world)) , _quit_flag(false) , _activated(false) { + if (world->store) { + assert(PtrCast<ObjectStore>(world->store)); + } else { + world->store = SharedPtr<Store>(new ObjectStore()); + } } @@ -70,13 +75,12 @@ Engine::~Engine() { deactivate(); - for (ObjectStore::Objects::iterator i = _object_store->objects().begin(); - i != _object_store->objects().end(); ++i) { + for (ObjectStore::Objects::iterator i = object_store()->objects().begin(); + i != object_store()->objects().end(); ++i) { if ( ! PtrCast<GraphObjectImpl>(i->second)->parent() ) i->second.reset(); } - delete _object_store; delete _broadcaster; delete _node_factory; delete _osc_driver; @@ -87,6 +91,13 @@ Engine::~Engine() munlockall(); } + + +ObjectStore* +Engine::object_store() const +{ + return dynamic_cast<ObjectStore*>(_world->store.get()); +} Driver* @@ -228,7 +239,7 @@ Engine::activate(size_t parallelism) PatchImpl* root_patch = new PatchImpl(*this, "", 1, NULL, _audio_driver->sample_rate(), _audio_driver->buffer_size(), 1); root_patch->activate(); - _object_store->add(root_patch); + _world->store->add(root_patch); root_patch->compiled_patch(root_patch->compile()); assert(_audio_driver->root_patch() == NULL); |