|
|
@@ -6,6 +6,7 @@
|
|
|
#pragma once
|
|
|
|
|
|
#include "memory.h"
|
|
|
+#include <string.h> // memcpy
|
|
|
|
|
|
namespace crown
|
|
|
{
|
|
|
@@ -97,4 +98,40 @@ PAIR(T1, T2) make_pair(Allocator& a, T1 first, T2 second)
|
|
|
return pair;
|
|
|
}
|
|
|
|
|
|
+template <typename T1, typename T2>
|
|
|
+inline void swap(Pair<T1, T2, 0, 0>& a, Pair<T1, T2, 0, 0>& b)
|
|
|
+{
|
|
|
+ char c[sizeof(a)];
|
|
|
+ memcpy( c, &a, sizeof(a));
|
|
|
+ memcpy(&a, &b, sizeof(a));
|
|
|
+ memcpy(&b, &c, sizeof(a));
|
|
|
+}
|
|
|
+
|
|
|
+template <typename T1, typename T2>
|
|
|
+inline void swap(Pair<T1, T2, 0, 1>& a, Pair<T1, T2, 0, 1>& b)
|
|
|
+{
|
|
|
+ char c[sizeof(a)];
|
|
|
+ memcpy( c, &a, sizeof(a));
|
|
|
+ memcpy(&a, &b, sizeof(a));
|
|
|
+ memcpy(&b, &c, sizeof(a));
|
|
|
+}
|
|
|
+
|
|
|
+template <typename T1, typename T2>
|
|
|
+inline void swap(Pair<T1, T2, 1, 0>& a, Pair<T1, T2, 1, 0>& b)
|
|
|
+{
|
|
|
+ char c[sizeof(a)];
|
|
|
+ memcpy( c, &a, sizeof(a));
|
|
|
+ memcpy(&a, &b, sizeof(a));
|
|
|
+ memcpy(&b, &c, sizeof(a));
|
|
|
+}
|
|
|
+
|
|
|
+template <typename T1, typename T2>
|
|
|
+inline void swap(Pair<T1, T2, 1, 1>& a, Pair<T1, T2, 1, 1>& b)
|
|
|
+{
|
|
|
+ char c[sizeof(a)];
|
|
|
+ memcpy( c, &a, sizeof(a));
|
|
|
+ memcpy(&a, &b, sizeof(a));
|
|
|
+ memcpy(&b, &c, sizeof(a));
|
|
|
+}
|
|
|
+
|
|
|
} // namespace crown
|