From 330f78f3334bcdcdb4cc2ab2dbf66604e0224d71 Mon Sep 17 00:00:00 2001
From: lichao <lichao@aiotlink.com>
Date: 星期五, 21 五月 2021 16:21:45 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.5.5:10010/r/valib/bhshmq
---
src/bh_util.h | 40 ++++++++++++++++++++++++++++++----------
1 files changed, 30 insertions(+), 10 deletions(-)
diff --git a/src/bh_util.h b/src/bh_util.h
index bc48578..15ffeb0 100644
--- a/src/bh_util.h
+++ b/src/bh_util.h
@@ -18,6 +18,7 @@
#ifndef BH_UTIL_SOXWOK67
#define BH_UTIL_SOXWOK67
+#include "macro.h"
#include <functional>
#include <mutex>
#include <stdint.h>
@@ -91,6 +92,8 @@
inline void PutInt(void *p, uint32_t u) { Put32(p, u); }
inline void PutInt(void *p, uint64_t u) { Put64(p, u); }
+constexpr uint64_t MaskBits(int nbits) { return (uint64_t(1) << nbits) - 1; }
+
class ExitCall
{
typedef std::function<void(void)> func_t;
@@ -123,13 +126,13 @@
D &operator*() const { return *p_; }
};
-template <class T, class Mutex = std::mutex, class Lock = std::unique_lock<Mutex>>
+template <class T, class TMutex = std::mutex, class Lock = std::unique_lock<TMutex>>
class Synced
{
typedef T Data;
- Mutex mutex_;
+ TMutex mutex_;
Data data_;
- typedef SyncedPtr<Data, Mutex, Lock> Ptr;
+ typedef SyncedPtr<Data, TMutex, Lock> Ptr;
public:
template <class... P>
@@ -143,12 +146,29 @@
}
};
-// macro helper
-#define JOIN_IMPL(a, b) a##b
-#define JOIN(a, b) JOIN_IMPL(a, b)
-// defer function / lambda.
-#define DEFERF(func) ExitCall JOIN(defer_, __LINE__)(func)
-// defer simple expression
-#define DEFER1(expr) DEFERF([&]() { expr; })
+template <class T, class Tag>
+class StaticDataRef
+{
+ typedef T *Ptr;
+ static inline Ptr &ptr()
+ {
+ static Ptr sp(nullptr);
+ return sp;
+ }
+
+protected:
+ static inline T &GetData(const std::string &msg = "Must set data before use!")
+ {
+ if (!ptr()) { throw std::logic_error(msg); }
+ return *ptr();
+ }
+
+public:
+ static bool SetData(T &t)
+ {
+ auto Bind = [&]() { ptr() = &t; return true; };
+ return ptr() ? false : Bind();
+ }
+};
#endif /* end of include guard: BH_UTIL_SOXWOK67 */
--
Gitblit v1.8.0