diff options
author | David Robillard <d@drobilla.net> | 2013-01-12 23:38:03 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2013-01-12 23:38:03 +0000 |
commit | 4a05f65f51fca38b774f2bd5cda8e665c86f3917 (patch) | |
tree | 3333ca8e58cf48bffdfa16fadfa9905f56403c78 /raul | |
parent | faad203b6ae046fb3c7e6f7f2a471787163d09b4 (diff) | |
download | raul-4a05f65f51fca38b774f2bd5cda8e665c86f3917.tar.gz raul-4a05f65f51fca38b774f2bd5cda8e665c86f3917.tar.bz2 raul-4a05f65f51fca38b774f2bd5cda8e665c86f3917.zip |
Remove Raul::SharedPtr and switch to std::shared_ptr.
Use project local short type aliases for shared_ptr and friends.
Move Raul::Disposable and Raul::Manageable into Raul::Maid.
Use sets to store machina nodes and edges to avoid O(n) searches.
git-svn-id: http://svn.drobilla.net/lad/trunk/raul@4939 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'raul')
-rw-r--r-- | raul/Array.hpp | 4 | ||||
-rw-r--r-- | raul/Disposable.hpp | 44 | ||||
-rw-r--r-- | raul/Maid.hpp | 43 | ||||
-rw-r--r-- | raul/Manageable.hpp | 43 | ||||
-rw-r--r-- | raul/SharedPtr.hpp | 37 | ||||
-rw-r--r-- | raul/WeakPtr.hpp | 29 |
6 files changed, 33 insertions, 167 deletions
diff --git a/raul/Array.hpp b/raul/Array.hpp index 485f3cf..5dab626 100644 --- a/raul/Array.hpp +++ b/raul/Array.hpp @@ -21,7 +21,7 @@ #include <cassert> #include <cstddef> -#include "raul/Disposable.hpp" +#include "raul/Maid.hpp" namespace Raul { @@ -33,7 +33,7 @@ namespace Raul { * \ingroup raul */ template <class T> -class Array : public Disposable +class Array : public Maid::Disposable { public: explicit Array(size_t size = 0) diff --git a/raul/Disposable.hpp b/raul/Disposable.hpp deleted file mode 100644 index 7496921..0000000 --- a/raul/Disposable.hpp +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of Raul. - Copyright 2007-2012 David Robillard <http://drobilla.net> - - Raul 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 3 of the License, or any later version. - - Raul 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 Raul. If not, see <http://www.gnu.org/licenses/>. -*/ - -#ifndef RAUL_DISPOSABLE_HPP -#define RAUL_DISPOSABLE_HPP - -#include <stddef.h> - -#include "raul/Deletable.hpp" - -namespace Raul { - -class Maid; - -/** Something that can be collected by the Maid. - * - * \ingroup raul - */ -class Disposable : public Deletable -{ -public: - Disposable() : _maid_next(NULL) {} - -private: - friend class Maid; - Disposable* _maid_next; -}; - -} // namespace Raul - -#endif // RAUL_DISPOSABLE_HPP diff --git a/raul/Maid.hpp b/raul/Maid.hpp index c64a1db..c1d76c1 100644 --- a/raul/Maid.hpp +++ b/raul/Maid.hpp @@ -18,11 +18,10 @@ #define RAUL_MAID_HPP #include <atomic> +#include <memory> -#include "raul/Disposable.hpp" -#include "raul/Manageable.hpp" +#include "raul/Deletable.hpp" #include "raul/Noncopyable.hpp" -#include "raul/SharedPtr.hpp" namespace Raul { @@ -36,6 +35,26 @@ namespace Raul { class Maid : public Noncopyable { public: + /** An object that can be managed by the maid using shared_ptr. */ + class Manageable : public Deletable { + public: + Manageable() {} + + private: + friend class Maid; + std::shared_ptr<Manageable> _maid_next; + }; + + /** An object that can be disposed via Maid::dispose(). */ + class Disposable : public Deletable { + public: + Disposable() : _maid_next(NULL) {} + + private: + friend class Maid; + Disposable* _maid_next; + }; + Maid() : _disposed(NULL) {} inline ~Maid() { @@ -59,18 +78,18 @@ public: } } - /** Manage an object held by a SharedPtr. + /** Manage an object held by a shared pointer. * * This will hold a reference to @p ptr ensuring it will not be deleted - * except by cleanup(). This is mainly useful to allow dropping SharedPtr - * references in real-time threads without causing a deletion. + * except by cleanup(). This is mainly useful to allow dropping references + * in real-time threads without causing a deletion. * * This is not thread-safe. * * Note this mechanism scales linearly. If a very large number of objects * are managed cleanup() will become very expensive. */ - inline void manage(SharedPtr<Manageable> ptr) { + inline void manage(std::shared_ptr<Manageable> ptr) { ptr->_maid_next = _managed; _managed = ptr; } @@ -98,18 +117,18 @@ public: } // Free the managed list - SharedPtr<Manageable> managed = _managed; + std::shared_ptr<Manageable> managed = _managed; _managed.reset(); - for (SharedPtr<Manageable> obj = managed; obj;) { - const SharedPtr<Manageable> next = obj->_maid_next; + for (std::shared_ptr<Manageable> obj = managed; obj;) { + const std::shared_ptr<Manageable> next = obj->_maid_next; obj->_maid_next.reset(); obj = next; } } private: - std::atomic<Disposable*> _disposed; - SharedPtr<Manageable> _managed; + std::atomic<Disposable*> _disposed; + std::shared_ptr<Manageable> _managed; }; } // namespace Raul diff --git a/raul/Manageable.hpp b/raul/Manageable.hpp deleted file mode 100644 index 6b8b71f..0000000 --- a/raul/Manageable.hpp +++ /dev/null @@ -1,43 +0,0 @@ -/* - This file is part of Raul. - Copyright 2007-2012 David Robillard <http://drobilla.net> - - Raul 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 3 of the License, or any later version. - - Raul 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 Raul. If not, see <http://www.gnu.org/licenses/>. -*/ - -#ifndef RAUL_MANAGEABLE_HPP -#define RAUL_MANAGEABLE_HPP - -#include "raul/Deletable.hpp" -#include "raul/SharedPtr.hpp" - -namespace Raul { - -class Maid; - -/** Something that can be managed by the Maid. - * - * \ingroup raul - */ -class Manageable : public Deletable -{ -public: - Manageable() {} - -private: - friend class Maid; - SharedPtr<Manageable> _maid_next; -}; - -} // namespace Raul - -#endif // RAUL_MANAGEABLE_HPP diff --git a/raul/SharedPtr.hpp b/raul/SharedPtr.hpp deleted file mode 100644 index fdce5fa..0000000 --- a/raul/SharedPtr.hpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - This file is part of Raul. - Copyright 2007-2012 David Robillard <http://drobilla.net> - - Raul 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 3 of the License, or any later version. - - Raul 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 Raul. If not, see <http://www.gnu.org/licenses/>. -*/ - -#ifndef RAUL_SHARED_PTR_HPP -#define RAUL_SHARED_PTR_HPP - -template <typename T> void NullDeleter(T* ptr) {} - -#ifdef RAUL_CPP0x -# include <memory> -# define SharedPtr std::shared_ptr -# define PtrCast std::dynamic_pointer_cast -#else -# include <boost/shared_ptr.hpp> -# ifdef BOOST_AC_USE_PTHREADS -# error "Boost is using mutexes for shared_ptr reference counting." -# error "This is VERY slow. Please report your platform to d@drobilla.net" -# endif -# define SharedPtr boost::shared_ptr -# define PtrCast boost::dynamic_pointer_cast -#endif - -#endif // RAUL_SHARED_PTR_HPP - diff --git a/raul/WeakPtr.hpp b/raul/WeakPtr.hpp deleted file mode 100644 index 327b03d..0000000 --- a/raul/WeakPtr.hpp +++ /dev/null @@ -1,29 +0,0 @@ -/* - This file is part of Raul. - Copyright 2007-2012 David Robillard <http://drobilla.net> - - Raul 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 3 of the License, or any later version. - - Raul 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 Raul. If not, see <http://www.gnu.org/licenses/>. -*/ - -#ifndef RAUL_WEAK_PTR_HPP -#define RAUL_WEAK_PTR_HPP - -#ifdef RAUL_CPP0x -# include <memory> -# define WeakPtr std::weak_ptr -#else -# include <boost/weak_ptr.hpp> -# define WeakPtr boost::weak_ptr -#endif - -#endif // RAUL_WEAK_PTR_HPP - |