summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAttila Molnar <attilamolnar@hush.com>2014-09-27 18:24:44 +0200
committerAttila Molnar <attilamolnar@hush.com>2014-09-27 18:24:44 +0200
commit8baacd6ef4ec866c96f40c47f30342b09ebe3a74 (patch)
tree895e6733c85b9e1a26f2b44bf64206f926bbf8c0
parente164675ed98468350a78fa69ca4d18670959c200 (diff)
Add the insp::aligned_storage template
-rw-r--r--include/aligned_storage.h50
-rw-r--r--include/compat.h2
-rw-r--r--include/inspircd.h1
3 files changed, 53 insertions, 0 deletions
diff --git a/include/aligned_storage.h b/include/aligned_storage.h
new file mode 100644
index 000000000..7bf0fe0a3
--- /dev/null
+++ b/include/aligned_storage.h
@@ -0,0 +1,50 @@
+/*
+ * InspIRCd -- Internet Relay Chat Daemon
+ *
+ * Copyright (C) 2014 Attila Molnar <attilamolnar@hush.com>
+ *
+ * This file is part of InspIRCd. InspIRCd 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, version 2.
+ *
+ * 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. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#pragma once
+
+namespace insp
+{
+ template <typename T> class aligned_storage;
+}
+
+template <typename T>
+class insp::aligned_storage
+{
+ mutable typename TR1NS::aligned_storage<sizeof(T), TR1NS::alignment_of<T>::value>::type data;
+
+ public:
+ aligned_storage()
+ {
+ }
+
+ aligned_storage(const aligned_storage& other)
+ {
+ }
+
+ T* operator->() const
+ {
+ return static_cast<T*>(static_cast<void*>(&data));
+ }
+
+ operator T*() const
+ {
+ return operator->();
+ }
+};
diff --git a/include/compat.h b/include/compat.h
index 9302c573f..e7719bcd7 100644
--- a/include/compat.h
+++ b/include/compat.h
@@ -28,9 +28,11 @@
#if defined _LIBCPP_VERSION || defined _WIN32
# define TR1NS std
# include <unordered_map>
+# include <type_traits>
#else
# define TR1NS std::tr1
# include <tr1/unordered_map>
+# include <tr1/type_traits>
#endif
/**
diff --git a/include/inspircd.h b/include/inspircd.h
index bebe1dea0..eaca34a9b 100644
--- a/include/inspircd.h
+++ b/include/inspircd.h
@@ -45,6 +45,7 @@
#include "intrusive_list.h"
#include "compat.h"
+#include "aligned_storage.h"
#include "typedefs.h"
#include "stdalgo.h"