aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander@sulfrian.net>2012-09-14 22:35:28 +0200
committerAlexander Sulfrian <alexander@sulfrian.net>2013-01-13 22:41:06 +0100
commit28d74542ba2f5073641e834c1ebb3eb937f2adcb (patch)
treeee8ff8463d8458119c2762b34d9907f486b4ab3a
parent8ec46846f6af0da23a1a42f345e40f517ba8f005 (diff)
downloadusdx-28d74542ba2f5073641e834c1ebb3eb937f2adcb.tar.gz
usdx-28d74542ba2f5073641e834c1ebb3eb937f2adcb.tar.xz
usdx-28d74542ba2f5073641e834c1ebb3eb937f2adcb.zip
utils: add disposer helper
The disposer helper should be used to encapsulate disposable objects. This objects have to cleanup something before deconstruction and so you need to help dispose before destruction of the object. The disposer takes care for you. On destruction of the disposer, it calls dispose of the encapsulated object and then destroy it, too. So you do not need to remember to call dispose manually.
-rw-r--r--src/utils/disposable.cpp52
-rw-r--r--src/utils/disposable.hpp49
-rw-r--r--src/utils/disposer.hpp57
3 files changed, 158 insertions, 0 deletions
diff --git a/src/utils/disposable.cpp b/src/utils/disposable.cpp
new file mode 100644
index 00000000..b77821cd
--- /dev/null
+++ b/src/utils/disposable.cpp
@@ -0,0 +1,52 @@
+/*
+ * UltraStar Deluxe - Karaoke Game
+ *
+ * UltraStar Deluxe is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program 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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program 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 this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "disposable.hpp"
+
+namespace usdx
+{
+ log4cpp::Category& Disposable::log =
+ log4cpp::Category::getInstance("usdx.utils.disposable");
+
+ Disposable::Disposable(void)
+ : disposed(false)
+ {
+ }
+
+ Disposable::~Disposable()
+ {
+ if (!disposed) {
+ log << log4cpp::Priority::ERROR << "You forgot to call dispose, "
+ << "before destroying an object with GlDelayedAllocation";
+ }
+ }
+
+ void Disposable::dispose(void)
+ {
+ if (!disposed) {
+ do_dispose();
+ disposed = true;
+ }
+ }
+};
diff --git a/src/utils/disposable.hpp b/src/utils/disposable.hpp
new file mode 100644
index 00000000..1f8f2d8a
--- /dev/null
+++ b/src/utils/disposable.hpp
@@ -0,0 +1,49 @@
+/*
+ * UltraStar Deluxe - Karaoke Game
+ *
+ * UltraStar Deluxe is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program 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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program 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 this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef DISPOSABLE_HPP
+#define DISPOSABLE_HPP
+
+#include <log4cpp/Category.hh>
+
+namespace usdx
+{
+ class Disposable
+ {
+ private:
+ static log4cpp::Category& log;
+ bool disposed;
+
+ protected:
+ virtual void do_dispose(void) = 0;
+
+ public:
+ Disposable(void);
+ ~Disposable();
+
+ void dispose(void);
+ };
+};
+
+#endif
diff --git a/src/utils/disposer.hpp b/src/utils/disposer.hpp
new file mode 100644
index 00000000..727676cd
--- /dev/null
+++ b/src/utils/disposer.hpp
@@ -0,0 +1,57 @@
+/*
+ * UltraStar Deluxe - Karaoke Game
+ *
+ * UltraStar Deluxe is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program 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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program 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 this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef DISPOSER_HPP
+#define DISPOSER_HPP
+
+#include <boost/noncopyable.hpp>
+
+namespace usdx
+{
+ template<typename T>
+ class Disposer : public boost::noncopyable
+ {
+ private:
+ T* disposable;
+
+ public:
+ Disposer(T* disposable)
+ : disposable(disposable)
+ {
+ }
+
+ T* get()
+ {
+ return disposable;
+ }
+
+ virtual ~Disposer()
+ {
+ disposable->dispose();
+ delete disposable;
+ }
+ };
+};
+
+#endif