diff options
-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 | ||||
-rw-r--r-- | test/ptr_test.cpp | 30 | ||||
-rw-r--r-- | wscript | 13 |
8 files changed, 35 insertions, 208 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 - diff --git a/test/ptr_test.cpp b/test/ptr_test.cpp deleted file mode 100644 index 22a1c2b..0000000 --- a/test/ptr_test.cpp +++ /dev/null @@ -1,30 +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/>. -*/ - -#include "raul/SharedPtr.hpp" -#include "raul/WeakPtr.hpp" - -int -main() -{ - /* TODO: Actually test functionality... */ - - SharedPtr<int> iptr; - WeakPtr<int> wptr; - wptr = iptr; - - return 0; -} @@ -57,14 +57,8 @@ def configure(conf): define_name='HAVE_GCOV', mandatory=False) - if Options.options.cpp0x: - conf.env.append_value('CXXFLAGS', ['-std=c++0x']) - autowaf.check_header(conf, 'cxx', 'memory') - autowaf.check_header(conf, 'cxx', 'atomic') - autowaf.define(conf, 'RAUL_CPP0x', 1) - else: - autowaf.check_header(conf, 'cxx', 'boost/shared_ptr.hpp') - autowaf.check_header(conf, 'cxx', 'boost/weak_ptr.hpp') + autowaf.check_header(conf, 'cxx', 'memory') + autowaf.check_header(conf, 'cxx', 'atomic') # TODO: Version includes and use autowaf.set_lib_env() here conf.env['INCLUDES_RAUL'] = [os.path.abspath(top) + '/raul'] @@ -79,7 +73,6 @@ tests = ''' test/atom_test test/double_buffer_test test/path_test - test/ptr_test test/queue_test test/ringbuffer_test test/sem_test @@ -124,8 +117,6 @@ def build(bld): target = i, install_path = '', cxxflags = test_cxxflags) - if bld.env.RAUL_CPP0x: - obj.defines = ['RAUL_CPP0x'] # Documentation autowaf.build_dox(bld, 'RAUL', RAUL_VERSION, top, out) |