summaryrefslogtreecommitdiff
path: root/include/misc.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/misc.hpp')
-rw-r--r--include/misc.hpp66
1 files changed, 66 insertions, 0 deletions
diff --git a/include/misc.hpp b/include/misc.hpp
new file mode 100644
index 0000000..f8afe77
--- /dev/null
+++ b/include/misc.hpp
@@ -0,0 +1,66 @@
+#pragma once
+
+#include <algorithm>
+#include <cmath>
+#include <cstdint>
+#include <sstream>
+
+constexpr int64_t DIPHA_MAGIC = 8067171840;
+constexpr int64_t DIPHA_DISTANCE_MATRIX = 7;
+constexpr int64_t DIPHA_PERSISTENCE_DIAGRAM = 2;
+constexpr int64_t DIPHA_WEIGHTED_BOUNDARY_MATRIX = 0;
+inline constexpr double PI = 4*std::atan(1);
+
+template <typename T> inline void reverse_endianness(T & x)
+{
+ uint8_t * p = reinterpret_cast<uint8_t *>(&x);
+ std::reverse(p, p + sizeof(T));
+}
+
+template <typename T> inline T read_le(std::istream & s)
+{
+ T result;
+ s.read(reinterpret_cast<char *>(&result), sizeof(T));
+ #ifdef BIGENDIAN
+ reverse_endianness(result);
+ #endif
+ return result;
+}
+
+template <typename T> inline void write_le(std::ostream & s, T value)
+{
+ #ifdef BIGENDIAN
+ reverse_endianness(value);
+ #endif
+ s.write(reinterpret_cast<char *>(&value), sizeof(T));
+}
+
+template <typename T> inline T read_be(std::istream & s)
+{
+ T result;
+ s.read(reinterpret_cast<char *>(&result), sizeof(T));
+ #ifndef BIGENDIAN
+ reverse_endianness(result);
+ #endif
+ return result;
+}
+
+template <typename T> inline void write_be(std::ostream & s, T value)
+{
+ #ifndef BIGENDIAN
+ reverse_endianness(value);
+ #endif
+ s.write(reinterpret_cast<char *>(&value), sizeof(T));
+}
+
+enum class Message_tag : int { result, work };
+
+template <typename T> inline T unroll_upper_tri(T n, T i, T j)
+{
+ return i*(n-1) - ((i-1)*i)/2 + j;
+}
+
+template <typename T> inline T unroll_full(T n, T i, T j)
+{
+ return i*n + j;
+}