diff options
author | David Robillard <d@drobilla.net> | 2012-08-14 21:37:20 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2012-08-14 21:37:20 +0000 |
commit | 76b602f1f834cb2c255848c5ba887b3d7c47171a (patch) | |
tree | cbe6588c70f2df4384231d9cbdfd06fb0aa7e45f /ingen/Store.hpp | |
parent | a8312be2d849b73ff0acc80a226095bcfee3556c (diff) | |
download | ingen-76b602f1f834cb2c255848c5ba887b3d7c47171a.tar.gz ingen-76b602f1f834cb2c255848c5ba887b3d7c47171a.tar.bz2 ingen-76b602f1f834cb2c255848c5ba887b3d7c47171a.zip |
Replace use of old Raul Table stuff with std::map.
Move most Store functionality into Ingen::Store and eliminate EngineStore.
Much cleaner delete and move implementations.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@4696 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'ingen/Store.hpp')
-rw-r--r-- | ingen/Store.hpp | 40 |
1 files changed, 30 insertions, 10 deletions
diff --git a/ingen/Store.hpp b/ingen/Store.hpp index f35c8368..87f6f7e0 100644 --- a/ingen/Store.hpp +++ b/ingen/Store.hpp @@ -17,32 +17,52 @@ #ifndef INGEN_STORE_HPP #define INGEN_STORE_HPP -#include <string> +#include <map> #undef nil #include <glibmm/thread.h> -#include "raul/PathTable.hpp" - #include "ingen/GraphObject.hpp" +#include "raul/Deletable.hpp" +#include "raul/Noncopyable.hpp" namespace Ingen { /** Store of objects in the patch hierarchy. * @ingroup IngenShared */ -class Store : public Raul::PathTable< SharedPtr<GraphObject> > { +class Store : public Raul::Noncopyable + , public Raul::Deletable + , public std::map< const Raul::Path, SharedPtr<GraphObject> > { public: - virtual ~Store() {} - - virtual void add(GraphObject* o); + void add(GraphObject* o); - typedef Raul::Table< Raul::Path, SharedPtr<GraphObject> > Objects; + GraphObject* get(const Raul::Path& path) { + const iterator i = find(path); + return (i == end()) ? NULL : i->second.get(); + } typedef std::pair<const_iterator, const_iterator> const_range; - const_range - children_range(SharedPtr<const GraphObject> o) const; + typedef std::map< Raul::Path, SharedPtr<GraphObject> > Objects; + + iterator find_descendants_end(Store::iterator parent); + const_iterator find_descendants_end(Store::const_iterator parent) const; + + const_range children_range(SharedPtr<const GraphObject> o) const; + + /** Remove the object at @p top and all its children from the store. + * + * @param removed Filled with all the removed objects. Note this may be + * many objects since any children will be removed as well. + */ + void remove(iterator top, Objects& removed); + + /** Rename (move) the object at @p top to @p new_path. + * + * Note this invalidates @p i. + */ + void rename(iterator i, const Raul::Path& new_path); unsigned child_name_offset(const Raul::Path& parent, const Raul::Symbol& symbol, |